训练速率如何在 Keras/Tensorflow 中的时期之间变化



当使用自适应优化器之一(Adam等)时,我们期望在epoch内的训练期间连续小批量的学习率会发生变化。 但我想知道连续的 epoch 之间的学习率将如何变化 - 它是从上一个 epoch(预期行为)继续还是从默认值初始化?

当然,术语"速率"是指特定优化器用来确定实际权重更新梯度的整堆变量)

另外,如果我运行 N 个 epoch 的训练,停止然后继续这样,速率会发生什么:

model.fit(data1_train_x,data1_train_y, 
initial_epoch=0, 
epochs=20,              
validation_split=0.1,
batch_size=64, 
callbacks=[tensorboard])
model.fit(data2_train_x,data2_train_y, 
initial_epoch=20, 
epochs=40, 
validation_split=0.1,
batch_size=64,               
callbacks=[tensorboard])

我想我会创建回调来记录每个纪元后的速率并绘制它,但在我这样做之前,可能已经有人知道了答案。

总结

速率变化不会重置;在这两种情况下,它们都会在各个时期平稳地继续。

细节

任何行为良好的学习率衰减函数都取决于训练的长度,因为迭代为 0。

注意:你可以编写自己的衰减函数;你可以让它像你想要的那样疯狂。 其中一种更改是

alpha = iteration_number

在你回来喝咖啡之前,这会分道扬镳。

有些函数仅依赖于当前状态和修饰符,例如

if iteration_number % 5000 == 0:
alpha *= 0.9

另一个包括半指数衰减,具体取决于剩余迭代的数量。

无论如何,这些不会在每个纪元开始时重置。 如果你愿意,你可以写一个来重置,但我不推荐它。

您的两阶段示例也不例外,因为您已经正确编码了它:您有第二个训练段从前一个训练段停止的地方开始。 这里的关键线索是initial_epoch参数:你告诉拟合函数从哪里开始学习率,而不是重置到时间零。

最新更新