Decay parameter of Adam optimizer in Keras
我认为Adam优化器的设计可以自动调整学习速度。
但是有一个选项可以明确提及Keras中Adam参数选项的衰减。
我想澄清一下衰减对Keras中Adam优化器的影响。
如果我们使用衰减编译模型,例如在lr = 0.001上说0.01,然后拟合运行50个纪元的模型,那么学习率是否在每个纪元后降低了0.01倍?
有什么方法可以指定学习率仅在运行一定时期后才衰减?
在pytorch中有一个不同的实现,称为AdamW,在标准keras库中不存在。
这是否与如上所述在每个纪元之后改变衰减相同?
感谢您的回复。
根据源代码,
调整每个
1 | lr = lr * (1. / (1. + decay * iterations)) # simplified |
请参见下图。这是与时代无关的。
要实现您所描述的内容,可以使用如下所示的回调:
1 2 3 4 5 6 7 8 9 | from keras.callbacks import LearningRateScheduler def decay_schedule(epoch, lr): # decay by 0.1 every 5 epochs; use `% 1` to decay after each epoch if (epoch % 5 == 0) and (epoch != 0): lr = lr * 0.1 return lr lr_scheduler = LearningRateScheduler(decay_schedule) model.fit(x, y, epochs=50, callbacks=[lr_scheduler]) |
我还有Keras AdamW。我也有Keras实现AdamW,NadamW和SGDW。
说明:第一次调用
在内部,每个批处理大小之后的学习率都会下降,但在每个时期之后并不会像通常认为的那样。
您可以在此处了解更多信息:https://www.pyimagesearch.com/2019/07/22/keras-learning-rate-schedules-and-decay/
但是,您还可以通过自定义的回调函数实现自己的learning_rate调度程序:
1 2 3 4 5 6 7 8 9 10 11 | def learning_rate_scheduler(epoch, lr): #Say you want to decay linearly by 5 after every 10 epochs the lr #(epoch + 1) since it starts from epoch 0 if (epoch + 1) % 10 == 0: lr = lr / 5 callbacks = [ tensorflow.keras.callbacks.LearningRateScheduler(learning_rate_scheduler, verbose=1) ] model.fit(...,callbacks=callbacks,...) |
以上方法适用于所有类型的优化器,不仅适用于Adam。