Pytorch实现MLP并在MNIST数据集上验证
综述
”PyTorch实现MLP并在MNIST数据集上验证“是我所上的模式识别与深度学习课程的第一个实验,主要是给我们练练手熟悉熟悉Pytorch的——如果你也是刚刚入门Pytorch,这个实验非常适合你来练手!
首先,介绍一下Pytorch:
- Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。
- 关于Pytorch的使用教程,可以参考StarGAN的作者写的Pytorch教程
MLP(Multilayer Perceptron):
多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构。
MNIST数据集
train_dataset = torchvision.datasets.MNIST(root="./data", train=True, transform=transforms.ToTensor(), download=True)
Pytorch中是可以直接使用上述语句下载MNIST数据集的,但是往往代码运行中这部分的下载十分缓慢(感谢我国著名建筑师方斌新院士 )。解决办法是手动下载MNIST数据集,可以参考这篇文章下载MNIST数据缓慢的方案
能够读取MNIST数据集后,我们便可以开始我们的具体实现了。
代码细节说明
本次实验代码主要由三个结构构成:用于训练的train.py、用于测试的test.py、用于存放MLP模型的MLP文件夹。程序执行的主体思路是:首先由train.py对构造的MLP模型在训练集上进行训练并保存相关的checkpoint,再由test.py读取checkpoint并在测试集上测试手写数字识别的准确率。
MLP模型(此处都使用了dropout训练):
-
四层MLP模型:
-
五层MLP模型:
train.py:
- 在train.py中,首先定义训练中需要用到的一些常量:
- 并选择相应的loss函数以及优化算法,在此处我以交叉熵作为loss函数,并且选择了Adam(Adaptive moment estimation)算法作为优化算法:
test.py:
至此,我们的代码实现细节就讲完了。
最终代码运行结果:
详细代码
详细代码可见详细代码
需要注意的是:我的Pytorch使用的是GPU版本,如果你安装的Pytorch是CPU版本的可能无法运行。另外,我把checkpoint也保存在其中了,如果各位懒得训练(迭代次数为40次,训练起来还是比较花费时间的)可以直接load我的checkpoint。
原创不易,求赞求github打星!