亚当在喀拉拉邦如何实现学习率衰减

时间:2019-08-16 21:36:16

标签: python tensorflow keras deep-learning

我在优化器Adam中设置了学习率衰减,例如

LR = 1e-3
LR_DECAY = 1e-2
OPTIMIZER = Adam(lr=LR, decay=LR_DECAY)

喀拉拉邦文献Adam指出,每个时期的学习率都是

lr = lr * (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay))))

如果我理解正确,学习率就是这样,

lr = lr * 1 / ( 1 + num_epoch * decay)

但是在看到打印出来后,我看不到学习率衰减开始生效。 我用这个有什么问题吗?

修改
我通过设置ReduceLROnPlateau的详细信息(例如

)来打印学习内容
ReduceLROnPlateau(monitor='val_loss', factor=0.75, patience=Config.REDUCE_LR_PATIENCE, verbose=1, mode='auto', epsilon=0.01, cooldown=0, min_lr=1e-6

这将监视val损耗并通过乘以factor来降低学习率。 印刷学习率是这样的

Epoch 00003: ReduceLROnPlateau reducing learning rate to 0.0007500000356230885.

我将初始学习率设置为1e-3。因此,学习率似乎从1e-3变为1e-3 * 0.75,因此我怀疑我在Adam中设置的decay无效。

1 个答案:

答案 0 :(得分:1)

学习率随每次迭代(即每批而不是每个时期)而变化。因此,如果您将衰减设置为1e-2,并且每个时期有100个批次/迭代,那么在1个时期之后,您的学习率将为

lr = init_lr * 1/(1 + 1e-2 * 100)

因此,如果我希望在每个时期结束时我的学习率是原始学习率的0.75,则可以将lr_decay设置为

batches_per_epoch = dataset_size/batch_size
lr_decay = (1./0.75 -1)/batches_per_epoch

这似乎对我有用。同样,由于每次迭代都会计算新的学习率,因此优化程序不会更改学习率变量的值,而是始终使用初始学习率来计算有效学习率。