Редактировать:
Чтобы прояснить, почему этот вопрос отличается от предложенных дубликатов, этот вопрос SO является продолжением предложенных дубликатов, о том, что именно делает Керас с методами, описанными в этих вопросах SO. Предлагаемые дубликаты указываются с использованием API набора данных make_one_shot_iterator()
в model.fit
, я продолжаю, что make_one_shot_iterator()
может пройти через набор данных только один раз, однако в данных решениях указано несколько эпох.
Это продолжение этих вопросов SO
Как правильно объединить API набора данных TensorFlow и Keras?
Tensorflow keras с вводом набора данных tf
Использование tf.data.Dataset в качестве обучения ввод в модель Keras НЕ работает
Где «Начиная с Tensorflow 1.9, можно передать объект tf.data.Dataset непосредственно в keras.Model.fit (), и он будет действовать аналогично fit_generator». В каждом примере есть итератор с одним выстрелом из набора данных TF, загруженный в файл Kera model.fit.
Пример приведен ниже
# Load mnist training data
(x_train, y_train), _ = tf.keras.datasets.mnist.load_data()
training_set = tfdata_generator(x_train, y_train,is_training=True)
model = # your keras model here
model.fit(
training_set.make_one_shot_iterator(),
steps_per_epoch=len(x_train) // 128,
epochs=5,
verbose = 1)
Однако, согласно руководству по API Tensorflow Dataset (здесь https://www.tensorflow.org/guide/datasets):
Одноразовый итератор - это простейшая форма итератора, которая поддерживает только однократную итерацию по набору данных.
Так что это годится только для 1 эпохи. Однако коды в вопросах SO определяют несколько эпох, а в приведенном выше примере кода указано 5 эпох.
Есть ли объяснение этому противоречию? Знает ли Керас каким-то образом, что, когда итератор с одним выстрелом прошел через набор данных, он может повторно инициализировать и перетасовать данные?