【问题标题】:Pytorch Adam optimizer's awkward behavior? better with restart?Pytorch Adam 优化器的尴尬行为?重启更好?
【发布时间】:2019-05-07 18:00:31
【问题描述】:

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

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

我发现优化器的收敛速度非常快,然后它的准确度会继续缓慢下降。 (validation loss在1-2分钟内减少很多,然后继续缓慢增加)

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

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

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

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

谁能帮帮我?

【问题讨论】:

    标签: optimization deep-learning pytorch gradient-descent


    【解决方案1】:

    param_group 是什么?使用该代码 sn-p 它看起来像一个与优化器没有任何关联的变量。需要修改的是optimizer.param_groups的每个元素的'lr'入口,也就是ADAM实际看的内容。

    无论哪种方式,除非您有充分的理由自己手动滚动,否则我建议您使用 PyTorch 提供的 LR scheduler。如果您确实需要重新实现它,请查看它的 code 并从中汲取灵感。

    【讨论】:

      【解决方案2】:

      问题在于 Adam 有额外的内部参数(梯度的累积平均值等)也需要重新设置。

      因此,您更有可能删除具有较低学习率的优化器的实例化。

      至少这对我有用。

      【讨论】:

        猜你喜欢
        • 2021-03-28
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        相关资源
        最近更新 更多