Python 模型使用SGD学习,但不使用Adam

Python 模型使用SGD学习,但不使用Adam,python,machine-learning,pytorch,adam,sgd,Python,Machine Learning,Pytorch,Adam,Sgd,我正在浏览一个基本的PyTorch MNIST示例,注意到当我将优化器从SGD更改为Adam时,模型没有收敛。具体来说,我将第106行从 optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum) 到 我认为这对模型没有影响。随着新加坡元的损失迅速下降到低值后,约四分之一个时代。然而,对于亚当来说,即使经历了10个时代,损失也没有减少。我很好奇为什么会这样;在我看来,这些应该有几乎相同的性能 我在W

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

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

我认为这对模型没有影响。随着新加坡元的损失迅速下降到低值后,约四分之一个时代。然而,对于亚当来说,即使经历了10个时代,损失也没有减少。我很好奇为什么会这样;在我看来,这些应该有几乎相同的性能

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

为了节省一点代码挖掘的时间,以下是hyperparams:

  • lr=0.01
  • 动量=0.5
  • 批量大小=64

Adam以其默认参数开箱即用而闻名,在几乎所有框架中,默认参数包括0.001的学习率(请参见和中的默认值),这确实是中建议的值

因此,我建议改为

optimizer = optim.Adam(model.parameters(), lr=0.001)
或者干脆

optimizer = optim.Adam(model.parameters())
为了将
lr
保留为其默认值(尽管我会说我很惊讶,因为MNIST现在以实际处理您可能放入其中的任何内容而闻名)

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