PyTorch:如何在任何给定时刻更改优化器的学习率(无 LR 计划)
PyTorch: How to change the learning rate of an optimizer at any given moment (no LR schedule)
PyTorch 是否可以在训练过程中动态改变优化器的学习率(我不想事先定义学习率计划)?
假设我有一个优化器:
optim = torch.optim.SGD(model.parameters(), lr=0.01)
现在由于我在训练期间进行了一些测试,我意识到我的学习率太高了,所以我想将其更改为 0.001
。似乎没有方法 optim.set_lr(0.001)
但是有什么方法可以做到这一点吗?
因此学习率存储在optim.param_groups[i]['lr']
中。
optim.param_groups
是可以具有不同学习率的不同权重组的列表。因此,简单地做:
for g in optim.param_groups:
g['lr'] = 0.001
会成功的。
或者,
如评论中所述,如果您的学习率仅取决于纪元数,则可以使用 learning rate scheduler。
例如(来自文档的修改示例):
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()
还有,还有一个prebuilt learning rate scheduler to reduce on plateaus.
您可以直接通过以下方式执行此操作,而不是 中的循环:
optim.param_groups[0]['lr'] = 0.001
PyTorch 是否可以在训练过程中动态改变优化器的学习率(我不想事先定义学习率计划)?
假设我有一个优化器:
optim = torch.optim.SGD(model.parameters(), lr=0.01)
现在由于我在训练期间进行了一些测试,我意识到我的学习率太高了,所以我想将其更改为 0.001
。似乎没有方法 optim.set_lr(0.001)
但是有什么方法可以做到这一点吗?
因此学习率存储在optim.param_groups[i]['lr']
中。
optim.param_groups
是可以具有不同学习率的不同权重组的列表。因此,简单地做:
for g in optim.param_groups:
g['lr'] = 0.001
会成功的。
或者,
如评论中所述,如果您的学习率仅取决于纪元数,则可以使用 learning rate scheduler。
例如(来自文档的修改示例):
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()
还有,还有一个prebuilt learning rate scheduler to reduce on plateaus.
您可以直接通过以下方式执行此操作,而不是
optim.param_groups[0]['lr'] = 0.001