首页 > 编程知识 正文

bp神经网络手写识别技术,神经网络识别数字的流程

时间:2023-05-04 07:15:03 阅读:25577 作者:2601

基于BP神经网络的手写数字识别

摘要本文实现了基于MATLAB的神经网络手写数字识别算法的设计过程,采用神经网络中的反向传播神经网络,即BP神经网络进行手写数字识别,MATLAB对图像的实验证明,该神经网络对对方写的数字识别可达95.65%。

手写数字识别; BP神经网络; MATLAB语言

引言1.1提倡图像识别在信息技术发达的今天已经占有重要地位,在我们的现实生活中也有很多应用。 图像识别是指计算机通过正确处理、分析图像,实现识别不同模型的目标和任务的技术。 简而言之,其发展经历了三个阶段。 第一个是文字识别,第二个是数字图像处理和识别,第三个是物体识别。 第一个比较简单,它的研究始于1950年,一般是识别文字、符号和数字,无论是活字识别还是手写识别,其应用都非常广泛,但随之而来的是,这种识别过程更加费时费力,无论是人力还是物力都有很大的损失; 二是我们所说的数字图像处理和识别。 在图像识别过程中,图像识别存在一定的误差,会带来小的故障。 第三,物体识别,但物体的识别主要是指在三维世界中对个体、环境的感知和识别。 这与二维世界的认识不同,是一种相对高级的计算机图像识别,基于二维世界的数字图像和模拟图像处理方法,在更高的层次上进行,结合现代人工智能技术等学科的研究目标,研究成果广泛应用于各种工业探测机器人

1.2图像识别的现状和发展趋势随着网络的发展、电子的信息化,图像识别的应用已经非常广泛,但主要研究工作还包括各行各业,现将总结如下,对其应用的广泛程度进行说明。

生物学中,对生物原型进行研究。 从生物脑细胞结构、物体解剖等其他科研方向研究生物体系结构、神经结构、神经细胞组织等生物原型结构及其功能机制,加强对生物学的更全面了解。

在实际应用中,建立我们需要的理论模型。 根据需要应用的信息在生物学中的应用,可以建立所需的生物原型,也可以建立神经元、神经网络等不可见的理论模型,以便更有效地应用于生活。 建立我们生活中无法直观表达的事物模型,让我们更方便、更直观地理解事物的本质。

在信息时代,建立网络模型及算法研究。 综上所述,建立相应的理论模型,并在此基础上加以理解,建立我们需要的网络模型,实现计算机应用,主要应用于网络学习算法的研究,这方面的研究也被称为技术模型研究。

信息时代的发展,让我们在生活中多做应用吧。 例如分析某函数图像的绘制及其变化形式,完成图像信号的处理、模式识别等功能,建立必要的应用系统,制造机器人等。

从以上说明开始基于生物学原理的应用,到建立所需的神经网络模型,最后应用于图像识别,该模型建立基于生活中的实例,其可靠性和准确性是显而易见的,从而在可靠性大幅提高的同时在网络信息发达的今天,人类在基本粒子、宇宙空间、生命起源等科学领域表现出高度的兴趣,其中由于图像提取后的处理工作不可避免,图像识别的应用越来越广泛。

2 BP神经网络综述反向传播(Back-Propagation,BP )学习算法简称BP算法,采用BP算法的前馈神经网络简称BP网络。 BP网络是一种多层探测器,具有多层探测器的特点,同时也具有自身的特点。 多层传感器有输入层、隐藏层、输出层,其中隐藏层可以有多个,而我们的BP网络只有一个隐藏层。 其简单结构如图所示。

图1多层探测器的结构图

我们使用的BP网络中的具体信号流如图所示有反向传播的过程,这也是调整传播以提高精度的一种方法。 如图所示,有两种信号在流动。

图2多层传感器的信号流

第一,函数信号

简单地说,可以通过使信号进入输入层,经过隐藏层到达输入层,输出通过输出层所得到的值,来完成函数信号。

第二个是误差信号

误差信号是在反向传播的过程中传输的信号。 其中有两个重要参数。 一个是作为函数信号的s形函数,另一个是作为权重的梯度运算的梯度向量。 (注: sigmoid函数、权重的校正函数如图所示。 )

(1) ) ) )。

(2) ) ) )。

通过调整两个参数,完成整个算法的应用。

3手写数字识别的实现过程3.1整体电路图整体流程如图3所示

部分文件调用流程图如图4所示:

>











sigmoid

checkNNGradients

nnCostFunction

第八部分:实现正规化

第八部分:训练NN

fmincg


nnCostFunction

sigmoidGradient

sigmoid

nnCostFunction

sigmoidGradient

randInitializeWeights


checkNNGradients

debugInitializeWeights


nnCostFunction


computeNumericalGradient


第五部分:sigmoid函数

第六部分:初始化参数

第七部分:实现反向传播

第三部分:前馈网络

第四部分:前馈正规化






















图4 整体流程图

3.2 算法流程

