Как tf.keras.Model различает функции и метки в tf.data.Dataset и в TFRecords? - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь создать tfrecords файлы из данных CSV, затем я хочу использовать tf.data.TFRecordDataset() для создания Dataset из них, а затем передать Dataset в tf.keras.Model. (На самом деле я использую spark-tenorflow -nector для создания tfrecords файлов непосредственно из Spark Dataframes.)

В fit() методе tf.keras.Model, аргумент x - Входные данные. Это может быть:

Набор данных tf.data. Должен возвращать кортеж либо (входы, цели) или (входы, цели, sample_weights).

Q1: Где tf.keras.Model знает, где разделить элементы и метки? то есть, функции inputs, метки targets.

Однако в некоторых примерах я не мог видеть "кортеж" в сборке файлов tfrecords или tf.data.Dataset. Например, в следующем примере ,

def convert_to_tfrecord(input_files, output_file):
  """Converts a file to TFRecords."""
  print('Generating %s' % output_file)
  with tf.io.TFRecordWriter(output_file) as record_writer:
    for input_file in input_files:
      data_dict = read_pickle_from_file(input_file)
      data = data_dict[b'data']
      labels = data_dict[b'labels']
      num_entries_in_batch = len(labels)
      for i in range(num_entries_in_batch):
        example = tf.train.Example(features=tf.train.Features(
            feature={
                'image': _bytes_feature(data[i].tobytes()),
                'label': _int64_feature(labels[i])
            }))
        record_writer.write(example.SerializeToString())

...

# Read dataset from tfrecords
dataset = tf.data.TFRecordDataset(tfrecords_files)

Q2: Так как же это tf.keras.models.Sequential() модель знает, где найти элементы и где найти метки? Почему модель не принимает метку в качестве элемента данных?

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вам необходимо рассмотреть пример полного кода, т. Е. Другие файлы, в которых проводится обучение и т. Д. c. Главное - это функция parse_and_decode в этом файле , которая анализирует файл TFRecords (без такой функции анализа данные не могут быть интерпретированы) и возвращает кортеж image, label для каждого фрагмента данных. Затем эта функция сопоставляется с набором данных в функции create_datasets.

Таким образом, набор данных, который присваивается model.fit, на самом деле является набором данных кортежей, и, насколько мне известно, это именно то, что будет предполагать модель, если вы предоставите tf.data.Dataset в качестве входных данных для функции fit - набор данных кортежей inputs, labels. Таким образом, первое будет использоваться в качестве входных данных для модели, а второе - в качестве цели для функции потерь.

0 голосов
/ 21 января 2020

В этом примере

            feature={
                'image': _bytes_feature(data[i].tobytes()),
                'label': _int64_feature(labels[i])
            }))

Здесь image и label - это кортеж, в котором изображение имеет тип byte, а метки имеют тип int64. Вы можете прочитать больше здесь .

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