我正在研究使用 Keras+TensorFlow 训练 CNN 模型期间的性能和 GPU 使用情况。与这个问题类似,我很难理解Keras model.fit
的steps_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 是否大于训练集的一次传递?">
是的。某些数据将在同一纪元中再次传递。