Keras 拟合生成器函数

数据挖掘 时代
2021-10-06 14:29:59

我想知道我的想法是否正确?

总图像 = 120,000

因此,在 Keras Fit Generator 函数中,我设置了 batch_size = 24 和 step per epoch = 500 ,即 12000,仅占总数据集的十分之一。

因此,如果我真的希望真正的纪元为 10,我应该使“纪元 = 100”。

即实际上需要 10 个 epoch 才能遍历整个 120,000 张图像一次。

2个回答

您的假设部分正确,因为您的模型将在 10 个时期内看到 120000 张图像(即整个数据集的大小)。

然而,由于 keras 的默认生成器在每个 epoch 结束时对数据集进行打乱,因此模型不太可能在 10 个 epoch 后看到每张图像一次。

我的建议是设置steps_per_epoch=5000.

来自相关的 Keras 文档:

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

所以你的假设是正确的。

如果你想在每个 epoch 中使用所有数据,你应该选择 abatch_sizesteps_per_epoch那个相乘得到你的样本总数。

通常,您的资源会为您决定这一点。如果内存是一个问题,您必须减少批量大小,直到您可以将批量安装到 GPU 上(例如)。

在您的情况下,我可能会设置batch_size为所需的数量,然后让 Kerasstep_per_epoch为您解决问题!仅当您确实希望模型不使用每个时期中的所有数据时才更改它(这实际上弯曲了“时期”一词的定义)。