Я пытаюсь использовать API наборов данных Tensorflow (v2.0) для передачи больших объемов данных в tf.keras.model
. Вот упрощенная версия моего набора данных:
for rec in my_dataset:
print(repr(rec))
$ {'feature0': <tf.Tensor: id=528, shape=(), dtype=float32, numpy=0.2963>,
'feature1': <tf.Tensor: id=618, shape=(), dtype=int64, numpy=0>,
'feature2': <tf.Tensor: id=620, shape=(), dtype=string, numpy=b'Inst1'>,
'target': <tf.Tensor: id=621, shape=(), dtype=int64, numpy=2>}
{'feature0': <tf.Tensor: id=528, shape=(), dtype=float32, numpy=0.4633>,
'feature1': <tf.Tensor: id=618, shape=(), dtype=int64, numpy=1>,
'feature2': <tf.Tensor: id=620, shape=(), dtype=string, numpy=b'Inst4'>,
'target': <tf.Tensor: id=621, shape=(), dtype=int64, numpy=0>}
... и так далее. Каждая запись в объекте my_dataset
является словарем с именами объектов (и целей) в качестве ключей и связанными тензорами в качестве значений. Я создал набор данных из нескольких файлов .tfrecord, поэтому я ограничен в том смысле, что каждый тензор соответствует объекту tf.train.Example
(обертка). Набор данных точно соответствует формату, представленному в документации по тензорному потоку (см., Например, последний пример кода в https://www.tensorflow.org/tutorials/load_data/tfrecord#reading_a_tfrecord_file).
Я хотел бы использовать этот набор данных с кератами. Кажется, объекты tf.keras.model
, с которыми я работаю, для своей функции fit
принимают в качестве входных данных кортеж, представляющий вектор признаков (X) и цель (y). Я думаю, я мог бы выяснить, как преобразовать тензоры из моего набора данных в массивы numpy и передать их в модель таким образом, или выполнить итерацию по набору данных с помощью итератора, но если я правильно понимаю, это, похоже, разрушает всю цель используя API наборов данных для начала (см., например, https://www.tensorflow.org/guide/keras/overview#train_from_tfdata_datasets).
Мой вопрос: как правильно преобразовать my_dataset
в некую форму, tf.keras.model.fit()
получит? Или, если это неправильный вопрос, какие фундаментальные понятия мне не хватает, которые мешают мне задать правильный? (Например, должны ли примеры .tfrecord быть структурированы по-другому? Или мне нужно использовать итератор вместо прямой передачи my_dataset
в модель, как я бы предпочел?)