《基于bp神经网络的英文字母识别技术报告》由会员分享,可在线阅读,更多相关《基于bp神经网络的英文字母识别技术报告(43页珍藏版)》请在金锄头文库上搜索。
1、人工神经网络课程报告 姓名:张进 学号:5 专业:计算机科学与技术 指导老师:曾晓勤 2015 年 12 月1 基于BP 神经网络的英文字母识别技术报告 摘要:本技术报告主要介绍了利用BP神经网络进行英文字母的识别主要过程,为了检测网 络的容错性能和抗干扰能力,试验中我还准备了隐藏16%和33%样本数据,因为题目中没有 特别要求,故本次实验程序的编写主要使用了作者较为熟悉的JAVA语言。 关键词:BP神经网络;噪声干扰;模式识别;JAVA语言 一、项目设计题目 用多层感知机网络实现对样本图像A-Z的识别,输出相应的数值0-25,通过分析实验 结果讨论感知机网络的识别和容错性能。 二、实验设计概
2、要 1、实验数据预处理 模式识别应用的领域非常广泛,其中字母的识别是一个经常研究的课题。由于在不同 的课题中,由于具体的条件不同,解决的方法也不尽相同,因而字符识别的研究仍具有理 论和实践意义。这里讨论的是用 BP 神经网络对 26 个英文字母的识别,BP网络算法是学者 Rumelhart、McClelland和他们的同事在20世纪80年代中期提出的多层前馈网络 MFNN(MutltilayerFeedforward Neural Networks)的反向传播学习算法。BP网络是对非线 性可微分函数进行权值训练的多层前向网络。 。 在对字母进行识别之前,需要将字母进行预处理,即将待识别的 26
3、 个字母中的每一个 字母都通过的方格形式进行数字化处理,其有数据的位置设为 1,其他位置设为-1。如图 1 给出了字母 A、B 和 C 的数字化过程。下面给出了字母 A 的数字化处理结果,是用一个 1*30 向量表示,其结果为:2 P030=-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1,1,1,1;其他字母对应 的向量也做类似的处理。最终的标准输入矩阵 P2630,包含 26 个字母向量。A B C 图 1 字母数字化样式 2、网络的初始设计 本次网络主要选择如图2所示的网络结构,其中有一个输入层,一
4、个隐含层,一个输 出层,网络结构为30-30-1,其中 , 。 n e n f 1 1 ) ( 1 n n f ) ( 2 -1 -1 1 -1 -1 -1 1 -1 1 -1 1 -1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 1 1 -1 -1 -1 1 -1 1 1 1 -1 1 -1 -1 -1 1 1 -1 -1 -1 -1 1 -1 -1 -1 -1 1 -1 -1 -1 1 -1 1 1 1 -1 1 1 1 1 -1 1 -1 -1 -1 1 1 1 1 1 -1 1 -1 -1 -1 1 1 -1 -1 -1 1 1 1 1 1 -13 图 2 网络结构 本次
5、如图2所示的网络中,p为待输入的学习(识别)向量,因为每个字母都有 30 个 元素的向量表示,所以 p 的维数为 30*1,w1 为第一层权值,维数 30*30,w2 为第二层权 值,维数 30*1,b1 为第一层偏值,维数 30*1,b2 为第二层偏值,维数 1*1,a1 为第一层 输出,维数 30*1,a2 为网络最后的输出,至此基本的网络结构初始设计完毕。 3、初始化各项参数 本次初始化参数主要包括初始化隐含层第一层的权值 w13030和偏置值 b130,初 始换隐含层第二层的权值 w230和偏置值 b2,本次实验选取的初始值为 0-0.5 之间的随机 实数。其中随机实数可以通过调用 J
6、AVA 语言的 random()方法得到。对于学习速度 可以 先设置为:=0.01,当然,也可以在后面的实验过程中不断的调节 的值使得学习的更 快更好,具体代码实现见附录。 4、前向传播设计 在前面工作完成的基础上,首先需要根据 BP 算法的公式 和 p 0 a 计算第一层网络的输出 a1,然后根据公式 计算出 ) 1 0 1 1 1 b a W ( a f ) 2 1 2 2 2 b a W ( a f 最后输出层的 a2,这就是 BP 神经网络的前向传播过程。最后根据 计算出误差 2 a - t e e,具体代码实现见附录。 5、敏感性计算4 由于在计算敏感性之前需要用到传输函数的导数,故
7、需要提前计算出来。具体导数推 导如式(5.1)和式(5.2)所示:(5.1) ) )( 1 ( 1 1 1 ) 1 ( 1 1 ) ( 1 1 2 1 a a e e e e dn d n f n n n n (5.2) 1 ) ( ) ( 2 n dn d n f 然后根据式(5.1)和式(5.2)可以得到 s2 的计算公式 和第一层 ) ( n F 2 - s 2 2 2 a t ) ( 敏感性 s1 的计算公式 ,具体代码实现见附录。 2 2 1 1 1 ) w )( n ( F s s T 6、权值和偏值的更新 这里需要用到我之前设置的学习速度,实验中可以尝试修改的值,观察实验效 果。
8、具体的权值偏值计算可以根据公式(6.1) 、公式(6.2) 、公式(6.3) 、公式(6.4)计 算得到,具体代码实现见附录。(6.1) T a s ) ( ) 0 ( w ) 1 ( w 1 2 2 2 (6.2) T a s ) ( ) 0 ( w ) 1 ( w 0 1 1 1 (6.3) 2 2 2 ) 0 ( b ) 1 ( b s (6.4) 1 1 1 ) 0 ( b ) 1 ( b s 7、测试网络性能 BP 算法需要不停地迭代去更新权值和偏置直至某次迭代后误差 e 满足了实验的要求或 者达到了最大的迭代次数。学习后预期的效果应当是当使用训练样本给 BP 网络识别时, 它能够识
9、别出字母 A-Z,输出对应的数字 0-25;当使用隐藏部分数据的样本给它识别时, 如果它能够识别多数 A-Z 破损数据,说明该 BP 网络的抗干扰、容错能力较强,反之如果大5 部分无法识别,则说明本网络容错能力较差。 3、实验结果展示 1、实验一 学习速度 a=0.1,误差 e=0.01,迭代次数 m=2000,学习结束效果如图 3 所示。 图 3 实验一结果部分展示 2、实验二 学习速度 a=0.01,误差 e=0.01,迭代次数 m=2000,实验结果如图 4 所示。6 图 4 实验二结果部分展示 3、实验三 学习速度 a=0.01,误差 e=0.0001,迭代次数 m=2000,实验结果
10、如图 5 所示。7 图 5 实验三结果部分展示 4、实验四 学习速度 a=0.015,误差 e=0.0001,迭代次数 m=3000,实验结果如图 6 所示。8 图 6 实验四结果部分展示 通过观察四次实验的效果图可以清楚的发现,学习速度,误差标准和迭代次数对识别 的效果都有影响。显然本次实验最合适的学习速度 a=0.015,可以发现当学习速度不变时, 误差选取的越小,迭代次数越大,则识别的效果越好。 5、实验五 为了简单的验证一下 BP 网络的容错能力,下面进行实验五,在原始数据 p 基础上隐 藏最后一行(隐藏 16%)进行识别,具体参数为:a=0.015,e=0.0001,m=3000,实
11、验结果 如图 7 所示。9 图 7 实验五结果部分展示 由图 7 可以发现,绝大部分破碎的数据无法被正确识别,小部分字母可以被识别。因 此可以说明本次实验构造的 BP 网络的容错性较差。 4、实验总结 本次实验主要实现基于 BP 网络的字母识别功能,通过实验我深入了解了 BP 算法的原 理,能够通过编程搭建一个简单的 BP 网络。在实验中通过调整学习速度,迭代次数,误 差大小,实现了对 BP 网络性能的优化。 通过本次实验,我也体会到了 BP 算法还有有它很大的局限性的,比如:训练次数多 使得学习效率较低,算法的收敛速度较慢,易形成局部极小而得不到全局最优等。在实验 中,我发现当学习速度设为
12、0.1 的时候,算法的震荡较为验证,结果不好,并且需要的迭 代次数大,但是当学习速度设为 0.01 时。算法明显稳定很多,结果处理的好,需要的迭代 次数少,能较快的给出相应的正确的结果。10 附录 public class BP_Algorithm public static void main(String args) /BP 主方法 Data data = new Data(); show(data.p); / 输出元数据 BP_init(data); / 初始化参数 BP_learn(data, 3000); /调用 BP 学习算法,5200 为学习迭代次数,可以调节 BP_test(data,data.p); /测试 BP 算法的正确性 BP_test(data,data.p_test_16); /测试隐藏了 16%数据的正确性 BP_test(data,data.p_test_33); /测试隐藏了 33%数据的正确性 static void show(float p) /根据矩阵用*打印出字幕图像 的方法 int i,j,k; for(i=0;i=0