基于PCA的神经网络手写数字识别方法研究

2019-05-13 10:15魏爽
数字技术与应用 2019年1期
关键词:计算机视觉模式识别主成分分析

魏爽

摘要:手写数字识别是计算机视觉和模式识别的一个重要研究方向。该领域的研究有了很大的进步,但是仍有待改进之处。文章提出了一个基于主成分分析的单隐层神经网络分类器,该分类器通过主成分分析减少了特征向量的维度,在保证识别准确率的情况下减少了计算量,提高了分类器性能。使用MNIST数据集对分类器进行训练,并验证了其性能。

关键词:手写数字识别;神经网络;主成分分析;模式识别;计算机视觉

中图分类号:TP391 文献标识码:A 文章编号:1007-9416(2019)01-0058-02

0 引言

手写识别是指将在手写设备上书写时产生的有序轨迹信息化转化为文字的过程,常用来解决计算机视觉的图像处理和模式识别领域的问题。手写数字识别的研究虽然已经有了很大的进步[1],但是在实际使用中,识别的错误率和性能仍有待改进。通过尽可能多的增加特征的数量,可以获得较高的识别准确率。但是这样就会增加了分类器的复杂度,计算量也会随之增加。采用多层神经网络可以取得较高的准确率,但是计算量大,训练的时间长。

利用主成分分析(Principal Component Analysis,PCA)可以减少分类器所需的特征的数量,进而降低分类器复杂度以及计算量。PCA通过将具有一定相关性的变量重新组合,得到一组新的互相无关的变量来代替原来的变量[2,3]。常用的方法是对原始变量进行线性组合,得到新的变量。新生成的变量就叫做主成分。

通过利用PCA对训练集数据进行特征提取,简化特征向量的维度,将PCA的输出作为神经网络分类器的输入,得到一个基于PCA的神经网络分类器模型,如图1所示。

1 相关概念

1.1 神经网络

人工神经网络由互相连接的神经元组成。神经元通过带权重的连接传递信号,各个神经元的功能由网络结构决定。每个神经元将接收到的其他神经元的输入信号的总值与该神经元的阈值进行比较,然后通过激活函数得到该神经元的输出。神经网络学习就是根据训练样本数据来调整神经元之间的连接权重以及各个功能神经元的阈值。

通过使用反向传播算法训练神经网络,调整随机初始化的权值,以最小化分类器的误差。反向传播神经网络的学习过程分两步:首先,将训练样本输入到输入层,神经网络一层一层向前传播直到输出层;如果输出值和预期的输出值不同,计算出输出误差,将该误差反向传播并调整各个连接权值。

首先,将权值初始化为-0.5~0.5之间的随机值。通过如(1)所示sigmoid激活函数来比较不同函数的准确率。通过前向传播计算隐层和输出层的实际输出值,然后通过该输出值和期望的输出值计算误差梯度。然后从后往前逐层传播输出误差,并用该误差修正权值。用训练样本集中的所有样本重复该过程。通过这个迭代过程,可以最小化误差。

g(z)= (1)

z=∑ni=1XiWi-θ (2)

其中,Z为激活函数的输入值,n为神经元个数,Xi是第i个神经元的输入值,Wi是连接到神经元的第i个权值,θ是神经元的阈值。

1.2 主成分分析(PCA)

PCA主要用来进行特征提取,算法实现如下:

(1)计算训练样本数据集X在每一个维度的平均值u,再将训练样本的值减去该平均值u;

(2)计算协方差矩阵C,C的特征向量V以及C的本征值D,如(3)、(4)所示;

C=X*XT (3)

V-1*CV=D (4)

(3)对特征向量和特征值进行排序,选择前K个特征向量。通过训练集乘前K个特征向量,将原始样本集X投影到K维空间。

Z=X*V(1:K) (5)

1.3 交叉验证

在模式识别模型的训练和性能评估中,验证是重要的一环。用训练集训练模型,用测试集对模型进行评估。通过验证可以有效防止模型过拟合和欠拟合的情况发生。

交叉验证是一种常用的验证方法,其基本思想是重复使用数据。把给定的数据集切分为训练集和测试集。再用这些数据对模型进行训练和测试。通过反复重复该过程选择最优的模型。交叉验证分为简单交叉验证、S折交叉验证和留一交叉验证。

S折交叉验证做法如下:随机将数据集平均分为S个互不相交的子集,用其中的S-1个子集作为训练集,用剩下的1个子集作为测试集;训练、测试数据的选择方式有S种,用这S种数据对模型进行训练、测试分别得到S个模型;最后在这S个模型中选择一个最优的模型。

2 分类器设计

该神经网络分类器采用单隐层神经网络,由三层构成:输入层、隐层以及输出层。输入为66个神经元,隐层为99个神经元,输出层为10个神经元(每一个神经元对应0到9中的一个数字)。图1中PCA的输出即为该分类器的输入。隐层的神经元是根据实验,进行交叉验证,选择准确率最高的结点数组成。通过前向传播算法,对数字进行分类,输出到对应的输出层神经元。根据这10个输出神经元的值,选择值最高的神经元对应的数字作为分类器的输出。

3 实验及结果

