摘要:学习工具最快的方法就是在使用的过程中学习,也就是在工作中(解决实际问题中)学习。文章结尾处附完整代码。一、数据准备在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详解【首发】
- 完成本次实验得到了何树林同学的大力支持
- 本次实验的代码在网上参考修改,由于不慎关闭了相关页面……找不到出处了,如果有雷同,请及时告诉我,以便在此声明参考出处。