神经网络大作业 函数拟合

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人工神经网络第一次作业

题目:使用函数sin()au

t e

cu -=⋅试验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所示。

clear all; close all; 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-Ma rquardt

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网络逼近曲线');

仿真结果图:

-4

-3-2-1

01234-10010203040501、采用梯度下降法的仿真结果图

input u

o u t p u t y

目标函数曲线

未经训练BP 网络逼近曲线训练后的BP 网络逼近曲线

-4

-3-2-1

01234

-10010203040502、采用弹性梯度下降法的仿真结果图

input u

o u t p u t y

目标函数曲线

未经训练BP 网络逼近曲线训练后的BP 网络逼近曲线

-4

-3-2-1

01234-10010203040503、采用拟牛顿算法的仿真结果图

input u

o u t p u t y

目标函数曲线

未经训练BP 网络逼近曲线训练后的BP 网络逼近曲线

-4

-3-2-1

01234

-10010203040504、采用Levenberg-Marquardt 法的仿真结果图

input u

o u t p u t y

目标函数曲线

未经训练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。

clear all; close all; 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);%采用梯度下降法训练节点

相关文档
最新文档