神经网络大作业 函数拟合.doc
文本预览下载声明
人工神经网络第一次作业
题目:使用函数试验MATLAB中的BP算法
改变不同训练算法,观察效果;
改变参数a,c的值,观察效果;
改变隐层神经网络个数,观察效果;
尝试:加入噪声的训练效果。
一、改变不同训练算法,观察效果
在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-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(out
显示全部