我注意到,对于 fit_generator
, steps_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/