目录
一、准备MNIST数据集
二、LeNet模型构建
三、完整代码
本篇博客教大家使用MNIST数据集基于Pytorch框架实现比较经典的一种卷积神经网络:LeNet。
运行环境:python 3.6.12,pytorch 1.6.0,torchvision 0.7.0
MNIST是一个非常经典的手写字数据库,官网网址请点击,需要的可自行下载。不过,Pytorch为我们提供了快速下载并加载MNIST数据集的方法,本博客采用此方法下载数据集,具体代码如下:
其中transforms是图像数据预处理的方法。transforms.ToTensor()是将数据转化为Tensor对象,transforms.Normalize()是对数据进行归一化。具体用法可上网查找,或看官方手册。datasets.MNIST的第一个参数指定了数据集下载和存储的文件夹,可根据需要修改。train=True表示读取训练数据,train=False表示读取测试数据。download=False表示不下载MNIST数据集,因为博主已经下载过,所以是False,如果没有下载将其改为True,下载完成后改为False即可。transform=transform表示使用上面的数据预处理方法对MNIST数据集进行处理。
设置好相应参数之后(download=True),运行上述代码即可自动下载MNIST数据集,并保存到同目录下的data文件夹。

接下来构建LeNet模型。LeNet的网络结构如下图所示,一共7层。其中C1,C3,C5为卷积层,S2,S4为降采样层,F6为全连接层,还有一个输出层。网络结构比较简单,这里不进行具体分析,想要了解的可自行查找。

具体代码如下:
定义了LeNet类,首先运行父类初的始化函数,并对LeNet的各个层进行了实现。然后定义了forward()函数,即前向传播。
接下来初始化LeNet,并设置使用CPU或GPU运行。使用交叉熵损失函数,Adam优化器,出示学习率设置为0.001。如果电脑有GPU则在GPU上运行,反之在CPU上运行。
接下来,使用Dataloader加载训练集。shuffle=True表示打乱数据顺序。
在上述工作完成后,开始对网络进行训练。设置epoch=5,使用enumetrate加载数据,并进行前向传播与反向传播。每一千个batch输出一次训练结果,如果训练损失低于1e-5,则保存模型并停止训练。
在训练完成后,使用测试集测试模型的泛华效果,避免过拟合。仍然使用Dataloader加载测试集。
对测试模块进行完善,统计测试结果,并输出测试集准确率。
至此,数据集加载、模型的构建、训练与测试全部完成。
完整代码如下。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7094.html