PyTorch-如何在训练中获得学习率?

ple*_*unt 6 python machine-learning deep-learning pytorch

在培训期间,我想知道learning_rate的价值。我该怎么办?

这是我的代码,像这样:

my_optimizer = torch.optim.SGD(my_model.parameters(), 
                               lr=0.001, 
                               momentum=0.99, 
                               weight_decay=2e-3)
Run Code Online (Sandbox Code Playgroud)

谢谢。

Zah*_*hra 12

或者,您可以将lr_scheduler优化器与优化器一起使用,并简单地调用内置lr_scheduler.get_lr()方法。

这是一个例子:

my_optimizer = torch.optim.Adam( my_model.parameters(), 
                                 lr = 0.001, 
                                 weight_decay = 0.002)

my_lr_scheduler = torch.optim.lr_scheduler.StepLR( my_optimizer, 
                                                step_size = 50, 
                                                gamma = 0.1)

# train
...
my_optimizer.step()
my_lr_scheduler.step()

# get learning rate
my_lr = my_lr_scheduler.get_lr()
# or
my_lr = my_lr_scheduler.optimizer.param_groups[0]['lr']
Run Code Online (Sandbox Code Playgroud)

使用的额外好处lr_scheduler是可以更好地控制随时间变化的 lr;lr_decay 等。有关 lr_scheduler args,请参阅 pytorch docs

  • Pytorch 2.0 是 `scheduler.get_last_lr()`。 (3认同)
  • 这似乎不再起作用了。但是你可以使用“scheduler._last_lr”,它会给你“[0.001]” (2认同)

blu*_*nox 11

对于仅一个参数组(如您给出的示例),您可以使用此函数并在训练过程中调用它以获取当前的学习率:

def get_lr(optimizer):
    for param_group in optimizer.param_groups:
        return param_group['lr']
Run Code Online (Sandbox Code Playgroud)


小智 6

使用

optimizer.param_groups[-1]['lr']
Run Code Online (Sandbox Code Playgroud)