您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 神经网络大作业-函数拟合
人工神经网络第一次作业题目:使用函数sin()autecu试验MATLAB中的BP算法1、改变不同训练算法,观察效果;2、改变参数a,c的值,观察效果;3、改变隐层神经网络个数,观察效果;4、尝试:加入噪声的训练效果。一、改变不同训练算法,观察效果在MATLAB中,BP网络的训练函数一共有以下几种,改变不同训练算法,观察效果就是在其他参数不变只改变程序中训练函数的情况下,得到不同训练算法的训练结果。训练方法训练函数梯度下降法traingd有动量的梯度下降法traingdm自适应lr梯度下降法traingda自适应lr动量梯度下降法traingdx弹性梯度下降法trainrpFletcher-Reeves共轭梯度法traincgfPloak-Ribiere共轭梯度法traincgpPowell-Beale共轭梯度法traincgb量化共轭梯度法trainscg拟牛顿算法trainbfg一步正割算法trainossLevenberg-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-Marquardtnet.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网络逼近曲线');仿真结果图:-4-3-2-101234-10010203040501、采用梯度下降法的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-10010203040502、采用弹性梯度下降法的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-10010203040503、采用拟牛顿算法的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-10010203040504、采用Levenberg-Marquardt法的仿真结果图inputuoutputy目标函数曲线未经训练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网络逼近曲线');-4-3-2-101234-3-2-101234c=1,a=0.3的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-4-202468c=1,a=0.5的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-4-202468101214c=1,a=0.7的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-1001020304050c=1,a=1的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-50050100150200250300350c=1,a=1.5的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线图2c=1,a=0.3,0.5,0.7,1,1.5时的仿真结果由以上5副仿真图可知,在c值确定,a=1的时候,经过梯度下降法traingd训练之后得到的结果较好。-4-3-2-101234-60-50-40-30-20-10010a=1,c=0.3的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-50-40-30-20-10010a=1,c=0.5的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-25-20-15-10-50510a=1,c=0.7的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-1001020304050a=1,c=1的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-10-5051015202530a=1,c=1.5的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线-4-3-2-101234-20-1001020304050a=1,c=3的仿真结果图inputuoutputy目标函数曲线未经训练BP网络逼近曲线训练后的BP网络逼近曲线图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-3-2-101234-1001020304050隐层神经网络个数layernumber=5时结果图in
本文标题:神经网络大作业-函数拟合
链接地址:https://www.777doc.com/doc-5422834 .html