1 实验介绍
数字识别是计算机从纸质文档、照片或其他来源接收、理解并识别可读的数字的能力,目前比较受关注的领域是手写数字识别。手写数字识别是一个典型的图像分类问题,已经被广泛应用于汇款单号识别、手写邮政编码识别等领域,大大缩短了业务处理时间,提升了工作效率和质量。
本实验基于MNIST数据集,通过搭建神经网络完成手写数字识别模型的训练,并通过测试集与自制手写数字图片对模型性能进行评估。其中:
- 任务输入:一系列手写数字图片,其中每张图片都是28 x 28的像素矩阵。
- 任务输出: 经过了大小归一化和居中处理,输出对应的0~9的数字标签。
实验总体过程和步骤如图1所示

2 数据准备
2.1 数据集介绍
MNIST数据集包含60000个训练集和10000测试数据集。分为图片和标签,图片是28x28的像素矩阵,标签为0~9共10个数字

2.2 数据读取与数据增强
本实验使用百度飞桨内置的数据集接口paddle.vision.datasets.MNIST 获取训练数据和测试数据。导入数据后,首先对训练集和测试集进行归一化操作,将均值与标准差均设置为127.5。
为提升模型的泛化能力,选择对训练集进行数据增强。飞桨提供的数据处理相关操作包括随机裁剪(RandomCrop)、随机旋转 (RandomRotation)、调整图像对比度(ContrastTransform)等,考虑到手写数字图像均为灰度图,且图片翻转对识别结果可能产生影响 (如数字6和9),因而选择使用 Resize 函数对训练图像进行适当放大,再通过 RandomCrop 函数对放大后的图像进行随机裁剪,以达到数据增强的效果。
img_size=28
#导入数据集Compose的作用是将用于数据集预处理的接口以列表的方式进行组合。
#导入数据集Normalize的作用是图像归一化处理,支持两种方式: 1. 用统一的均值和标准差值对图像的每个通道进行归一化处理; 2. 对每个通道指定不同的均值和标准差值进行归一化处理。
from paddle.vision.transforms import Compose, Resize, RandomCrop, Normalize
# 对数据集进行归一化及数据增强
transform_train = Compose([Resize((img_size+4, img_size+4)),
RandomCrop(img_size),
Normalize(mean=[127.5],std=[127.5])])
transform_test = Compose([Resize((img_size, img_size)),
Normalize(mean=[127.5], std=[127.5])])
# 导入数据
train_data = paddle.vision.MNIST(mode='train', transform=transform_train)
test_data = paddle.vision.MNIST(mode='test', transform=transform_train)
print('加载完成')
3 网络配置
本实验提供的神经网络模型为多层感知机(MLP),在此基础上,考虑到卷积神经网络在特征提取、图像识别等方面的优越性,选择构建经典的LeNet网络进行训练,同时本实验自定义了一个卷积神经网络,进一步探索手写数字的预测能力,由于手写数字图像为灰度图,识别难度较低,故本实验不考虑使用更加复杂的模型。
3.1 MLP
3.1.1 MLP工作原理
多层感知机(MLP)是一种前馈神经网络,由输入层、若干个隐藏层和输出层组成。每一层都由多个神经元组成。MLP一般用于分类问题,可以通过反向传播算法进行训练。在深度学习领域,MLP是一种基础结构,被广泛应用于图像识别、自然语言处理等领域。

激活函数:ReLU
R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x)
前向传播:在多层感知机中,前向传播用于将输入数据传递至输出层。设输入数据为 x x x,第 i i i层隐藏层的输出为 h i ( x ) h_i(x) hi(x),第 l l l层隐藏层到第 l l l+1层隐藏层之间的权重矩阵为 W l W_l Wl,第 l l l层隐藏层的偏置为 b l b_l bl,则前向传播的计算过程如下:
h 1 ( x ) = f ( W 1 x + b 1 ) h_1(x)=f(W_1x+b_1) h1(x)=f(W1x+b1)
h l ( x ) = f ( W l h l − 1 ( x ) + b l ) h_l(x)=f(W_lh_{l-1}(x)+b_l) hl(x)=f(Wlhl−1(x)+bl)
y ( x ) = f ( W L h L − 1 ( x ) + b L ) y(x)=f(W_Lh_{L-1}(x)+b_L) y(x)=f(WLhL−1(x)+bL)
反向传播:在多层感知机中,反向传播用于更新模型参数,求解损失函数的梯度。设损失函数为L,输出为y,真实标签为t,则反向传播的计算过程如下:
δ L = o L d y f ′ ( W L h L − 1 ( x ) + b L ) \delta _ {L} = \frac {oL}{dy} f'( W_ {L} h_ {L-1} (x)+ b_ {L} ) δL=dy
基于MNIST数据集的手写数字识别实验

本实验基于MNIST数据集,通过搭建多层感知机、LeNet和自定义卷积神经网络完成手写数字识别模型的训练。介绍了数据准备、网络配置、模型训练、评价与预测等过程,经调参后各模型在测试集上有较高准确率,还总结了实验中遇到的问题及解决方法。
最低0.47元/天 解锁文章
1万+





