降低PyTorch中Adam优化器学习率的首选方法

时间:2020-05-29 12:31:16

标签: pytorch

我一直看到code使用Adam优化器。他们降低学习率的方法如下:


    optimizer = torch.optim.Adam(net.parameters(),lr=0.01)
    (training...
    optimizer.step()...)

    if iteration >= some_threshold:
        for param_group in optimizer.param_groups:
            param_group['lr'] = 0.001

我认为我们对所有参数的学习率都相同。那么为什么要遍历param_groups并分别设置每个参数的学习率呢?

以下内容不会更快并且效果相同吗?


    optimizer = torch.optim.Adam(net.parameters(),lr=0.01)
    scheduler = MultiStepLR(optimizer, milestones=[some_threshold], gamma=0.1)
    (training...
    optimizer.step()
    scheduler.step())

谢谢

1 个答案:

答案 0 :(得分:2)

您需要遍历param_groups,因为如果未在优化器中指定多组参数,则会自动有一个组。这并不意味着您要为每个参数设置学习率,而是每个参数组。

实际上,PyTorch的学习率调度程序可以做同样的事情。来自_LRScheduler (base class of learning rate schedulers)

with _enable_get_lr_call(self):
    if epoch is None:
        self.last_epoch += 1
        values = self.get_lr()
    else:
        warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)
        self.last_epoch = epoch
        if hasattr(self, "_get_closed_form_lr"):
            values = self._get_closed_form_lr()
        else:
            values = self.get_lr()

for param_group, lr in zip(self.optimizer.param_groups, values):
    param_group['lr'] = lr

是的,在这种情况下它具有相同的效果,但是不会更快。