我在 Keras 中复制了一篇我知道 和 的值的论文的epoch
工作batch_size
。由于数据集很大,所以我使用fit_generator
. 我想知道在steps_per_epoch
给定epoch
值和batch_size
. 有标准方法吗?
在 Keras 的 fit_generator 的 steps_per_epoch 中设置什么?
正如 Keras 的网页中提到的fit_generator()
:
steps_per_epoch:整数。在声明一个时期完成并开始下从生成器产生的步骤总数(样本批次)它通常应该等于 ceil(num_samples / batch_size)。序列可选:如果未指定,将使用 len(generator) 作为多个步骤。
您可以将其设置为num_samples // batch_size
,这是一个典型的选择。
但是,在使用callbacksteps_per_epoch
更新学习率时,让您有机会“欺骗”生成器,因为此回调会在每个 epoch 完成后检查损失的下降。如果损失在多个连续时期内停滞不前,则回调会降低学习率以“慢煮”网络。如果您的数据集很大,通常需要使用生成器时,您可能希望在单个 epoch 内衰减学习率(因为它包含大量数据)。这可以通过设置一个小于而不影响模型训练周期总数的值来实现。ReduceLROnPlateau()
patience
steps_per_epoch
num_samples // batch_size
将这种情况想象为在您的正常时期内使用迷你时期来改变学习率,因为您的损失已经停滞不前。我发现它在我的应用程序中非常有用。
我认为保持以下关系会很好
steps_per_epoch * batch_size = number_of_rows_in_train_data
这将导致使用一个时期的所有训练数据。此外,如果您需要快速性能,请考虑使用fit()
而不是fit_generator()
,但考虑到fit()
可能会使用更多内存。
例如,如果您有 100 个训练样本,则num_samples
= 100,或者行数x_train
为 100。
您可以指定自己的批量大小。在这种情况下,假设batch_size
= 20。因此,您可以设置steps_per_epoch
= 100/20 = 5,因为这样您可以利用每个时期的完整训练数据。
如果你还想问你想设置的场景steps_per_epoch
!= num_samples
/ batch_size
(比如num_samples
不能完全除以 的时候batch_size
),请参考这个帖子:https ://github.com/keras-team/keras/issues/10164
让我们清除它:
假设您有一个包含8000 个样本(数据行)的数据batch_size = 32
集,并且您选择epochs = 25
这意味着数据集将分为 (8000/32) = 250 个批次,每批次有32 个样本/行。模型权重将在每批后更新。
一个 epoch 将训练 250 个批次或对模型进行 250 次更新。
这里steps_per_epoch
= 批次数
使用 50 个 epoch,模型将遍历整个数据集 50 次。
参考 - https://machinelearningmastery.com/difference-between-a-batch-and-an-epoch/