在 Keras 的 fit_generator 的 steps_per_epoch 中设置什么?

数据挖掘 喀拉斯 时代
2021-09-19 21:40:10

我在 Keras 中复制了一篇我知道 和 的值的论文的epoch工作batch_size由于数据集很大,所以我使用fit_generator. 我想知道在steps_per_epoch给定epoch值和batch_size. 有标准方法吗?

4个回答

正如 Keras 的网页中提到的fit_generator()

steps_per_epoch:整数。在声明一个时期完成并开始下从生成器产生的步骤总数(样本批次)它通常应该等于 ceil(num_samples / batch_size)序列可选:如果未指定,将使用 len(generator) 作为多个步骤。

您可以将其设置为num_samples // batch_size,这是一个典型的选择。

但是,在使用callbacksteps_per_epoch更新学习率时,让您有机会“欺骗”生成器,因为此回调会在每个 epoch 完成后检查损失的下降。如果损失在多个连续时期内停滞不前,则回调会降低学习率以“慢煮”网络。如果您的数据集很大,通常需要使用生成器时,您可能希望在单个 epoch 内衰减学习率(因为它包含大量数据)。这可以通过设置一个小于而不影响模型训练周期总数的值来实现。ReduceLROnPlateau() patiencesteps_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/

在此处输入图像描述