实验语言使用Python。Python语言语法简单,包含了大量的工具包,能快速地实现各种算法,在科学计算、人工智能等各个領域都有广泛使用。实验的数据采用MNIST数据集。MNIST数据集是一个手写体数字的数据集,包括了60000个训练样本,10000个测试样本。每一个样本都是一个28×28个像素的灰度图像,即每个样本有784个特征。灰度值的范围是0-255。

不同的人写数字的风格不同,写的大小也不同。因此,在进行分类之前要对原始数据进行预处理。首先,要将原始数据进行标准化处理以消除数据中的噪音,得到一组同一格式的数据集。MNIST的数据的每一个样本的尺寸都是一致的,通过将每一个像素的灰度值除以255,就将所有的数值都归一化为0~1之间的值。

通過使用PCA将784个特征压缩为66个特征,并将这66个特征作为神经网络的输入。神经网络的十个输出的标签分别为0~9十个数字。MNIST数据集训练样本数量大,实验采用10-折交叉验证,将60000个训练样本且分为10个子集,每个子集有6000个样本。进行10次交叉验证,最后得到10个模型,具体步骤如下:

(1)开始第i(i=1~10)次实验;(2)初始化分类器的参数:用随机数初始化各个神经元连接的权值,设置隐层神经元h,迭代次数i,以及来自PCA输出值的输入的数量K;(3)从54000个训练样本中选择一个样本x,并将该样本传给分类器;(4)分类器计算出输出值Y;(5)如果Y的值和X的期望值,即真实值y不同,计算两者的误差E=y-Y;(6)将误差E反向传给该神经网络模型并根据E修正各个连接权值;(7)3至5重复i次;(8)对54000个样本重复执行3至6;(9)用模型对剩下的6000个样本进行分类测试;(10)计算9的准确率和错误率;(11)对10-折交叉验证数据重复2至10,第j次实验选择切分的第j个6000个样本子集作为测试集;(12)计算10-折交叉验证的平均误差,保存每次的模型参数;(13)对不同的h、i、K进行1-12实验,得到最大准确率、计算量最小的模型。

通过使用多个训练集进行训练得到最佳参数。对使用PCA和不使用PCA的情况都进行了训练实验并对比其准确率的差别。

不使用PCA时,实验过程与使用PCA的过程一样,只是输入的数量为784,即神经网络有784个输入节点,397个隐层节点和10个输出节点。不使用PCA时,迭代1000次,交叉验证平均准确率98.27%,用时45011秒。

使用PCA时,将特征向量从784维降低到66维,大大降低了计算量。通过实验发现,281个特征覆盖了99%的方差,103个特征覆盖了95%的方差,53个特征覆盖了90%的方差。使用PCA时,迭代1000次,交叉验证平均准确率98.27%,用时45011秒。

从实验结果分析,选择了K=66,隐层神经元数量为99,迭代次数为1000的模型。通过对比使用PCA和不使用PCA的模型的训练时间,可以看出在准确率基本相同的情况下,使用PCA可以减少接近40%的计算时间。

经过交叉验证,分别选择了不使用PCA和使用PCA的最佳模型。再用MNIST数据集的测试集数据对该模型进行验证。为了取得更好的结果,将隐层的神经元数量分别增加到200、300、500进行训练并用这10000个样本进行验证测试,分别得到了98.2%、98.3%以及98.6%的准确率。对于不使用PCA的模型,模型训练的时间为27109秒。对于使用PCA的模型,模型训练的时间为4223秒。在本次实验中,使用PCA的神经网络可以减少约80%的计算时间,且识别准确率更高。

4 结语

从最后的验证结果看出,采用PCA的单隐层神经网络系统识别准确率接近98.4%,且大大降低了计算量,这对该模型运行的平台的要求不高,降低了部署成本。约有1.6%的误分类,这主要是由书写模糊和噪音造成的。下一步要对模糊书写、不同的书写习惯的识别进行研究,以便更好地进行识别。此外,噪音消除方面的研究也是下一步研究的一个方向。

参考文献

[1] 唐世豪.基于KNN的手写数字识别分析[J].通讯世界,2019,26(01):271-272.

[2] 张持健,刘雪,张贺,张燕习等.基于PCA和非线性SVC的小数据人脸识别[J].无线电通信技术,2019,45(01):73-77.

[3] 张行文,董元和.基于多层感知机网络的手写数字识别算法[J].电脑知识与技术,2018,14(32):217-219.

Abstract:Written digit recognition is an important field of computer vision and pattern recognition. Great progresses have been made in this field, but it can still be improved. A digit recognition classifier based on single hidden layer neural network with principle component analysis has been proposed. This classifier reduces the features by using principle component analysis. Computation requirements are reduced without compromising accuracy. Performance of the classifier has been improved. The proposed classifier is trained and examined with MNIST data set.

Key words:written digit recognition; neural network; PCA; pattern recognition; computer vision

猜你喜欢
计算机视觉模式识别主成分分析
浅谈模式识别在图像识别中的应用
第四届亚洲模式识别会议
危险气体罐车液位计算机视觉监控识别报警系统设计
主成分分析法在大学英语写作评价中的应用
江苏省客源市场影响因素研究
SPSS在环境地球化学中的应用
第3届亚洲模式识别会议
电气设备的故障诊断与模式识别