如何在任何给定时刻更改优化器的学习率(无 LR 计划)?

问题描述 投票:0回答:2

PyTorch 是否可以在训练过程中动态更改优化器的学习率(我不想预先定义学习率计划)?

假设我有一个优化器:

optim = torch.optim.SGD(model.parameters(), lr=0.01)

现在,由于我在训练期间进行的一些测试,我意识到我的学习率太高,所以我想将其更改为

0.001
。似乎没有方法
optim.set_lr(0.001)
但是有什么方法可以做到这一点吗?

python optimization neural-network deep-learning pytorch
2个回答
170
投票

因此学习率存储在

optim.param_groups[i]['lr']
中。
optim.param_groups
是可以具有不同学习率的不同权重组的列表。因此,只需做:

for g in optim.param_groups:
    g['lr'] = 0.001

会成功的。


**或者**,

正如评论中提到的,如果您的学习率仅取决于纪元数,您可以使用学习率调度程序

例如(文档中的修改示例):

torch.optim.lr_scheduler import LambdaLR
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
# Assuming optimizer has two groups.
lambda_group1 = lambda epoch: epoch // 30
lambda_group2 = lambda epoch: 0.95 ** epoch
scheduler = LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
for epoch in range(100):
    train(...)
    validate(...)
    scheduler.step()

此外,还有一个预构建的学习率调度程序可以减少平台期。


20
投票

您可以直接通过以下方式完成,而不是patapouf_ai的答案中的循环

optim.param_groups[0]['lr'] = 0.001
© www.soinside.com 2019 - 2024. All rights reserved.