卷积神经网络手写数字识别的实验方案说明

本实验方案代码文件在

首先需要导包,将于神经网络的相关包导入进来。接下来需要进行一些常用变量的定义。定义完了之后就是进行正式的开始了,我们首先需要下载数据并对数据进行预处理,定义预处理函数,这些预处理函数依次存放在Compose函数中。接着就是将下载的数据分为两个数据集,保存数据到数据加载器定义的变量中。

接下来就是创建一个实例,让其运行测试集中的一部分代码便于我们查看数据集是否出错。下一步就是创建卷积神经网络模型,一个继承父类nn.model的类。在初始化方法中调用父类的初始化方法给类中各种变量赋值,接着自定义自己的卷积神经网络:首先定义一个卷积设置通道为1,一个输入6个输出,padding为2,步长为1;为了让minist(28*28)数据集能输入卷积神经网络(32*32),需要加上padding为2的一个外边值,否则数据集无法进行输入。接着定义第二个卷积,6个输入,16个输出,这个时候padding就为0了。需要注意的是我们都是以5*5的矩阵进行卷积的。接下来就是定义全连接神经网络的变量了:第一层输入层的变量为16*5*5个,隐藏层有两层分别为120个、84个,输出层为10个结果。接着我们要定义forward方法来实现反向传播:第一步将传过来的图片进行卷积,结果在进行池化,在进行第二次卷积。得到的结果在进行第二次池化到这里会得到16张特征图片,我们这个时候再将这是十六张图片连接在一起进行降维处理,降维之后就得到了一个全连接神经网络的输入层,这个时候在进行全连接神经网络的计算得到的结果就是预测的结果,这里的运算都是借助pytorch给我们分装好的函数进行的。到这里神经网络就定义完了,接下来就是实例化并且进行训练和测试。实例化神经网络,定义损失函数SGD和优化器。

训练过程:从for循环数据集,从数据加载器中得到的img、和lable,先试用Variable对img和lable处理,使用定义的网络模型预测结果,使用损失函数计算误差,计算分类的准确率acc,最后在进行反向传播。训练集训练完了就可以将模型改成预测模式了,也是和训练差不多,只不过这里是误差准确率,并且这里也没有了反向传播。

经验分享 程序员 微信小程序 职场和发展