我认为Adam优化器的设计可以自动调整学习率。
但是有一个选项可以明确提及Keras中Adam参数选项的衰减。
我想澄清一下衰减对Keras中Adam优化器的影响。
如果我们使用衰减对模型进行编译,例如在lr = 0.001上说0.01,然后对运行50个历元的模型进行拟合,那么学习率是否在每个历元后降低0.01倍?
有什么方法可以指定学习率仅在运行一定时期后才衰减?
在pytorch中,有一个称为AdamW的不同实现,它在标准keras库中不存在。
这是否与如上所述在每个时期之后改变衰减相同?
预先感谢您的答复。
最佳答案
从source code中,decay
根据
lr = lr * (1. / (1. + decay * iterations)) # simplified
请参阅下面的image。这是与时代无关的。每次配合批次时,
lr
都会增加1(例如,每次调用iterations
时,或者iterations
中的train_on_batch
中有多少批次-通常是x
批次)。要实现您所描述的内容,可以使用如下所示的回调:
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])
model.fit(x)
接受一个函数作为参数,并且该函数在每个纪元的开始被len(x) // batch_size
馈给纪元索引和LearningRateScheduler
。然后,它根据该函数更新lr
,因此在下一个时期,该函数将获得更新的.fit
。另外,我-Keras AdamW提供了AdamW,NadamW和SGDW的Keras实现。
澄清:第一次调用
lr
会用lr
调用 .fit()
-如果我们不希望on_epoch_begin
立即衰减,则应在epoch = 0
中添加lr
检查。然后,epoch != 0
表示已经经过了几个纪元-因此,当decay_schedule
时,将应用衰减。关于python - Keras中Adam优化器的衰减参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60029027/