选择每个时期的步数

时间:2018-04-19 13:23:36

标签: tensorflow machine-learning keras

如果我想用train_generator训练模型,那么选择之间是否存在显着差异

  • 每个500步的10个时期

  • 每个50步的100个时期

目前我正在训练10个时代,因为每个时代都需要很长时间,但任何显示出改进的图表看起来非常"跳跃"因为我只有10个数据点。如果我使用100个Epochs,我想我可以得到更平滑的图形,但我想首先知道这是否有任何缺点

3 个答案:

答案 0 :(得分:4)

根据你说的话,你需要一个更大的batch_size,当然会有影响step_per_epoch和时代数的影响。

解决跳跃问题

  • 批量较大会为您提供更好的渐变效果,有助于防止跳跃
  • 您可能还需要考虑较小的学习率或学习率调度程序(或衰减)以允许网络在训练时“安顿下来”

较大批量的含义

  • 太大的batch_size会产生内存问题,尤其是在使用GPU的情况下。超过限制后,请将其拨回,直至其正常工作。这将帮助您找到系统可以使用的最大批量大小。
  • 太大的批量大小会让你陷入局部最小值,所以如果你的训练卡住,我会减少一些。想象一下,你正在过度纠正跳跃并且没有足够的跳跃来进一步减少损失功能。

何时减少时期

  • 如果您的列车错误非常低,但您的测试/验证非常高,那么您的模型过于贴合了太多时期。
  • 找到正确平衡的最佳方法是使用验证测​​试集提前停止。在这里,您可以指定何时停止训练,并保存网络的权重,从而为您提供最佳的验证损失。 (我强烈建议总是使用它)

何时调整每个步骤的步数

  • 传统上,每个纪元的步数计算为train_length // batch_size,因为这将使用所有数据点,一次一个批量大小。
  • 如果你正在扩充数据,那么你可以延长这一点(有时我将该函数乘以2或3等等。但是,如果它已经训练了太长时间,那么我会坚持使用传统的方法。

答案 1 :(得分:0)

每个纪元的步数不会连接到纪元。

当然,你想要的1个纪元,你的发电机一次通过你所有的训练数据。要实现这一目标,您应该提供每个时期的步数等于这样的批次数:

steps_per_epoch = int( np.ceil(x_train.shape[0] / batch_size) )

从上面的等式中batch_size最大,steps_per_epoch越低。

接下来,您将根据所选验证选择纪元。 (选择你认为最好的)

答案 2 :(得分:0)

每个时期的步骤数表示一个时期要选择的批次数量。 如果选择了500个步骤,则网络将训练500个批次以完成一个时期。 如果我们选择大量的时期,那可能是计算性的