我认为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/

10-13 04:26