MATLAB程序代码--BP神经网络的设计实例



《MATLAB程序代码--BP神经网络的设计实例》由会员分享,可在线阅读,更多相关《MATLAB程序代码--BP神经网络的设计实例(22页珍藏版)》请在文档大全上搜索。
1、MATLAB程序代码一BP神经网络的设计实例MATLAB程序代码BP神经网络的设计实例例1采用动量梯度下降算法训练BP网络。训练样本定义如下:输入矢量为p =-1 -2 3-1目标矢量为115-3t=-1-111close allclearecho onclc% NEWFF% TRAIN-% SIM生成一个新的前向神经网络对BP神经网络进行训练对BP神经网络进行仿真解:本例的MATLAB程序如下:pause敲任意键开始%clc%定义训练样本%P为输入矢量2,3,1;5,-3;%T为目标矢量pause;de%创建一个新的前向神经网络net=newff(minmax(P)J3J,'tans
2、ig'Jpurelin'Jtraingdm1)%当前输入层权值和阈值inputWeights=net>rWl,linputbias=net.b1%当前网络层权值和阈值layerWeights=neLLW2,1layerbias=netb2pauseclc%设置训练参数net.trainParam.show=50;net.trainParam.lr=0.05;net.trainParam.mc=0.9;bpnet=newff(pr,12AJ'logsig*,tlogsig,.Iraingdx*,learngcim*);%建立BP神经网络,12个隐层神经元,4个输出神
3、经元%tranferFcn属性'logsig,隐层采用Sigmoid传输函数%tanferFcn属性'logsig,输出层采用Sigmoid传输函数%trainFcn属性'traingdx'自适应调整学习速率附加动量因子梯度下降反向传播算法训练函数%learn属性'learngdm'附加动量因子的梯度下降学习函数net.tQinParam.epochs=1000;%允许最大训练步数2000步net.trainParam.goal=0.001;%训练目标最小误差0.001net.trainParam.show=10;%每间隔100步显示一次训练结果
4、net.trainParam.lr=0.05;%学习速率0.05net.trainParam.epochs=1000;net.trainParam.goal=le-3;pauseclc%调用TRAINGDM算法训练BP网络net,tr=train(net,P5T);pauseclc%对BP网络进行仿真A=sim(net,P)%计算仿真误差E=T-AMSE=mse(E)pauseclcechooff例2采用贝叶斯正则化算法提高BP网络的推广能力。在本例中,我们采用两种训练方法,即L-M优化算法(trainlm)和贝叶斯正则化算法(trainbr),用以训练BP网络,使其能够拟合某一附加有白噪声的
5、正弦样本数据。其中,样本数据可以采用如下MATLAB语句生成:输入矢量:P=-1:0.05:1;目标矢量:randn(seed',78341223);T=sin(2*pi*P)+0>l*randn(size(P);解:本例的MATLAB程序如下:closeallclearechoonclc% NEWFF% TRAIN-% SIM生成一个新的前向神经网络对BP神经网络进行训练对BP神经网络进行仿真pause%敲任意键开始clc%定义训练样本矢量%P为输入矢量P=-1:0.05:1;%T为目标矢量randn(,seed78341223);Tsm(2*pi*P)+0.1*randn(s
6、ize(P);%绘制样本数据点plot(P,TJ+,);echooffholdon;plot(P,sin(2*pi*P),':');%绘制不含噪声的正弦曲线echoonclcpauseclc%创建一个新的前向神经网络net=newff(mmmax(P)J204J,tansig,/purelin,)pauseclcechooffclcdisp(,LL-M优化算法TRAINLM,);disp(2贝叶斯正则化算法TRAINBR1);choice=inputC请选择训练算法(1,2):,);figure(gcf);if(choice=l)echoonclc%采用L-M优化算法TRAIN
7、LMnettrainFcn='trainlm'pauseclc%设置训练参数nettrainParam.epochs=500;nettrainParam.goal=le-6;net=init(net);%重新初始化pauseclcelseif(choice=2)echoonclc%采用贝叶斯正则化算法TRAINBRnet.trainFcn=,trainbr,;pauseclc%设置训练参数net.trainParam.epochs=500;randn(fseed192736547);net=init(net);%重新初始化pauseclcend%调用相应算法训练BP网络net,
8、tr=train(net,P,T);对BP网络进行仿真pauseclc%A=sim(net,P);%计算仿真误差E=T-A;MSE=mse(E)pauseclc%绘制匹配结果曲线closeall;plot(P,A£,T,'+',Hsin(2*pi*P),':');pause;clcechooff通过采用两种不同的训练算法,我们可以得到如图1和图2所示的两种拟合结果。图中的实线表示拟合曲线,虚线代表不含白噪声的正弦曲线,“+”点为含有白噪声的正弦样本数据点。显然,经trainlm函数训练后的神经网络对样本数据点实现了“过度匹配。而经trainbr函数训练
9、的神经网络对噪声不敏感,具有较好的推广能力。值得指出的是,在利用trainbr函数训练BP网络时,若训练结果收敛,通常会给出提示信息aMaximumMUreached"。此外,用户还可以根据SSE和SSW的大小变化情况来判断训练是否收敛:当SSE和SSW的值在经过若干步迭代后处于恒值时,则通常说明网络训练收敛,此时可以停止训练。观察trainbr函数训练BP网络的误差变化曲线,可见,当训练迭代至320步时,网络训练收敛,此时SSE和SSW均为恒值,当前有效网络的参数(有效权值和阈值)个数为11.7973o例3采用“提前停止”方法提高BP网络的推广能力。对于和例2相同的问题,在本例中我
10、们将采用训练函数traingdx和“提前停止”相结合的方法来训练BP网络,以提高BP网络的推广能力。解:在利用“提前停止”方法时,首先应分别定义训练样本、验证样本或测试样本,其中,验证样本是必不可少的。在本例中,我们只定义并使用验证样本,即有验证样本输入矢量:vaLP=-0.975:.05:0.975验证样本目标矢量:vaLT=sin(2*pivaLP)+0>lrandn(size(vaLP)值得注意的是,尽管“提前停止”方法可以和任何一种BP网络训练函数一起使用,但是不适合同训练速度过快的算法联合使用,比如trainlm函数,所以本例中我们采用训练速度相对较慢的变学习速率算法train
11、gdx函数作为训练函数。本例的MATLAB程序如下:closeallclearechoon% NEWFF生成一个新的前向神经网络% TRAIN对BP神经网络进行训练% SIM对BP神经网络进行仿真pause%clc% P敲任意键开始定义训练样本矢量 为输入矢量P=-1:0.05:1;%T为目标矢量randn(,seed78341223);T=sin(2*pi*P)+0.1*randn(size(P);%绘制训练样本数据点pIot(P,T;+*);echooffholdon;plot(P,sin(2*pi*P)Jf);%绘制不含噪声的正弦曲线echoonclcpauseclc%定义验证样本val