基于BP网络模型的非线性模型逼近问题.docx
- 文档编号:30723458
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:9
- 大小:305.84KB
基于BP网络模型的非线性模型逼近问题.docx
《基于BP网络模型的非线性模型逼近问题.docx》由会员分享,可在线阅读,更多相关《基于BP网络模型的非线性模型逼近问题.docx(9页珍藏版)》请在冰豆网上搜索。
基于BP网络模型的非线性模型逼近问题
1、作业题目
BP-BasedNon-linearmodelapproximation(基于BP网络的非线性模型逼近问题)
2、编程工具及语言
本次编程工具是MicrosoftVisualStudio2010中文版软件,编程语言为C#语言,由此实现界面化程序模型。
3、BP界面简介
其中右上角的空白区域是训练过程中动态显示误差的变化曲线;左下角的空白区域是显示训练数据网络输出值和训练数据真实值的对比图;右下角空白区域是用来显示泛化数据真实值和泛化数据网络输出值的对比图;这三个图待输入好正确参数后,是动态显示出的,具有很好的直观效果。
4、实验结果
本次程序源代码以电子版格式放到老师邮箱请查收!
①单输入单输出模型的验证
对函数
的逼近
1>数据样本集的产生:
用matlab中的随机数函数rand,代码如下:
a=rand(150,1);
y1=5*logsig(a)+a;
noise=0.02*randn(150,1);
y=y1+noise;
test=[a,y];
b=rand(150,1);
y2=5*logsig(a)+a;
Generalization=[b,y2];
其中test为训练样本,对应输入数据a序列其函数输出值y是真实值y1加上干扰noise之后的值;泛化样本为Generalization,训练样本和泛化样本都是用随机数函数rand产生的样本集,保证了他们里的数据不相同。
然后把训练数据集和泛化数据集分别保存成Test.txt和Generalization.txt放在BP程序工作路径下,以便程序里调用该数据。
2>训练和泛化结果
其结果如下图所示:
对于单输入单输出系统,输入输出节点都为1,并设计隐层数设为25,学习速率为0.5,动量因子为0.6,期望误差设为0.014,最大训练次数为100;由此训练网络可以得到的结果如小窗口所示为:
训练次数为100次,说明训练到最后没有满足期望的误差;训练过程的平均、最大、最小相对误差分别为0.0146、0.0722、0.000259;泛化过程的平均、最大、最小相对误差分别为:
0.0161、0.0731、0.00007264。
②多输入单输出模型的验证
对函数
的逼近
1>数据样本集的产生:
用matlab中的随机数函数rand,同上例,代码如下:
a=rand(150,1);
b=rand(150,1);
c=rand(150,1);
d=rand(150,1);
y=sin(a)+cos(b)+sin(c)+cos(d);
noise=0.02*randn(150,1);
yyy=y+noise;
test=[a,b,c,d,yyy];
aa=rand(150,1);
bb=rand(150,1);
c=rand(150,1);
cc=rand(150,1);
dd=rand(150,1);
y=sin(aa)+cos(bb)+sin(cc)+cos(dd);
Generalization=[aa,bb,cc,dd,y];
数据集产生道理同上,在此不再解释。
然后把训练数据集和泛化数据集分别保存成Test1.txt和Generalization1.txt放在BP程序工作路径下,以便程序里调用该数据。
2>训练和泛化结果
其结果如下图所示:
对于该多输入单输出系统,由对象知输入节点为4,输出节点为1,并设计隐层数设为33,学习速率为0.5,动量因子为0.6,期望误差设为0.014,最大训练次数为1000;由此训练网络可以得到的结果如小窗口所示为:
训练次数为248次,说明训练到248次就满足了预设的精度要求;训练过程的平均、最大、最小相对误差分别为0.0139968、0.1262、0.000178;泛化过程的平均、最大、最小相对误差分别为:
0.0233、0.1393、0.00009118。
③多输入多输出模型的验证
对函数
;
的逼近
1>数据样本集的产生:
用matlab中的随机数函数rand,同上例,代码如下:
a=rand(150,1);
b=rand(150,1);
y1=sin(a)+cos(b);
y2=sin(b)+cos(a);
noise=0.02*randn(150,1);
y1=y1+noise;
y2=y2+noise;
test=[a,b,y1,y2];
aa=rand(150,1);
bb=rand(150,1);
y11=sin(aa)+cos(bb);
y22=sin(bb)+cos(aa);
Generalization=[aa,bb,y11,y22];
数据集产生道理同上,在此也不再解释。
然后把训练数据集和泛化数据集分别保存成Test2.txt和Generalization2.txt放在BP程序工作路径下,以便程序里调用该数据。
2>训练和泛化结果其结果如下图所示:
对于该多输入多输出系统,由对象知输入节点为2,输出节点为2;并设计隐层数设为37,学习速率为0.4,动量因子为0.7,期望误差设为0.025,最大训练次数为1000;由此训练网络可以得到的结果如小窗口所示为:
训练次数为570次,说明训练到570次就满足了预设的精度要求;且对于y1来说训练过程的平均、最大、最小相对误差分别为0.0377、0.1118、0.00002556;泛化过程的平均、最大、最小相对误差分别为:
0.06988、0.1247、0.000318。
注:
预设误差为y1和y2加和的平均相对误差。
5、结果分析
不论对于单输入单输出还是多输入多输出系统,该BP模型都能较好的逼近对象函数,而且泛化的平均精度都在5%左右,说明BP模型在特定的结构参数下能够较好的实现函数逼近的功能。
小讨论:
动量项的作用
我们分别将上述模型过程中的动量项改为0,其他参数不变进行操作,结果如下:
1>单输入单输出系统结果
2>多输入单输出系统结果
3>多输入多输出系统结果
分析:
各个模型施加动量项作用和不施加动量项作用(即动量因子为0)的区别如下:
单输入单输出模型中当动量因子为0其他参数不变时,可以看到很明显的区别是误差收敛的速度或者误差曲线下降的斜率明显降低;
多输入单输出系统模型中当动量因子为0其他参数不变时,可以看到很明显的区别是误差收敛次数已经不足以收敛到所期望的误差,即收敛速度变慢;
多输入多输出系统模型中当动量因子为0其他参数不变时,也可以看到很明显的区别是误差收敛次数已经不足以收敛到所期望的误差,即同样也说明收敛速度变慢;
以上的分析都说明由于没有增加动量项(即动量因子为0,此时相当于没有加动量项)时,模型训练过程中误差收敛速度变缓,从反面说明了加入动量项可以加快BP网络的收敛速度。
6、小结
本次编程的优势之处:
1>训练过程中误差收敛的可视化界面,直观的表现出网络训练中误差的时时变化;
2>加入了动量项,增快了BP网络的收敛速度;
3>适用面较广,采用文本读取的方式,不仅适用于单输入单输出,还适用于任意输入任意输出的模型。
本次编程的不足之处:
1>由于时间有限和编程的难度,本次编程只能是一个隐层的BP模型,所以有一定的局限性,在后续的学习时间里会实现多层隐含层的BP网络模型;
2>界面布局不是很合理,以后会慢慢改进。
BP编程要点:
1、一定要自己推倒一次BP模型的推导过程,理解误差反传和权值更新的具体过程和含义;
2、由于所选传递函数的局限性,要对输入输出数据进行归一化处理。
待归一化处理之后,才能用来训练和泛化,最后再反归一化就可以得到实际的值。
3、编写的程序尽量要有一定的灵活性和适用性,不能当数据变化后,程序就不再适用了或者需要很大程度上修改程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 BP 网络 模型 非线性 逼近 问题