TensorFlow keras 模型 fit() 参数 steps_per_epoch 和训练集上的 epochs 行为

TensorFlow keras model fit() parameters steps_per_epoch and epochs behavior on train set

我正在使用 tf.data 数据集,其中包含我的训练数据,其中包含(比方说)10 万张图像。 我还使用了包含我的验证集的 tf.data 数据集。 由于所有 100k 图像的一个纪元需要很长时间(在我的情况下大约一个小时)才能得到关于验证集性能的任何反馈,所以我在 tf.keras.Model fit() 中设置了 steps_per_epoch 参数至 10000。 使用 1 的批量大小会导致在达到 100k 图像时具有 10 个验证分数。 为了完成我整个训练数据集的 100k 图像的一个 epoch,我将 epochs 参数设置为 10

但是,我不确定以这种方式使用 steps_per_epochepochs 是否会产生任何其他后果。使用这些参数以获得更频繁的性能反馈是否正确? 还有一个更具体的问题,它是使用所有 100k 图像还是在每个 'epoch' 都使用我训练集的前 10k 图像? 我已经深入研究了 TensorFlow docs 并阅读了几个不同的堆栈溢出问题,但我找不到任何结论来回答我自己的问题。希望你能帮上忙!

我使用的Tensorflow版本是2.2.0。

Is it correct to use these parameters in order to get more frequent feedback on performance?

是的,使用这些参数是正确的。这是我用来拟合模型的代码。

model.fit(
train_data,
steps_per_epoch = train_samples//batch_size,
epochs = epochs,
validation_data = test_data,
verbose = 1,
validation_steps = test_samples//batch_size)

does it use all 100k images or does it use the same first 10k images of my training set at every 'epoch'?

它使用训练数据中的所有图像。

为了更好地理解,Epoch 是学习算法在整个训练数据集上工作的次数。

其中 steps_per_epoch 是训练数据集中的样本总数除以批量大小。

例如,如果您有 100000 个训练样本并使用 100 的批量大小,则一个 epoch 将相当于 1000 steps_per_epoch。

注:我们一般观察到batch size是2的幂,这是因为优化矩阵运算库的有效工作。