【发布时间】:2020-04-25 23:19:03
【问题描述】:
我跟随this tutorial 使用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)
steps_per_epoch是None,所以每个epoch的步数是通过Keras的__len()__方法计算出来的。
如上链接所述:
这里,
on_epoch_end方法在每个 epoch 的开始和结束时触发一次。如果shuffle参数设置为True,我们将在每次通过时获得一个新的探索顺序(否则保持线性探索方案)。
我的问题是 on_epoch_end() 方法只在开始时被调用,而不会在每个纪元结束时被调用。
因此,在每个 epoch,批次顺序始终相同。
我尝试在__len__() 方法中使用np.ceil 而不是np.floor,但没有成功。
你知道为什么 on_epoch_end 在每个 epoch 结束时不被调用吗?你能告诉我在每个时期结束(或开始)时调整批次顺序的任何解决方法吗?
非常感谢!
【问题讨论】:
标签: python tensorflow keras deep-learning training-data