【问题标题】:How training rate changes between epochs in Keras/TensorflowKeras/Tensorflow 中不同时期的训练率如何变化
【发布时间】:2018-03-21 14:48:16
【问题描述】:

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

当然,术语“速率”是指特定优化器用来确定实际权重更新 wrt 梯度的全部变量)

如果我运行 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])

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

【问题讨论】:

  • 您可以使用已建立的 keras 回调来根据 epoch 数修改您的学习率。尽管我没有尝试过,但您也可以对优化器超参数做同样的事情。

标签: python deep-learning keras tensor


【解决方案1】:

总结

费率更改不会重置;在这两种情况下,它们都会在各个时期顺利进行。

详情

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

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

alpha = iteration_number

在你喝咖啡回来之前,这会有所不同。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 2020-10-17
    • 2019-05-05
    • 2018-12-02
    • 2020-10-25
    • 2018-06-08
    • 1970-01-01
    • 2023-02-22
    相关资源
    最近更新 更多