基于卷积神经网络CNN的手写数字识别、手写学号识别实验报告

对于人类来说,分辨出手写的数字是一件非常容易的事情。但想让机器识别数字则要困难的多。本文分别提出了基于PyTorch框架和ReLU函数的Two Layer Net(两层神经网络)手写数字识别算法和基于TensorFlow框架和Keras的卷积神经网络手写数字识别算法。并设计了实验在MNIST数据集上评估它们各自的准确率和损失值,同时测试了对自己手写学号的识别和泛化能力,并对比了两种算法的优缺点。两种算法均取得了不错的效果和较强的泛化能力,能够满足基本的使用需求,达到了设计的目标和要求。

一、引言

数字识别(Digit Recognition),是计算机从纸质文档,照片,或其他来源接收和理解并识别可读的数字的能力。根据数字来源的产生方式的不同,目前数字识别问题可以区分为手写体数字识别,印刷体数字识别,光学数字识别,自然场景下的数字识别等,具有很大的实际应用价值。例如手写体数字识别可以应用在银行汇款单号识别中,以极大的减少人工成本,印刷体识别可以应用在邮政编码自动识别问题上,光学数字识别和自然场景数字识别则应用在车辆检测中的车牌号识别问题上。目前比较受到关注的问题主要是手写体数字识别,由于其具有MNIST这种大型标准易用的成熟数据集,简单的0-9数字识别已经被作为计算机视觉领域的入门问题。

二、相关背景

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:具有强大的GPU加速的张量计算;包含自动求导系统的深度神经网络。线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元,是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。本文提出的第一个算法基于PyTorch和ReLU函数实现了Two Layer Net(两层神经网络)对手写字体高精度的识别。

TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习算法的编程实现。Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算。Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。OpenCV是一个基于Apache2.0许可发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。本文提出的第二个算法基于TensorFlow、Keras和OpenCV实现了卷积神经网络对一张图片上所有包含的数字的快速、精准识别。

三、算法原理

本文使用美国国家标准与技术研究所的数据集——MNIST。这个数据集有两部分:训练集和测试集,顾名思义训练集是用来训练神经网络的,测试集是用来测试神经网络训练后的效果。训练集由250个人手写的数字构成,其中50%是高中学生,50%是人口普查的工作人员。测试数据集也是同样比例的手写数字。这些图片都是28X28灰度像素的。如图:

 从上述的数据集介绍可知一个图片有28X28 = 784个像素,因此,输入层有784个神经元。隐藏层的神经元可以自定义,这里就设置50个。输出层的神经元个数和数据集元素的类别有关,因为数据集中的数字只有0~9,即只有10种类别,因此将输出层的神经元个数设置为10个。激活函数选择ReLU函数:

 ReLU函数的特点是:在程序中计算快(因为不需要计算指数);在输入为正数的时候不存在梯度饱和问题。

 本算法采用Keras构建卷积神经网络对手写数字进行识别。构建过程以下面代码为例。
model = keras.models.Sequential()
model.add(keras.layers.Conv2D(filters = 128,
                              kernel_size = 3,
                              padding = 'same',
                              activation = 'relu',
                              input_shape = (28,28,1)
                              ))
    首先生成一个模型框架,同时定义一个卷积核的数量,选择‘same’模式使卷积层不会改变模型大小。激活函数选择relu函数,并设置输入数据大小。
model.add(keras.layers.MaxPool2D(pool_size = 2))
    设置池化层核心大小。
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(128,activation = 'relu'))
model.add(keras.layers.Dense(10,activation = 'softmax'))
    将数据转化为一维,同时设置全连接层,softmax将输入数值变成概率的模式。

 模型如下:

 四、实验参数

(1)运行环境:Windows10+i5-9300H+GTX1660ti+Python3.7.6
(2)训练、测试数据集:MNIST
(3)性能指标:准确率、损失值
(4)手写数字:本人学号,通过Windows10自带画图软件写出
(5)泛化能力:本人采取不同手法、不同粗细的笔、书写不同的数字,分别使用两种算法进行预测,比较准确率。

五、结果分析

 手写一下学号如下:

 需要将原始的字符串切分为单个字符,如下所示:

 对比结果如下:

 六、总结分析

本文提出了两种手写数字识别算法,分别是基于PyTorch和ReLU函数的数字识别算法和基于TensorFlow和Keras的卷积神经网络数字识别算法,并在MNIST数据集上进行了训练和测试,同时测试了对自己手写学号的识别和泛化能力。两者均取得了不错的效果,能够满足基本的使用需求。产生差异性的结果说明两算法各有优缺点以及需要改进的地方,日后本人将继续优化两算法并接触更多不同的分类算法。

七、参考资料

[1] Shildhar M.; Badreldin A.(1985). A high accuracy syntactic recognition algorithm for handwritten numerals, IEEE T. Syst. Man Cyb. 15.
[2] LeCun, Y.; Boser, B.; Denker, J. S.; Henderson, D.; Howard, R. E.; Hubbard, W. & Jackel, L. D. (1989). Backpropagation applied to handwritten zip code recognition. Neural Computation, 1(4):541-551.
[3] LeCun, Y.(1989). Generalization and network design strategies. Technical Report CRG-TR-89-4, Department of Computer Science, University of Toronto.
[4] LeCun, Y.; Boser, B.; Denker, J. S.; Henderson, D.; Howard, R. E.; Hubbard, W. & Jackel, L. D. (1990). Handwritten digit recognition with a back-propagation network. Advances in Neural Information Processing Systems 2 (NIPS*89).
[5] Bottou, L. et al., (1994). Comparison of classifier methods: a case study in handwritten digit recognition.Proceedings of the 12th IAPR International Conference on Pattern Recognition. 3: 77-82.
[6] LeCun, Y.; Bottou, L.; Bengio, Y. & Haffner, P. (1998). Gradient-based learning applied to document recognition.Proceedings of the IEEE. 86(11): 2278 - 2324.
[7] Scholkopf, B. et al. (1997). Comparing support vector machines with Gaussian kernels to radial basis function classifiers. IEEE Transactions on Signal Processing. 45(11): 2758-2765.

  • 7
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
基于卷积神经网络手写数字识别结果分析可以从以下几个方面来考虑: 1. 准确率:卷积神经网络手写数字识别任务中的准确率是最基本的评价指标。通过对测试集进行预测并与实际标签进行比对,可以得到准确率的评价结果。通常情况下,手写数字识别任务的准确率能够达到90%以上。 2. 错误类型分析:在手写数字识别过程中,卷积神经网络可能会出现分类错误的情况。对于这些分类错误的样本,可以进行错误类型分析,了解网络对于不同数字的分类难度。此外,还可以通过可视化的方式分析网络对于不同数字的关键特征提取情况,从而进一步优化网络结构和参数配置。 3. 训练效率分析:卷积神经网络的训练效率也是一个值得考虑的问题。通过对不同训练参数和网络结构进行调整,可以得到不同训练效率的实验结果。此外,还可以对不同的优化算法、学习率等训练参数进行对比,从而得到最佳的训练配置。 4. 鲁棒性分析:卷积神经网络的鲁棒性是指网络对于输入数据的变化和噪声等干扰的抵抗能力。通过对网络进行对抗样本攻击、加入不同噪声等情况的测试,可以得到网络鲁棒性的评价结果。这些结果可以帮助优化网络结构和参数配置,提高网络的鲁棒性。 以上是基于卷积神经网络手写数字识别结果分析的一些方面。在实际应用中,还需要根据具体的任务和应用场景来确定评价指标和方法,并结合实际情况进行分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值