【问题标题】:Model learns with SGD but not Adam模型使用 SGD 而不是 Adam 学习
【发布时间】:2019-09-10 06:03:21
【问题描述】:

我正在浏览一个基本的 PyTorch MNIST 示例 here,并注意到当我将优化器从 SGD 更改为 Adam 时,模型没有收敛。具体来说,我将第 106 行从

optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)

optimizer = optim.Adam(model.parameters(), lr=args.lr)

我认为这对模型没有影响。使用 SGD,损失在大约四分之一的时期后迅速下降到低值。然而,对于 Adam,即使经过 10 个 epoch,损失也没有下降。我很好奇为什么会这样;在我看来,这些应该具有几乎相同的性能。

我在 Win10/Py3.6/PyTorch1.01/CUDA9 上运行了这个

为了节省一点代码挖掘,这里是超参数:

  • lr=0.01
  • 动量=0.5
  • batch_size=64

【问题讨论】:

    标签: python machine-learning pytorch adam sgd


    【解决方案1】:

    Adam 以其 default 参数开箱即用而闻名,在几乎所有框架中,它都包含 0.001 的学习率(请参阅 KerasPyTorch 中的默认值和Tensorflow),这确实是Adam paper中建议的值。

    所以,我建议改成

    optimizer = optim.Adam(model.parameters(), lr=0.001)
    

    或者干脆

    optimizer = optim.Adam(model.parameters())
    

    为了将 lr 保留为默认值(尽管我会说我很惊讶,因为 MNIST 现在以实际使用您可能投入的任何东西而闻名)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2015-09-07
      • 1970-01-01
      • 2018-02-25
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多