图片识别要经过训练好的模型来提取我们要得到的手写数字,而模型是经过多次的训练得到的,为了提高程序的准确度、增加可信度的一种数据集,所以,程序的开始,我们设计了多个可用的数据,来训练我们的神经网络。如图3所示,一开始可视化我们的手写体测试数据,每个数字都保存在20*20的像素里,其中设置25个隐藏单位,0到9共10个数字标签。将我们需要的参数保存到需要的函数中,也就是我们用到的θ1和θ2中。也就是保存在我们用的.mat文件中的数据,如图5所示。






注:其中,.mat文件中保存的是二位数组,用来保存我们测试需要的数据。

其次,使用前馈神经网络,当参数λ=0时,运行nnCostFunction.m文件,而文件再调用sigmoidGradient.m、sigmoid.m两个参数文件(其中,sigmoid-

GradiEnt.m文件,就是对sigmoid函数的求导,为得就是得到sigmoid函数的梯度值,以便更好的了解数值变化的程度。而sigmoid.m文件中保存的就是sigmoid函数)。运行结果是损失函数J=0.287629。其中也会实现损失函数的正规化和梯度。而为了检测它的正确性,又使λ=1进行测试,调式,看结果是否符合要求,来检测正确性,得到的结果如图8所示,也是通过两组数据的对比,让我们更加清晰的体会它的不同之处。



图7 实验数据对比图

(3)


(4)

第三,sigmoid函数的运行。运行文件ex4.m文件中,提到函数g = sig-

moidGradient(),是指调用sigmoidGradient.m文件,文件中写了sigmoid函数的梯度表达式,而其中的g(z)函数,是sigmoid函数的方程式,

(5)

(6)

通过对文件的调用,输入测试值1、-0.5、0、0.5、1,可以得到输出的梯度数,而当z=0时,可以得到导数值为0.25。越接近于0,它的变化越明显。sigmoid函数梯度指的是标量场中变化的方向,而梯度值的大小就是用来表示变化的大小,简单来说就是我们数学中的斜率,而这么说也只是为了让人们更好的接受。

对于sigmoid函数的测试,我们用一组数据对它进行测试,得到的结果如图 8所示:



图8 梯度函数测试值

初始化参数(权重W文件的调用说明),文件中使用randInitializeWei-

ghts.m文件,来初始化θ1,θ2,产生随机变量,为下边的调用起到很重要的作用。上文BP神经网络中也曾提到过,权重值是整个过程中很重要的一个参数。而我们的randInitializeWeights.m文件中,也对其进行了新的定义,给定一个较小的ε值,计算出新的W值。这个文件的作用是为了让我们打破对称而训练神经网络。其中初始化W的一部分代码如图所示:



图9 初始化权重值

其中,L_out,L_in是ex4.m文件中传输的数据。

最后,就是这个程序最重要的部分,神经网络的应用。而神经网络的形成与训练又被分为以下几个部分来实现:初始化神经网络、实现反向传播、实现正则化、训练NN。而具体的函数调用部分可以从图3代码调用流程图看见,初始化神经网络用randInitializeWeights.m文件进行数据初始化。而我们的显示界面并没有显示初始化以后的数据,这部分是不可见的。通过文件调用图可见,实现反向传播和正规化都是运用了同一个文件,也就是说,内部调用的文件也是相同的,只是λ值不同,实现反向传播时λ=0,写在函数内部,进行数据判断,正则化则定义好了λ值,即λ=3,可以看到,因为λ值得不同,运行结果的输出情况也有所不同。在checkNNGradients.m文件中,还引用了三个.m文件。运行后得到两列相似的数列,如图10所示。



图10 检查神经网络

这就是用于检测神经网络正确性的测试数据,通过测试数据得到相对偏差,即数字输出是产生的偏差值。这个数值小于1e-9,则可以使用于数字识别的过程中,得到的结果如图11所示,可以看出,相对偏差小于要求值,则可以进行接下来的运行。






文件中通过对nnCostFunction.m文件的调用,可得到相应的测试数据,如图12所示:



图12 成本函数的调试参数

训练神经网络,给出训练循环次数,本次循环次数为50,调用fmincg.m文件。得到下列一组训练次数为50的数字,得到如图13所示。




图13 神经网络的训练

通过这整个的实验,我们就可以得到自己想要的数据训练集。

3.3 图像预处理

我们都知道,手写体的图片底色可以有很多种,而我们要做的就是将图片处理成我们需要的大小样子,放到训练集里运行,以便得到我们需要的图片信息。这整个过程又会被分为很多小的地方。过程可以大致分为以下几个步骤:


引入图片

灰度处理

索引处理

二值化


其中,所需要的程序代码部分为:

1、引入图片:imread函数,可以引用多种类型的图片。不会因为图片的格式不同而影响程序的运行。

2、用matlab中使用rgb2gray函数将彩色图片转化为灰度图像。

3、Graythresh函数是将图片阈值法,将灰度图片转化为索引图。

4、im2bw函数将索引图片二值化

5、用边缘切割算法,对图片进行切割细化。

最后得到的图片矩阵就是我们用到的样式,如果整个过程你还想区别不同样式的图片有什么变化,还可以用图片显示函数imshow进行显示,可以更加详细、明确地观察图片的变化。

3.4 结果分析

结果由图片引入到程序中,经过神经网络的训练识别,成为数字显示在MATLAB的command Window工作区中。显示准确度以及数字结果。如图所示:



图14 准确度显示

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。