1

我正在用早期停止策略训练我的网络。我从较高的学习率开始,基于验证损失,我需要从较早的快照重新开始训练。

我可以使用模型和优化器保存/加载快照state_dicts。没问题。

我的问题是,一旦我重新开始训练,我该如何再次设置 adam 的学习率?我应该重新启动 adam 而不是使用 astate_dict还是应该使用 optimizer.param_groups[0][‘lr’] = lr加载的优化器来调整学习率state_dict

例如,我用lr = 1e-65 个 epoch、保存的模型和优化器训练我的网络state_dict。我现在从 epoch 6 重新开始,但我需要lr = 1e-7。最好的方法是什么?

谢谢!

4

2 回答 2

1

在这里查看PyTorch 的torch.optim.lr_scheduler代码,我可以看到他们设置了优化器的参数。因此,这将是最好的方法。我可以看到的确切位置是类的函数(在上面的链接中)。step_LRScheduler

你可以这样做

optimizer.param_groups[0]['lr'] = lr

正如你自己提到的。

于 2019-10-09T09:24:45.707 回答
1

进一步查看调度程序代码,我发现了正确的方法:

def get_lr(gamma, optimizer):
    return [group['lr'] * gamma
            for group in optimizer.param_groups]

for param_group, lr in zip(optimizer.param_groups, get_lr(gamma, optimizer)):
    param_group['lr'] = lr
于 2019-10-09T11:11:21.870 回答