一、数据集介绍
-
此模型训练的数据集是 torchvision 库中 datasets 数据包中的 MNIST 数据集
-
MNIST 数据集中含有 70000 张由不同的人手写数字图像,其中60000张训练集,10000张是测试集
-
每张图片都是灰度的,大小为28x28像素,且每张图片中的数字都是剧中的,以减少预处理和加块模型训练
-
导入此数据包,提取出训练集和测试集,并展示出部分手写图片,代码如下:
from torchvision import datasets """ 下载训练数据集 (包含训练数据+标签)""" training_data = datasets.MNIST( root='data', train=True, download=True, transform=ToTensor() # 张量,图片是不能直接传入神经网络模型 ) # 对于pytorch库能够识别的数据一般是tensor张量. # NumPy 数组只能在CPU上运行。Tensor可以在GPU上运行,这在深度学习应用中可以显著提高计算速度。 """ 下载测试数据集(包含训练图片+标签)""" test_data = datasets.MNIST( root='data', train=False, download=True, transform=ToTensor() ) print(len(training_data)) """ 展示手写字图片 """ # tensor --> numpy 矩阵类型的数据 from matplotlib import pyplot as plt figure = plt.figure() for i in range(9): img, label = training_data[i + 59000] # 提取第59000张图片 figure.add_subplot(3, 3, i + 1) # 图像窗口中创建多个小窗口,小窗口用于显示图片 plt.title(label) plt.axis("off") # 关闭坐标 plt.imshow(img.squeeze(), cmap="gray") a = img.squeeze() # img.squeeze()从张量img中去掉维度为1的(降维) plt.show()
-
展示的手写数字图片如下:
-
下面链接是此数据集的官方解释(纯英文,可在浏览器中翻译成中文):
二、卷积神经网络模型对手写数字识别步骤和完整代码
-
步骤:
- 1.下载训练集和测试集,并展示部分手写数字图片
- 2.运用 DataLoader 数据包管理工具,在训练集和测试集数据中,将每64张图片打包成一个数据包
- 3.构建一个卷积神经网络模型类
- 4.定义训练模型的函数
- 5.定义测试模型的函数
- 6.创建交叉熵损失函数对象,并创建一个优化器,用于更行模型中的权重参数,达到优化模型的效果
- 7.定义模型训练轮数,进行模型训练,并打印出每一轮训练后的损失值,便于观察模型的优化效果
- 8.传入训练数据,进行模型测试
-
完整代码:
import torch from torch import nn # 导入神经网络模块 from torch.utils.data import DataLoader # 数据包管理工具,打包数据, from torchvision import datasets # 封装了很多与图像相关的模型,数据集 from torchvision.transforms import ToTensor # 数据转换,张量,将其他类型的数据转换为tensor张量 """ MNIST包含70,000张手写数字图像:60,000张用于训练,10,000张用于测试。 图像是灰度的,28x28像素的,并且居中的,以减少预处理和加快运行。 """ """ 下载训练数据集 (包含训练数据+标签)""" training_data = datasets.MNIST( root