您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > BP神经网络字符识别系统Matlab建模及硬件实现
2019年第3期深■圳职业技术学曉学扌艮No3~2019D01:10.13899/j.cnki.szptxb.2019.03.001BP神经网络字符识别系统Matlab建模及硬件实现**收稿日期:2018-09-03*项目来源:广东省优秀青年教师深圳职业技术学院配套资助(900705110201)作者简介:余菲(1982-),男,黑龙江人,副教授/高级技师,研究领域:集成电路设计、电子系统设计、LED半导体照明材料、液晶显示、THz成像技术等.*通讯作者:宋荣(1969-),男,四川人,副教授,研究领域:电极箔自动测试系统、企业ERP无缝对接、智能化高压程控电源、比容测试、折弯测试、多关节机器人自动作业系统等.余菲,赵杰,王静霞,温国忠,宋荣*(深圳职业技术学院电子与通信工程学院,广东深圳518055)摘要:为了设计基于BP神经网络的字符识别系统模型并训练其参数,能够以较低硬件代价工程实现该系统,作者利用Matlab建立了一个基于BP神经网络的字符识别系统模型,对5000个样本进行了标记,并利用这些样本对模型进行了训练和验证,识别率达到了85.20%.同时,利用FPGA及Verilog硬件描述语言设计了该系统的神经元硬件电路,效果与Matlab的仿真数据一致.利用Altera公司的FPGA芯片实际综合下载了神经元及相关系统,能够实现对字符图像文件数据的计算.关键词:人工智能;神经网络;神经元;FPGA;图像识别中图分类号:TN791文献标志码:A文章编号:1672-0318(2019)03-0003-05随着电子信息技术的发展,尤其是高性能处理器、互联网、云计算等技术的高速发展,基于神经网络的人工智能系统的应用价值越来越大Ml.目前,人工智能的核心应用领域主要集中在图像识别、语音识别、汽车及其它设备的自主判断和自主控制等.其中,图像识别仍然是人工智能应用的最重要领域,而BP神经网络也是对字符进行人工智能识别的最有效手段之一两.基于BP神经网络的字符人工智能识别和其他的人工智能应用一样,受制于处理器的运算速度.因此如何能够有效地提高BP神经网络的运算速度就变成了非常有价值的研究领域•本文提出采用Matlab进行系统建模仿真,并利用FPGA技术实现BP神经网络神经元的办法,通过硬件电路进行计算来有效提升系统的效率,让低电路代价的字符识在工程上变得可能.1字符识别系统的Matlab建模1.1字符识别系统的设计方法人工智能系统与传统的电子系统设计方法最大的不同是人工智能系统设计过程需要一个''学习”的过程,这种学习可以是“有导”式的,或者是自主的“无导”式[1].首先建立一个神经网络的结构,通常是BP神经网络或者CNN(卷积神经网络)等,然后通过训练(学习),让神经网络逐步开始能够对学习过的样本具有判断和记忆,再对神经网络的判定效果进行评价,如果达不到设计要求则需要重新从建立神经网络结构开始重复,基本流程如图1所示.通常,图像识别的神经网络学习过程是“有导”式的.“有导”式的学习需要首先准备“金样本”数据集,所谓“金样本”就是经过人工标记的准确图1神经网络的设计流程无误的系统输入输出案例.准备好了样本数据集后,将该数据集分为训练集和测试集2类,通常分类的原则是随机选取.接下来利用Matlab人工智能工具箱、TensorFlow等平台系统,对该人工智能的神经网络结构进行建模编程,利用训练集样本对神经网络进行训练,使得神经网络学习到模型参数,最后再通过测试样本的测试,达到精度要求后证明该神经网络的模型是有效的③5切目前很多研究仅仅停留在设计完成神经网络结构并完成网络参数的训练,但是训练好的神经网络还需要在硬件上实现,是否能够在工程允许的硬件代价下物理上实现该神经网络模型也是一个很实际的问题.1.2EP神经网络的样本准备首先收集用于识别的字符数据集,其中包含0~9这10个数字手写体的图片文件,此类数据集在网络上可以进行下载,也可以自己准备,然后对该图片进行标记,使之成为“金样本”•在本文中,每个数字准备了500张不同的手写文件,总计5000张图片作为数据集.接下来对图片进行归一化处理,统一归一化为28*28的像素,样例如图2所示.通过Matlab读入全部图片的信息,使用Matlab编程把所有图片的样本标记结果存储在一个数据矩阵内,部分矩阵内容如图3所示.由于图片是灰度数据,与CNN不同,需要转换为二进制矢量数据才能进行BP神经网络的数据输入,本文按照如图4所示方法进行二进制矢量转换.首先设定将得到的输入图像通过最大类间方差法得到一个合适的灰度阈值,通过此阈值将图片转换为70*50的2进制流图.特征提取规则为:取一个大小为10*10像素的框,选取70*50的图像,总共可有7*5种不同的排列组合,将选取的10*10图像中的黑色像素所占百分比作为特征数,便可得一个7审5的特征矩阵.仁3BP神经网络的训练与测试将上述特征提取后的数据分为2部分,第一部分作为我们的输入数据,第二部分作为测试数据.用输入数据训练网络,网络训练完成后,用测试数据验证网络准确率.利用Matlab的人工智能神经网络工具箱设置本文所述的字符识别系统,其BP神经网络结构如图5所示.0图2归一化的图片文件样例123456789101112一010000000000二000100000000三000000000000四100001010000五000000001000六000000000000七000000000100八000000000000九000000000010十000010100000图3样本标记结果记录矩阵的部分内容图4二进制矢量转化方法示意图图5字符识别系统的BP神经网络结构第一层HiddenLayer为此数字识别网络的隐含层,第二层OutputLayer为此数字识别网络的输出层,输出层神经元个数由输出目标数据所决定,此-4-(3)处为10.隐含层的神经元数目设置为25,当神经元数目设置过少时识别效果会很差,当神经元数目设置过多时又太过占用硬件资源,经测试本文设定为25个比较合适,并且隐含层和输出层的传输函数都选择“tansig”.训练函数选择为trainlni”(用于更新权值和偏置),适应性学习函数为“leamgdm”(使得权值和偏置区有一定的动量),误差函数为“mse”.其他训练参数设定如图6所示.申Network:networld-□X图6BP神经网络训练参数设定期TrainNetwork2Matlab建模效果评估经过训练,本文所述的模型训练过程的Validationchecks最终是6,即训练结束就是因为连续6次迭代都没能提高准确率.总共迭代次数为308,最终结束时以SSE(残差平方和)方式计算误差,其误差结果为718,迭代的表现如图7所示.图7中分别展示了随迭代次数的平方误差的变化情况,其中横坐标为Epoch(时期),一个Epoch表示所有训练样本的一个正向传递和一个反向传递的过程,纵坐标为SSE(残差平方和).虽然Train曲线随着Epoch下降,但Test曲线在第16个Epoch时SSE却开始上升.因此,最终神经网络的参数在16个Epoch(在图7中已经用圆圈标记)得到最好的效果.以ScaledConjugateGradient(量化共轨梯度法)为训练函数结束时的梯度值为161,然后用之前已准备好的测试集来对已训练好的神经网络进行仿真,其准确率如图8所示,图中横坐标为目标值,纵坐标为网络的输出,图8就是做了个回归,完美时四幅曲线都应该在对角线上,最终的综合精度为85.20%.神经网络容易过拟合,即仅对参与训练的训练数据反应良好.为防止过拟合,除一开始就划分了训练集合测试集外,MATLAB不会把给它的训练集数据都同时用于训练、验证、测试,会将其再次划分成3个集,training(训练集),validation(验证集),test(测试集).训练时只有training(训练集)参加训练,validation(验证集),test(测试集)不参加训练,只用于最终检验.为了防止过拟合发生,需要设定适当的validation值,当validation的误差连续上升到设置的次数时就停止训练.(a)SE)」o」」山pale^bsueowBestValidationPerformanceis0.01794atepoch1610°F24681012141618202222Epochs图7方差随着迭代变化曲线TargetValidation:R-0.89482020.4060.8Target图8测试集合的准确率曲线(3)-5-■11193基于FPGA的神经元硬件实现根据前文所述,Matlab可以有效地完成神经网络的建模及训练与评测,但仍需要最终实现在硬件电路上.虽然,可以利用编写软件的方法在高性能DSP、GPU或者TPU(由谷歌公司设计的专用人工智能处理器)上实现本文设计的神经网络,但是成本和硬件代价都过高,本文提出了有针对性的方案,可利用FPGA实现神经网络的神经元[4,刀,大幅降低了系统的硬件代价.根据BP神经网络的基本结构,需要用FPGA实现的神经元结构如图9所示.从上面训练好的神经网络中抽取出神经网络相关参数后,可知数据为有符号浮点型数据,且有效位数到小数点后5位.在FPGA中需要合理地表示数据,由于FPGA中默认情况下不支持对浮点数进行操作的,这里采用的解决办法是定标.也就是将要运算的浮点数扩大倍数,然后截取整数部分,用这个数代替原本的浮点数,完成运算后,得到的结果再缩小相应的倍数.在这里我们就要用到定标的方法,由于系统的输入范围是0~1的浮点数,例如0.34302,将小数转变为整数,并且事先进行约定统一将小数放大10000倍,剩余小数部分四舍五入,也即将0.34302用3430表示.利用Modelsim-Altera仿真平台上搭建系统,对输入输出及权值变换进行仿真验证,图10为其中一次的仿真实例.根据MATLAB上训练出的神经网络知,FPGA上实现的激励函数有2个:1)隐含层的激励函数为tansig函数;2)输出层的激励函数为pureline函数.输入层■HT7-S.输岀❻变量隐含层图9EP神经网络神经元结构输岀层si0Js20s3-231S4-215*sS0•560Jf571963■S3-1974as9slO0*Sila*sl25sl30£S140£Jf$150*sl&0sl7-SOO*sia_________-340-66图10浮点数变换整数实例其中隐含层为了实现功能选择了非线性的激励函数,输出层则选择了简单的线性激励函数作为输出.要在FPGA上实现函数求解有多种方式可以进行选择,这里选择查表法.此方法最为简单,通用性强,但缺点是随着精度的增加对内存的消耗呈指数性增长.若要保证查表法的精确,计算就要用掉大部分的存储单元,显然不满足实际资源的需求,所以常常降低输入的精度,但随之带来的会是误差的增大,需要在资源的消耗和误差的大小间做出取舍.最终,本文利用Verilog硬件描述语言实现了神经网络的神经元结构,并搭建了整个字符识别系统,仿真效果如图11所示.由图11可见,利用FPGA实现的硬件电路效果与Matlab的仿真数据一致•本文为了验证电路的正确性,利用Altera公司的FPGA芯片实际综合下载了神经元及相关系统,能够实现对字符图像文件数据的计算.图11数字“6”的图片识别效果仿真-6-»18(3)4结论本文利用Matlab建立了一种可以用于图像数字图像识别的神经网络,并为1到9每个数字准备了500张不同的手写文件,总计5000张图片作为数据集,对图片进行归一化处理,统一归一化为28*28的像素,并完成了神经网络的学习和训练.同时,利用本文提出的神将网络模型,利用FPGA数字电路设
本文标题:BP神经网络字符识别系统Matlab建模及硬件实现
链接地址:https://www.777doc.com/doc-7595214 .html