Keras / Tensorflow中训练率如何在时代之间变化

时间:2018-03-21 14:48:17

标签: python deep-learning keras tensor

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

当然按术语"率"我的意思是特殊优化器使用的一大堆变量来确定实际权重更新和梯度)

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

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

1 个答案:

答案 0 :(得分:1)

<强>摘要

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

<强>详细

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

注意:您可以编写自己的衰减函数;你可以按照自己的意愿做出蠢事。一个这样的改变是

alpha = iteration_number

在您拿回咖啡之前,这会有所不同。

某些功能仅取决于当前状态和修饰符,例如

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

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

在任何情况下,这些都会在每个纪元开始时重置。如果您愿意,可以写一个重置,但我不推荐它。

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