У меня три проблемы.
1. Мне нужно преобразовать столбец функций pandas.DataFrame в tf.data.Dataset
2. Мне нужно создать столбец tf.feature_column для моего параметра tf.estimator.DNNRegressor feature_columns.
3. Мне нужно создать serve_input_receiver_fn, который позволит мне в конечном итоге обслуживать мою модель. .
Мои необработанные данные представляют собой строки символов. У меня есть один горячий код их, чтобы следовать формату, подобному этому.
datum1 = [[0,0,0,0,0,0,0,0,...,0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,0,0,...,0,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
.
.
.
[1,0,0,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,0,...,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,...,0,0,0,0,0,0,1,0]]
datum2 = [[0,0,0,0,0,0,0,0,...,0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,0,0,...,0,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
.
.
.
[1,0,0,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,0,...,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,...,0,0,0,0,0,0,1,0]]
.
.
.
datumN = [[0,0,0,0,0,0,0,0,...,0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,0,0,...,0,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
.
.
.
[1,0,0,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,0,...,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,...,0,0,0,0,0,0,1,0]]
Примечание
a. Каждый элемент данных имеет тип numpy.ndarray
b. Каждый элемент данных является элементом панды. DataFrame.
c. Каждый элемент данных является функцией с меткой типа float64
Итак, вот мой метод получения набора данных из моего фрейма данных.
def prepare_tf_dataset(dataframe):
features = dataframe['features']
labels = dataframe['labels']
dataset = tf.data.Dataset.from_tensor_slices((features,labels))
return dataset
Когда я запускаю код, я получаю эту ошибку:
TypeError: Expected binary or unicode string, got array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]])
Чтобы решить эту проблему, я попытался использовать numpy.tostring () для каждого элемента данных и не получил здесь никакой ошибки. Тем не менее, это побеждает цель горячего и использования в моем представлении кодировки tf.feature_column.numeric_column. Я ошибаюсь в этой мысли?
Эти действия по созданию набора tf.data.Datase направлены на связный параметр input_fn для использования tf.estimator.DNNRegressor.train
Здесь TRAINING_DATA - это мой кадр данных одной горячей последовательности, закодированной вtf набор данных с их метками (чтобы понять, как это сделать, цель моего последнего вопроса, но давайте предположим, что это сделано). Этот код должен обучать регрессор, но для его завершения у меня должна быть правильная спецификация feature_columns в tf.estimator.DNNRegressor, которой у меня сейчас нет.
def tf_dataset_input_fn(dataset):
iterator = dataset.make_one_shot_iterator()
features,labels = iterator.get_next()
return {'my_feature':features},labels
train_input = lambda: tf_dataset_input_fn(TRAINING_DATA)
regressor.train(input_fn=train_input,steps=5000)
Как правильно использовать столбец признаков, где каждый тензор, который будет передан в регрессор, представляет собой последовательности последовательностей? Является ли числовой столбец правильным выбором, и будет ли функция sequence_numeric_column, и если да, то как?
Вот текущий неисправный код.
feature_cols = [tf.feature_column.numeric_column(key='my_feature')]
regressor = tf.estimator.DNNRegressor(feature_columns = feature_cols,...)
Давайте теперь предположим, что все работает. Модель обучена и сейчас я ее обслуживаю. Я хочу сказать, что примером данного тензора является последовательность последовательностей. Как это сделать? У меня есть структура для моего serve_input_receiver_fn из другой модели, которую я понял лучше.
feature_config = {'my_feature': tf.FixedLenFeature([])}
def serving_input_receiver_fn():
serialized_tf_example = tf.placeholder(dtype = tf.int64,
shape = [None],
name = 'single_smi_input')
receiver_tensors = {'input_features': serialized_tf_example}
features = tf.parse_example(serialized_tf_example, feature_config)
output = tf.estimator.export.ServingInputReceiver(features,receiver_tensors)
return output
regressor.export_saved_model(PATH,serving_input_receiver_fn)
Я в недоумении, как получить пример тензора фиксированной длины, представляющего собой последовательность последовательностей, содержащих типы int64.
В целом, я хотел бы помочь с поворотоммой один горячий столбец данных и столбец с их метками в tf.data.Dataset, имеющий соответствующий feature_column для этого tf.data.Dataset, а затем получаю право моего serve_input_receiver_fn ().