神经网络大作业函数拟合.docx
- 文档编号:6934846
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:14
- 大小:158.86KB
神经网络大作业函数拟合.docx
《神经网络大作业函数拟合.docx》由会员分享,可在线阅读,更多相关《神经网络大作业函数拟合.docx(14页珍藏版)》请在冰豆网上搜索。
神经网络大作业函数拟合
人工神经网络第一次作业
题目:
使用函数
试验MATLAB中的BP算法
1、改变不同训练算法,观察效果;
2、改变参数a,c的值,观察效果;
3、改变隐层神经网络个数,观察效果;
4、尝试:
加入噪声的训练效果。
一、改变不同训练算法,观察效果
在MATLAB中,BP网络的训练函数一共有以下几种,改变不同训练算法,观察效果就是在其他参数不变只改变程序中训练函数的情况下,得到不同训练算法的训练结果。
训练方法
训练函数
梯度下降法
traingd
有动量的梯度下降法
traingdm
自适应lr梯度下降法
traingda
自适应lr动量梯度下降法
traingdx
弹性梯度下降法
trainrp
Fletcher-Reeves共轭梯度法
traincgf
Ploak-Ribiere共轭梯度法
traincgp
Powell-Beale共轭梯度法
traincgb
量化共轭梯度法
trainscg
拟牛顿算法
trainbfg
一步正割算法
trainoss
Levenberg-Marquardt法
trainlm
由于这只是改变程序中的训练算法,其他不变,所以为了简洁,在本程序中只选取了四种训练算法,分别是梯度下降法traingd、弹性梯度下降法trainrp、拟牛顿算法trainbfg和Levenberg-Marquardt法trainlm,只更改不同的训练算法来构造节点,程序如下,得到不同训练算法下的仿真图如图1所示。
clearall;
closeall;
clc;
a=1,c=1;%在此改变a,c的值
layer_number=20;%在此改隐含层的个数
u=-4:
0.001:
4;
t=exp(-a*u).*sin(c*u);%这里是矩阵相乘,要用点乘
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');%梯度下降法
y1=sim(net,u);%未训练直接输出
net1=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');%梯度下降法
net2=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'trainrp');%弹性梯度下降法
net3=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'trainbfg');%拟牛顿算法
net4=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'trainlm');%Levenberg-Marquardt
net.trainParam.show=50;
net.trainparam.epochs=1000;
net.trainparam.goal=0.01;
net1=train(net1,u,t);%采用梯度下降法训练节点
net2=train(net2,u,t);%采用弹性梯度下降法训练节点
net3=train(net3,u,t);%采用拟牛顿算法训练节点
net4=train(net4,u,t);%采用Levenberg-Marquardt法训练节点
y2_1=sim(net1,u);
y2_2=sim(net2,u);
y2_3=sim(net3,u);
y2_4=sim(net4,u);
subplot(2,2,1)
plot(u,t,'b--',u,y1,'g:
',u,y2_1,'r-');
title('1、采用梯度下降法的仿真结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
subplot(2,2,2)
plot(u,t,'b--',u,y1,'g:
',u,y2_2,'r-');
title('2、采用弹性梯度下降法的仿真结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
subplot(2,2,3)
plot(u,t,'b--',u,y1,'g:
',u,y2_3,'r-');
title('3、采用拟牛顿算法的仿真结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
subplot(2,2,4)
plot(u,t,'b--',u,y1,'g:
',u,y2_4,'r-');
title('4、采用Levenberg-Marquardt法的仿真结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
仿真结果图:
图1改变不同训练算法仿真结果
从图1中可以看出,改变不同训练算法得到的结果有所区别。
二、改变参数a,c的值,观察效果
选定一种训练算法,只改变a,c的值,其它不变,在本文中,对c=1,a=0.3,0.5,0.7,1,1.5的情况和a=1,c=0.3,0.5,0.7,1,1.5,3的情况进行了仿真,MATLAB程序如下,结果分别如图2和图3。
clearall;
closeall;
clc;
a=1;
c=1;%在此改变a,c的值
layer_number=20;%在此改隐含层的个数
u=-4:
0.001:
4;
t=exp(-a*u).*sin(c*u);%这里是矩阵相乘,要用点乘
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');%梯度下降法
y1=sim(net,u);%未训练直接输出
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');
net.trainParam.show=50;
net.trainparam.epochs=1000;
net.trainparam.goal=0.01;
net=train(net,u,t);
y2=sim(net,u);%采用梯度下降法训练节点
plot(u,t,'--',u,y1,':
',u,y2,'-');
title('c=1,a=1的仿真结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
图2c=1,a=0.3,0.5,0.7,1,1.5时的仿真结果
由以上5副仿真图可知,在c值确定,a=1的时候,经过梯度下降法traingd训练之后得到的结果较好。
图3a=1,c=0.3,0.5,0.7,1,1.5,3时的仿真结果
对比图3的结果图,可知在a固定时,当c=1时,经过梯度下降法traingd
训练之后得到的结果较好。
三、改变隐层神经网络个数,观察效果
选定梯度下降法traingd训练算法来训练样本,只改变隐层神经网络个数,其它不变。
在本文中,对隐层神经网络个数layer_number为5、10、20、30的情况进行了仿真,MATLAB程序如下,结果分别如图4。
clearall;
closeall;
clc;
a=1;c=1;%在此改变a,c的值
layer_number=5;%在此改隐含层的个数
u=-4:
0.001:
4;
t=exp(-a*u).*sin(c*u);%这里是矩阵相乘,要用点乘
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');%梯度下降法
y1=sim(net,u);%未训练直接输出
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');
net.trainParam.show=50;
net.trainparam.epochs=1000;
net.trainparam.goal=0.01;
net=train(net,u,t);
y2=sim(net,u);%采用梯度下降法训练节点
plot(u,t,'--',u,y1,':
',u,y2,'-');
title('隐层神经网络个数layer_number=5时结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
图4改变隐层神经网络个数的结果
从以上结果可知,在其他参数不变,只改变隐层神经网络个数的情况下,在隐层神经网络个数
layer_number=20时,获得的训练结果较理想。
四、尝试:
加入噪声的训练效果
本文采用randn函数产生一个和输入变量同维度的一个均值为0方差为1的正态分布的随机噪声,然后加入到函数中,其它参数不变,MATLAB程序如下,结果如图5所示。
clearall;
closeall;
clc;
a=1;c=1;%在此改变a,c的值
layer_number=20;%在此改隐含层的个数
u=-4:
0.001:
4;
ul=length(u);
noise=randn(1,ul);%产生一个均值为0方差为1的正态分布的随机噪声
t=exp(-a*u).*sin(c*u)+noise;%加入随机噪声
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');%梯度下降法
y1=sim(net,u);%未训练直接输出
net=newff(minmax(u),[layer_number,1],{'tansig','purelin'},'traingd');
net.trainParam.show=50;
net.trainparam.epochs=1000;
net.trainparam.goal=0.01;
net=train(net,u,t);
y2=sim(net,u);%采用梯度下降法训练节点
plot(u,t,'--',u,y1,':
',u,y2,'-');
title('加入随机噪声时的结果图');xlabel('input_u');ylabel('output_y');
legend('目标函数曲线','未经训练BP网络逼近曲线','训练后的BP网络逼近曲线');
图5加入随机噪声之后的结果
从图5可以看出,加入随机噪声之后,训练之后得到的曲线还是较好的。
如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 作业 函数 拟合