Keras/Tensorflow 中各时期的训练率如何变化

How training rate changes between epochs in Keras/Tensorflow

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

当然,术语 "rate" 我的意思是特定优化器用来确定实际权重更新 wrt 梯度的全部变量)

另外,如果我 运行 训练 N 个时期,停止然后继续,那么速率会发生什么变化:

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])

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

总结

汇率变化不会重置;在这两种情况下,它们都顺利地跨越了时代。

详情

任何 well-behaved learning-rate 衰减函数取决于训练的长度,因为迭代 0。

注意:可以自己写衰减函数;你可以随心所欲地让它变得疯狂。一种这样的改变是

alpha = iteration_number

这会在你回来喝咖啡之前发生分歧。

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

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

另一个由 semi-exponential 衰减组成,具体取决于剩余迭代的数量。

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

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