将Keras model.fit的"steps_per_epoch"与TensorFlow的数据集API的"batch()"相结合



我正在研究使用 Keras+TensorFlow 训练 CNN 模型期间的性能和 GPU 使用情况。与这个问题类似,我很难理解Keras model.fitsteps_per_epoch和TensorFlow的数据集API .batch()的组合使用:我在输入管道上设置了一定的批量大小dataset = dataset.batch(batch_size)后来我使用

fit = model.fit(dataset, epochs=num_epochs, steps_per_epoch=training_set_size//batch_size)

但我看到人们实际上可以为每个纪元设置任意数量的步数,甚至超过 training_set_size//batch_size 步数.从文档中我了解到,在 Keras 上,纪元不一定像往常一样传递整个训练集,但无论如何我有点困惑,现在我不完全确定我是否正确使用它。

dataset.batch(batch_size) + steps_per_epoch=training_set_size//batch_size是否在定义一个小批量 SGD,该 SGD 由 batch_size 个样本的小批量运行整个训练集?如果 epoch 设置为 training_set_size//batch_size 以上,则 epoch 是否大于训练集的一次传递steps_per_epoch

steps_per_epoch是在一个时代内通过网络运行的您设置的批次大小的批次数。

您有充分的理由将steps_per_epoch设置为training_set_size//batch_size。这可确保在一个 epoch 中训练所有数据,提供数字除以精确(如果不是,则按//运算符舍入(。

也就是说,如果您的批大小为 10,训练集大小为 30,则steps_per_epoch = 3确保使用所有数据。

并引用您的问题:

"如果 epoch 设置为 training_set_size//batch_size 以上steps_per_epoch,则 epoch 是否大于训练集的一次传递?">

是的。某些数据将在同一纪元中再次传递。

最新更新