- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
人工神经网络实验一 BP算法.doc
人工神经网络实验一 BP算法
李琳琳 自研42 2004211068
一.问题选择:
用BP方法实现一个单输入单输出的函数的逼近。由于转移函数的输出范围在0到1之间,故在选择函数时要注意使其取值范围在该区间内或进行尺度变换,以免进入饱合区。
为了进行不同的测试,函数初步取为以下几个:
二.网络结构:
1.三层前向神经网络
根据逼近定理知,只含一个隐层的前向网络(即三层前向神经网络)是一个通用的逼近器,可以任意逼近函数f,因此,在本题中选用三层前向神经网络,即输入层(x0,y0),一个隐层(x1,y1),输出层(x2,y2)。
2.网络结构
由于要逼近的函数为单输入单输出函数,故输出层只有一个节点;输入层除了一个样本输入点外,还有一个阈值单元,因此可以看作是两个输入节点;隐层的节点个数p可以在程序运行时进行选择,以适应和测试不同的逼近效果。由输入层至隐层的权矩阵记为W0,由隐层到输出层的权矩阵记为W1。
整个网络的结构初步设计为如下图所示:
三.算法实现
本实验用C++程序实现该算法。报告中所给出的实验数据均是运行C++程序所得的结果,然后将这些结果在matlab中画出对应图形。
1.标准BP算法(无动量项):
根据公式:(为学习率)
编写程序,程序执行时允许选择:样本个数p,隐层节点个数midnumber,学习速率step,训练过程结束条件(即训练结束时允许的最大误差)enderr。
2.加动量项的BP算法
基本原理同上,仅在标准BP算法的基础上,对权矩阵的修改添加动量项,程序执行时允许选择:样本个数p,隐层节点个数midnumber,学习速率step,训练过程结束条件(即训练结束时允许的最大误差)enderr,以及动量因子moti。
四.训练结果:
对不同的函数逼近进行训练得到不同的训练结果,下面分别进行讨论:
1.
(1.)样本个数取为10,隐层节点数取为10,步长0.4,终止误差设为0.001,无动量项运行结果如下:
训练次数:1850
最终误差:0.000999849
权值矩阵为:
(这里的权矩阵的取值比较整齐,分析其原因是因为在初始化权矩阵的时候,并没有为其赋予随机值,而是分别赋予了相同的0到0.1之间的值。又由于网络结构的对称性,故每次通过梯度法所求得的权值的变化量是相同的,从而导致了结果中权值取值的整齐性。)
逼近效果图:
(图中蓝线为原函数图像,红x为由该网络进行逼近得到的结果)
(2.)改变隐层节点数:
当隐层节点数减少为5,其余设置不变时,要达到终止误差需要进行的训练次数为5476次。
当隐层节点数增加为20,其余设置不变时,要达到终止误差需要进行的训练次数为29167次。
当隐层节点数增加为50,其余设置不变时,要达到终止误差需要进行的训练次数为73677次。
可以看出,本题中增加隐层节点数对改进逼近效果的作用并不很明显。隐层节点取20和50 时所用的训练次数比隐层节点取10 时要大。可见增加隐层节点并不一定能增加精度或减少训练时间,在本题中反而会带来更长的训练时间。
(3.)改变步长:
当步长减小为0.2,其余设置不变时,要达到终止误差需要进行的训练次数为18993次,明显多于步长为0.4的情形。
当步长增加为0.5,其余设置不变时,要达到终止误差需要进行的训练次数为7590次,少于步长为0.4的情形。
当步长增加为0.8,其余设置不变时,要达到终止误差需要进行的训练次数为4449次,明显少于步长为0.4的情形。
而当步长增加为1,其余设置不变时,要达到终止误差需要进行的训练次数只有3292次。
这说明随着步长的增加,训练的次数可能减小,分析其原因是由于步长增加意味着权值每次的变化量更大,因此会使收敛更快。但步长增加另一方面可能会导致振荡,也就是当步长取的较大时,有可能使得权值在误差曲面的极小点两边来回变化而不能达到极小点。在对其它函数逼近的实验中(实验3),可以看出该现象。
(4.)增加动量项
当增加动量项,动量因子设为0.2,其余设置不变时,要达到终止误差需要进行的训练次数为7590次,明显少于相同条件下不加动量项时所用的训练次数。说明增加动量项加快了收敛。而增加动量项后的训练结果与不加动量项时的结果几乎完全一样(一般仅在小数点后第五位有点差别),这说明在本例中增加动量项虽然加快了收敛,但对逼近的程度并无什么改进。
(5.)推广测试
均匀选取5个点进行推广测试,其误差为0.000170499,上图中绿色o形标志为推广测试的结果,由图及误差可以看出,在本例中的推广测试效果比较好。
2.
(1.)样本个数取为15,隐层节点数取为10,步长0.3,终止误差设为0.001,无动量项运行结果如下:
训练次数:1485
最终误差:0.000996835
权值矩阵为:
(
原创力文档


文档评论(0)