实验四:手写数字识别的神经网络算法设计与实现
2021/11/23 14:12:18
本文主要是介绍实验四:手写数字识别的神经网络算法设计与实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、实验目的
通过学习BP神经网络技术,对手写数字进行识别,基于结构的识别法及模板匹配法来提高识别率。
二、实验器材
PC机 matlab软件
三、实验内容
按照BP神经网络设计方法选用两层BP网络,构造训练样本集,并构成训练所需的输入矢量和目标向量,通过画图工具,获得数字原始图像,截取图像像素为0的最大矩形区域,经过集合变换,变成16*16的二值图像,再进行反色处理,其图像数据特征提取为神经网络的输入向量。通过实验证实,BP神经网络应用于手写数字识别具有较高的识别率和可靠性。
四、实验原理
BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成. 正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元. 若在输出层得不到期望的输出,则转向误差信号的反向传播流程. 通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程.
五、实验步骤
1、首先对手写数字图像进行预处理,包括二值化、去噪、倾斜校正、归一化和特征提取,生成BP神经网络的输入向量m和目标向量target. 其中m选取40×10的矩阵,第1列到第10列代表0~9的数字.target为9×10的单位矩阵,每个数字在其所排顺序位置输出1,其他位置输出0.
2、然后神经网络的训练过程是识别字符的基础,直接关系到识别率的高低。输送训练样本至BP神经网络训练, 在梯度方向上反复调整权值使网络平方和误差最小。学习方法采用最速下降方法,输入结点数为16*16=256,隐层传输函数为sigmoid函数(logsig),一个输出结点,输出传输函数为pureline(purelin),隐层结点数为sqrt(256+1)+a(a=1~10),取为25。训练完毕, 把待识别数字送BP神经网络中进行仿真测试。
分析运行结果
六、实验具体过程
构造训练样本集。也构成训练输入样本和目标矢量。通过画图工具,获得数字0~9的图像:(0,10,20,30,40,50 ,60,70,80,90).bmp中存放0的不同写法,(1,11,21,31,41,51 ,61,71,81,91).bmp中存放1的不同写法,… ,以此类推,得到100幅图像。
七、代码实现
clear all; '正在生成输入向量和目标向量,请稍等...' for kk=0:99 p1=ones(16,16); m=strcat(int2str(kk),'.bmp'); x=imread(m,'bmp'); bw=im2bw(x,0.5); [i,j]=find(bw==0); imin=min(i); imax=max(i); jmin=min(j); jmax=max(j); bwl=bw(imin:imax,jmin:jmax); rate=16/max(size(bwl)); bwl=imresize(bwl,rate); [i,j]=size(bwl); i1=round((16-i)/2); j1=round((16-j)/2); p1(i1+1:i1+i,j1+1:j1+j)=bwl; p1=-1.*p1+ones(16,16); %以图象数据形成神经网络输入向量 for m=0:15 p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1); end %形成神经网络目标向量 switch kk case{0,10,20,30,40,50,60,70,80,90} t(kk+1)=0; case{1,11,21,31,41,51,61,71,81,91} t(kk+1)=1; case{2,12,22,32,42,52,62,72,82,92} t(kk+1)=2; case{3,13,23,33,43,53,63,73,83,93} t(kk+1)=3; case{4,14,24,34,44,54,64,74,84,94} u t(kk+1)=4; case{5,15,25,35,45,55,65,75,85,95} t(kk+1)=5; case{6,16,26,36,46,56,66,76,86,96} t(kk+1)=6; case{7,17,27,37,47,57,67,77,87,97} t(kk+1)=7; case{8,18,28,38,48,58,68,78,88,98} t(kk+1)=8; case{9,19,29,39,49,59,69,79,89,99} t(kk+1)=9; end end save E52PT p t; '输入向量和目标向量生成结束!'
这篇关于实验四:手写数字识别的神经网络算法设计与实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南