我正在尝试使用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和其他优化程序,因为我认为这是亚当的问题,但我找不到一个好的方法。
有人可以帮我吗?
答案 0 :(得分:0)
什么是param_group
?使用该代码段,它看起来像是一个与优化器没有任何关联的变量。您需要修改的是'lr'
的每个元素的optimizer.param_groups
条目,实际上是ADAM
的外观。
无论哪种方式,除非您有充分的理由亲自进行滚动,否则我建议您使用PyTorch随附的LR scheduler。而且,如果您确实需要重新实现它,请查看其code并从中获得启发。
答案 1 :(得分:0)
问题是亚当还有其他内部参数(梯度的累积平均值等),也需要重置。
因此,您有更好的机会删除学习率较低的实例化优化器。
至少对我有用。