Pytorch Adam优化器的尴尬行为?重新启动更好?

时间:2018-12-06 04:22:18

标签: optimization deep-learning pytorch gradient-descent

我正在尝试使用Pytorch训练CNN文本分类器。我正在使用这样的Adam优化器。

optimizer = torch.optim.Adam(CNN_Text.parameters(), lr=args.lr)

我发现优化器的收敛速度非常快,然后它的精度却不断下降。 (验证损失在1-2分钟内下降很多,然后继续缓慢增长)

所以,我实现了学习率衰减,

If curr_loss > val_loss: prev_lr = param_group['lr'] param_group['lr'] = prev_lr/10

我发现它并没有太大帮助。但是,如果我手动保存模型,加载模型并以降低的学习率进行训练,则它的性能确实会更好!

这让我很难受,因为我需要继续观察梯度下降并手动更改选项。我尝试了SGD和其他优化程序,因为我认为这是亚当的问题,但我找不到一个好的方法。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

什么是param_group?使用该代码段,它看起来像是一个与优化器没有任何关联的变量。您需要修改的是'lr'的每个元素的optimizer.param_groups条目,实际上是ADAM的外观。

无论哪种方式,除非您有充分的理由亲自进行滚动,否则我建议您使用PyTorch随附的LR scheduler。而且,如果您确实需要重新实现它,请查看其code并从中获得启发。

答案 1 :(得分:0)

问题是亚当还有其他内部参数(梯度的累积平均值等),也需要重置。

因此,您有更好的机会删除学习率较低的实例化优化器。

至少对我有用。