【问题标题】:Why does Tensorflow LearningRateScheduler *increase* (not decrease) the learning rate with each epoch?为什么 Tensorflow LearningRateScheduler *增加*(而不是减少)每个时期的学习率?
【发布时间】:2019-08-08 23:30:00
【问题描述】:

在 Coursera 课程“TensorFlow in Practice -- Sequeneces, Time Series and Prediction”上,第二周的第 9 个视频使用回调来动态提高(而不是降低)学习率。我明白为什么我们需要动态调整费率;但这个回调增加每个时期的学习率。难道我们不想反其道而行之,随着神经网络学习得更多而逐渐降低学习率吗?我确定视频是正确的(它是由 Andrew Ng 和 Google 创建的,他们显然对 TensorFlow 了解很多)但是为什么我们要提高(而不是降低)学习率? keras 实际上是使用这个数字的倒数作为学习率,还是类似的东西?

#Doesn't the next line *increase* the learning rate with each callback?
#But shouldn't we be gradually decreasing it? 
lr_schedule = tf.keras.callbacks.LearningRateScheduler(
    lambda epoch: 1e-8 * 10**(epoch / 20))
optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)
model.compile(loss="mse", optimizer=optimizer)
history = model.fit(dataset, epochs=100, callbacks=[lr_schedule], verbose=0)

以下是他们随此示例提供的示例笔记本中的完整代码示例: https://colab.research.google.com/github/lmoroney/dlaicourse/blob/master/TensorFlow%20In%20Practice/Course%204%20-%20S%2BP/S%2BP%20Week%202%20Lesson%203.ipynb

每个 epoch 增加学习率是否正确?这会不会导致优化器在每个时期“过度拍摄”答案并且永远不会收敛到解决方案?

【问题讨论】:

  • 这叫做热身。见stackoverflow.com/questions/55933867/…(我如何正确引用这个?)
  • 但是学习率会越来越高,而且会永远增加。这不会阻止神经网络收敛到解决方案吗?优化器不会在每一步都保持“过度”目标吗?

标签: tensorflow keras


【解决方案1】:

你是对的。当目标是训练网络时,实际执行此操作没有任何意义。他们这样做是为了证明你的学习率可能太高了吗?紧随其后的图表可能正在显示这样的教训。

【讨论】:

  • 另请注意,他们没有在以下模型中重用回调函数 LearningRateScheduler 拟合
猜你喜欢
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 2019-09-06
  • 2022-01-22
相关资源
最近更新 更多