我注意到,对于 fit_generatorsteps_per_epoch 参数通常被分配 total_samples//batch_size ,在那里可以创建一个生成器/使用 ImageDataGenerator 并将其作为参数传递给 fit_generator

但是,我使用 Sequence 类( keras.utils.Sequence() )来创建我的生成器并将 steps_per_epoch 传递给一个小于 total_samples//batch_size 的整数。

我想知道的是,一旦每个epoch完成,生成器中的数据生成是否会从头开始?

例如,我的训练集中有 3200 个样本,我使用的批次大小为 32。所以理想情况下,对于一个完整的 epoch,我应该将 steps_per_epoch 设置为 100。但是,如果我将 steps_per_epoch 设置为 50 会发生什么?一旦第一个纪元完成,会生成数据点编号 1601 (32*50) 还是从头开始(数据点编号 1)?

最佳答案

使用 Sequence 时,您不需要传递 steps_per_epoch ,因为可以从 __len__Sequence. 方法中推断出此信息

如果您在使用 steps_per_epoch 时传递 Sequence ,这将覆盖 __len__ 方法的任何使用,并且它将有效地仅使用您序列中的 steps_per_epoch 样本(从 0 到 steps_per_epoch - 1 ),并且它将在 epoch 结束时重置回零。您可以在 keras source code 中检查此行为。

关于python - Keras 序列、fit_generator 和 steps_per_epoch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56562445/

10-12 22:32