如果我想用train_generator训练模型,选择之间有显着差异吗
- 10 个纪元,每个纪元 500 步
和
- 100 个纪元,每个纪元 50 个步骤
目前我正在训练 10 个 epoch,因为每个 epoch 都需要很长时间,但任何显示改进的图表看起来都非常“跳跃”,因为我只有 10 个数据点。我认为如果使用 100 个 Epoch,我可以获得更平滑的图表,但我想首先知道这是否有任何缺点
最佳答案
根据您所说的,听起来您需要更大的batch_size
,当然这可能会影响steps_per_epoch和epochs的数量。
解决跳跃问题
- 较大的批量大小将为您提供更好的梯度,并有助于防止跳跃
- 您可能还需要考虑较小的学习率或学习率调度程序(或衰减),以允许网络在训练时“稳定下来”
较大批量大小的影响
- batch_size 太大可能会产生内存问题,尤其是在您使用 GPU 时。一旦超出限制,请回拨直至有效。这将帮助您找到系统可以使用的最大批量大小。
- 批量大小太大可能会让您陷入局部最小值,因此如果您的训练陷入困境,我会减少一些。想象一下,您在这里过度校正了跳跃,并且它的跳跃程度不足以进一步最小化损失函数。
何时减少纪元
- 如果您的训练误差非常低,但您的测试/验证却非常高,则说明您的模型过度拟合了过多的 epoch。
- 找到适当平衡的最佳方法是在验证测试集上使用提前停止。您可以在此处指定何时停止训练,并保存为您提供最佳验证损失的网络权重。 (我强烈建议始终使用它)
何时调整每轮步数
- 传统上,每个时期的步骤计算为 train_length//batch_size,因为这将使用所有数据点,一次一个批处理大小。
- 如果你要增加数据,那么你可以稍微扩展一下(有时我将上面的函数乘以 2 或 3 等。但是,如果它已经训练了太长时间,那么我会坚持使用传统方法。
关于tensorflow - 选择每个 Epoch 的步数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922252/