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

Posted

技术标签:

【中文标题】PyTorch - 如何在训练期间获得学习率?【英文标题】:PyTorch - How to get learning rate during training? 【发布时间】:2019-03-10 16:30:31 【问题描述】:

在训练时,我想知道 learning_rate 的值。 我该怎么办?

这是我的代码,如下所示:

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

谢谢。

【问题讨论】:

【参考方案1】:

对于您给出的示例中只有一个参数组,您可以使用此函数并在训练期间调用它以获得当前的学习率:

def get_lr(optimizer):
    for param_group in optimizer.param_groups:
        return param_group['lr']

【讨论】:

在没有动量和调度器的情况下,在 SGD 上将 lr 设置为 0.1。在训练期间得到了 7.2 的东西。我认为显示的值不正确【参考方案2】:

或者,您可以将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']

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

【讨论】:

以上是关于PyTorch - 如何在训练期间获得学习率?的主要内容,如果未能解决你的问题,请参考以下文章

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

pytorch--训练分层学习率设置

Pytorch模型训练实用教程学习笔记:四优化器与学习率调整

Pytorch不同层设置不同学习率

Pytorch不同层设置不同学习率

实现能够在训练过程中手动更改学习率