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
参数:您告诉拟合函数从哪里开始学习率,而不是重置为零时间。
当使用一种自适应优化器(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
参数:您告诉拟合函数从哪里开始学习率,而不是重置为零时间。