fit_generator中"samples_per_epoch"和"steps_per_epoch"之间的区别是什么

Hap*_*orm 25 keras

我好几天都对这个问题感到困惑......

我的问题是,为什么训练时间与我的生成器的batch_size设置为"1"和"20"之间存在巨大差异.

如果我设置的batch_size1时,训练时间1个时期为约180〜200秒.如果我设置的batch_size20时,训练时间1个时期为约3000〜3200秒.

然而,这些训练时间之间的这种可怕差异似乎是异常的...,因为它应该是相反的结果:batch_size = 1,训练时间 - > 3000~3200秒.batch_size = 20,训练时间 - > 180~200秒.

我的生成器的输入不是文件路径,而是通过调用"np.load()"已经加载到内存中的numpy数组.所以我认为I/O权衡问题不存在.

我正在使用Keras-2.0.3,我的后端是tensorflow-gpu 1.0.1

我已经看到了这个合并PR的更新,但似乎这个改变不会影响任何东西.(用法与原版相同)

这里的链接是我自定义生成器的要点和fit_generator的一部分.

有人可以帮我解释一下这个问题吗?非常感谢:)

小智 37

使用fit_generator时,每个纪元处理的样本数为batch_size*steps_per_epochs.来自fit_generator的Keras文档:https://keras.io/models/sequential/

steps_per_epoch:在声明一个纪元完成并开始下一个纪元之前从发生器产生的步骤(样本批次)的总数.它通常应等于数据集的唯一样本数除以批量大小.

这与'fit'的行为不同,其中增加batch_size通常会加快速度.

总之,当您使用fit_generator增加batch_size时,如果您希望训练时间保持不变或更低,则应将steps_per_epochs减少相同的因子.

  • 我没有看到fit_generator()例程中任何地方指定的batch_size.那么从哪里推断batch_size呢?他们将batch_size定义为(生成器的长度)/(steps_per_epoch)吗?他们说它"通常是平等的",但这意味着它完全相同. (3认同)