Набор данных TensorFlow, где каждый тензор является последовательностью последовательностей - PullRequest
0 голосов
/ 28 октября 2019

У меня три проблемы.

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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...