我按照本教程使用fit_generator()
Keras 方法即时生成数据,以训练我的神经网络模型。
我使用keras.utils.Sequence
类创建了一个生成器。调用fit_generator()
是:
history = model.fit_generator(generator=EVDSSequence(images_train, TRAIN_BATCH_SIZE, INPUT_IMG_DIR, INPUT_JSON_DIR, SPLIT_CHAR, sizeArray, NCHW, shuffle=True),
steps_per_epoch=None, epochs=EPOCHS,
validation_data=EVDSSequence(images_valid, VALID_BATCH_SIZE, INPUT_IMG_DIR, INPUT_JSON_DIR, SPLIT_CHAR, sizeArray, NCHW, shuffle=True),
validation_steps=None,
callbacks=callbacksList, verbose=1,
workers=0, max_queue_size=1, use_multiprocessing=False)
Run Code Online (Sandbox Code Playgroud)
steps_per_epoch
是None
,因此每个 epoch 的步数由 Keras__len()__
方法计算。
正如上面的链接所说:
在这里,该方法
on_epoch_end
在每个 epoch 的开始和结束时触发一次。如果shuffle
参数设置为True
,我们将在每次通过时获得一个新的探索顺序(否则只保留线性探索方案)。
我的问题是该on_epoch_end()
方法仅在最开始时被调用,而不会在每个时代结束时被调用。因此,在每个时期,批次顺序始终相同。
我尝试使用np.ceil
而不是np.floor
in__len__()
方法,但没有成功。
你知道为什么on_epoch_end
不在每个纪元结束时调用吗?您能告诉我在每个时代结束时(或开始时)调整批次顺序的任何解决方法吗?
非常感谢!