Pytorch实现MNIST(附SGD、Adam、AdaBound不同优化器下的训练比较)

佚名 次浏览

摘要:学习工具最快的方法就是在使用的过程中学习,也就是在工作中(解决实际问题中)学习。文章结尾处附完整代码。一、数据准备在Pytorch中提供了MNIST的数据,因此我们只需要使用Pytorch提供的数据即可。二、建立网络三、开始训练对于训练中的一些参数解释如下::batch的索引,即batch的数量。:每次

学习工具最快的方法就是在使用的过程中学习,也就是在工作中(解决实际问题中)学习。文章结尾处附完整代码。

一、数据准备

在Pytorch中提供了MNIST的数据,因此我们只需要使用Pytorch提供的数据即可。

 

二、建立网络

 

三、开始训练

 

对于训练中的一些参数解释如下:

  • :batch的索引,即batch的数量。
  • :每次送入网络的数据量

四、测试模型

 

在此展示结果的最后一次:
在这里插入图片描述
可以看到,我们使用SGD作为优化器的优化函数时,测试集后来达到的正确率为92%


五、提高测试集正确率

5.1 增加训练次数(SGD版)

如题,我们将训练次数增至30,优化函数仍然使用SGD,即只在入口循环处改变epoch的取值范围。为了节省空间,结果只输出测试集loss和正确率。
我们可以看到,在num18时,测试集的正确率收敛,达到了96%;loss也是在0.1附近波动。

 
5.2 Adam版(训练次数:30)

Adam还是名副其实的老大,第一次就已经达到了SGD收敛时候的loss值和正确率。我们可以看到,在num26时,Adam优化函数下的模型对于测试集的预测正确率达到了99%,loss为0.0397,但是正确率似乎并没有收敛到99%。

 
5.3 AdaBound版(训练次数:30)

AdaBound即最近北大、浙大本科生新提出的训练速度比肩Adam,性能媲美SGD的优化算法。
可以看到,在num4、num5时就正确率已经达到了98%,loss已经比Adam收敛时候的loss低。而在num8的时候,正确率突破99%!loss达到了0.0303!,在接下来的几次训练中,正确率和loss有细微的波动,但是随着训练次数的增加,正确率和loss还是达到了最佳的收敛值,波动并不是特别大。

 

六、完整代码

 

七、参考资料及获得的帮助

  • AdaBound详解【首发】
  • 完成本次实验得到了何树林同学的大力支持
  • 本次实验的代码在网上参考修改,由于不慎关闭了相关页面……找不到出处了,如果有雷同,请及时告诉我,以便在此声明参考出处。
随机内容

平台注册入口