如果我想用train_generator训练模型,选择之间有明显的区别
10个时期,每个500个步骤
和
100个纪元,每个50个步骤
目前,我正在训练10个纪元,因为每个纪元都需要很长时间,但是任何显示改进的图形看起来都非常“跳跃”,因为我只有10个数据点。我想如果我使用100个纪元,我可以获得一个更平滑的图形,但是我想首先知道这个图形是否有不利之处
根据您所说的,这听起来好像您需要一个更大的batch_size
,当然,这可能会影响steps_per_epoch和时期数。
解决跳车
较大的批次大小将为您提供更好的渐变,并有助于防止跳动
您可能还需要考虑较小的学习速率,或学习速率调度程序(或衰减),以使网络在训练时能够“适应”
批量较大的含义
batch_size太大会产生内存问题,尤其是在使用GPU的情况下。超出限制后,请拨回直到它可以使用。这将帮助您找到系统可以使用的最大批处理大小。
批次大小太大会使您陷入局部最小值,因此,如果您的培训遇到问题,我会减少一些。想象一下,这里您过度校正了跳动,而跳动的程度不足以进一步最小化损失函数。
何时减少时代
如果您的训练误差非常低,但是您的测试/验证却非常高,那么您可能会因模型过多而过度拟合。
找到正确平衡的最佳方法是对验证测试集使用早期停止功能。您可以在此处指定何时停止训练,并保存权重最大的网络,以减少最佳验证损失。(我强烈建议始终使用此功能)
何时调整每个时期
传统上,每个纪元的步长计算为train_length // batch_size,因为这将使用所有数据点,一次只需要一个批处理大小。
如果您要扩充数据,则可以将其扩展一点(有时我将上述函数乘以2或3等。但是,如果它已经训练了太长时间,那么我只会坚持使用传统方法。