gpt4 book ai didi

python - Adam在keras中是如何实现学习率衰减的

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:58 24 4
gpt4 key购买 nike

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

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

作为keras文档Adam状态,在每个 epoch 之后学习率将是

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-loss 并通过乘以 factor 来降低学习率。打印出来的学习率是这样的,

Epoch 00003: ReduceLROnPlateau reducing learning rate to 0.0007500000356230885.

我将初始学习率设置为 1e-3。因此,看起来学习率从 1e-3 变为 1e-3 * 0.75,所以我怀疑我在 Adam 中设置的 decay 没有起作用。

最佳答案

学习率随每次迭代而变化,即随每个批处理而不是 epoch 变化。所以,如果你设置 decay = 1e-2 并且每个 epoch 有 100 个 batches/iterations,那么在 1 epoch 之后你的学习率将是

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

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

关于python - Adam在keras中是如何实现学习率衰减的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com