BP神经网络Matlab实例(2).docx_第1页
BP神经网络Matlab实例(2).docx_第2页
BP神经网络Matlab实例(2).docx_第3页
BP神经网络Matlab实例(2).docx_第4页
BP神经网络Matlab实例(2).docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

变量mu确定了学习是根据牛顿法还是梯度法来完成,下式为更新参数的L-M规则: % jj = jX * jX% je = jX * E% dX = -(jj+I*mu) je随着mu的增大,LM的项jj可以忽略。因此学习过程主要根据梯度下降即mu/je项,只要迭代使误差增加,mu也就会增加,直到误差不再增加为止,但是,如果mu太大,则会使学习停止,当已经找到最小误差时,就会出现这种情况,这就是为什么当mu达到最大值时要停止学习的原因。mu为u的初始值,默认为0.001mu_dec为u的减小率,默认为0.1mu_inc为u的增长率,默认为10mu_max为u的最大值,默认为1e10BP神经网络Matlab实例(1)采用Matlab工具箱函数建立神经网络,对一些基本的神经网络参数进行了说明,深入了解参考Matlab帮助文档。% 例1 采用动量梯度下降算法训练 BP 网络。% 训练样本定义如下:% 输入矢量为%p =-1 -2 31%-11 5 -3% 目标矢量为t = -1 -1 1 1close allclearclc% -% NEWFF生成一个新的前向神经网络,函数格式:% net = newff(PR,S1 S2.SNl,TF1 TF2.TFNl,BTF,BLF,PF) takes,% PR - R x 2 matrix of min and max values for R input elements% (对于R维输入,PR是一个R x 2 的矩阵,每一行是相应输入的边界值)% Si - 第i层的维数% TFi - 第i层的传递函数, default = tansig% BTF - 反向传播网络的训练函数, default = traingdx% BLF - 反向传播网络的权值/阈值学习函数, default = learngdm% PF - 性能函数, default = mse% -% TRAIN对 BP 神经网络进行训练,函数格式:%train(NET,P,T,Pi,Ai,VV,TV),输入参数:% net - 所建立的网络% P - 网络的输入% T - 网络的目标值, default = zeros% Pi - 初始输入延迟, default = zeros% Ai - 初始网络层延迟, default = zeros% VV - 验证向量的结构, default = % TV - 测试向量的结构, default = % 返回值:% net - 训练之后的网络% TR - 训练记录(训练次数及每次训练的误差)% Y - 网络输出% E - 网络误差% Pf - 最终输入延迟% Af - 最终网络层延迟% -% SIM对 BP 神经网络进行仿真,函数格式:% Y,Pf,Af,E,perf = sim(net,P,PiAi,T)% 参数与前同。% -%定义训练样本% P 为输入矢量echo onP=-1,-2,3,1;-1,1,5,-3;% T 为目标矢量T=-1, -1, 1, 1;%创建一个新的前向神经网络net=newff(minmax(P),3,1,tansig,purelin,traingdm)% -% 训练函数:traingdm,功能:以动量BP算法修正神经网络的权值和阈值。% 它的相关特性包括:% epochs:训练的次数,默认:100% goal:误差性能目标值,默认:0% lr:学习率,默认:0.01% max_fail:确认样本进行仿真时,最大的失败次数,默认:5% mc:动量因子,默认:0.9% min_grad:最小梯度值,默认:1e-10% show:显示的间隔次数,默认:25% time:训练的最长时间,默认:inf% -%当前输入层权值和阈值inputWeights=net.IW1,1inputbias=net.b1%当前网络层权值和阈值layerWeights=net.LW2,1layerbias=net.b2%设置网络的训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;%调用 TRAINGDM 算法训练 BP 网络net,tr=train(net,P,T);%对 BP 网络进行仿真A = sim(net,P)%计算仿真误差E = T - AMSE=mse(E)echo offfigure;plot(1:4),T,-*,(1:4),A,-o)BP神经网络Matlab实例(2)% 采用贝叶斯正则化算法提高 BP 网络的推广能力。在本例中,我们采用两种训练方法,即 L-M 优化算法%(trainlm)和贝叶斯正则化算法(trainbr),% 用以训练 BP 网络,使其能够拟合某一附加有白噪声的正弦样本数据。其中,样本数据可以采用如下% MATLAB 语句生成:% 输入矢量:P = -1:0.05:1;% 目标矢量:randn(seed,78341223);% T = sin(2*pi*P)+0.1*randn(size(P);% MATLAB 程序如下:close allclear allclc% NEWFF生成一个新的前向神经网络% TRAIN对 BP 神经网络进行训练% SIM对 BP 神经网络进行仿真%定义训练样本矢量% P 为输入矢量P = -1:0.05:1;% T 为目标矢量randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P);%创建一个新的前向神经网络net=newff(minmax(P),20,1,tansig,purelin);disp(1.L-M 优化算法 TRAINLM); disp(2.贝叶斯正则化算法 TRAINBR);choice=input(请选择训练算法(1,2):);if(choice=1)%采用 L-M 优化算法 TRAINLMnet.trainFcn=trainlm;%设置训练参数net.trainParam.epochs = 500;net.trainParam.goal = 1e-6;%重新初始化net=init(net);pause;elseif(choice=2)%采用贝叶斯正则化算法 TRAINBRnet.trainFcn=trainbr;%设置训练参数net.trainParam.epochs = 500;%重新初始化net = init(net);pause;end% 调用相应算法训练 BP 网络net,tr=train(net,P,T);% 对 BP 网络进行仿真A = sim(net,P);% 计算仿真误差E = T - A;MSE=mse(E)% 绘制匹配结果曲线figureplot(P,A,o,P,T,+,P,sin(2*pi*P),:);legend(网络输出,目标值-带噪声,目标值-不带噪声)结果:采用L-M 优化算法(trainlm):采用贝叶斯正则化算法(trainbr):可以看到,经 trainlm 函数训练后的神经网络对样本数据点实现了“过度匹配”,而经 trainbr 函数训练的神经网络对噪声不敏感,鲁棒性较好。BP神经网络的设计实例例1 采用动量梯度下降算法训练 BP 网络。 训练样本定义如下: 输入矢量为 p =-1 -2 3 1 -1 1 5 -3 目标矢量为 t = -1 -1 1 1 解:本例的 MATLAB 程序如下: close all clear echo on clc % NEWFF生成一个新的前向神经网络 % TRAIN对 BP 神经网络进行训练 % SIM对 BP 神经网络进行仿真 pause % 敲任意键开始 clc % 定义训练样本 % P 为输入矢量 P=-1, -2, 3, 1; -1, 1, 5, -3; % T 为目标矢量 T=-1, -1, 1, 1; pause; clc % 创建一个新的前向神经网络 net=newff(minmax(P),3,1,tansig,purelin,traingdm) % 当前输入层权值和阈值 inputWeights=net.IW1,1 inputbias=net.b1 % 当前网络层权值和阈值 layerWeights=net.LW2,1 layerbias=net.b2 pause clc % 设置训练参数 net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; pause clc % 调用 TRAINGDM 算法训练 BP 网络 net,tr=train(net,P,T); pause clc % 对 BP 网络进行仿真 A = sim(net,P) % 计算仿真误差 E = T - A MSE=mse(E) pause clc echo off 例2 采用贝叶斯正则化算法提高 BP 网络的推广能力。在本例中,我们采用两种训练方法,即 L-M 优化算法(trainlm)和贝叶斯正则化算法(trainbr),用以训练 BP 网络,使其能够拟合某一附加有白噪声的正弦样本数据。其中,样本数据可以采用如下MATLAB 语句生成: 输入矢量:P = -1:0.05:1; 目标矢量:randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P); 解:本例的 MATLAB 程序如下: close all clear echo on clc % NEWFF生成一个新的前向神经网络 % TRAIN对 BP 神经网络进行训练 % SIM对 BP 神经网络进行仿真 pause % 敲任意键开始 clc % 定义训练样本矢量 % P 为输入矢量 P = -1:0.05:1; % T 为目标矢量 randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P); % 绘制样本数据点 plot(P,T,+); echo off hold on; plot(P,sin(2*pi*P),:); % 绘制不含噪声的正弦曲线 echo on clc pause clc % 创建一个新的前向神经网络 net=newff(minmax(P),20,1,tansig,purelin); pause clc echo off clc disp(1. L-M 优化算法 TRAINLM); disp(2. 贝叶斯正则化算法 TRAINBR); choice=input(请选择训练算法(1,2):); figure(gcf); if(choice=1) echo on clc % 采用 L-M 优化算法 TRAINLM net.trainFcn=trainlm; pause clc % 设置训练参数 net.trainParam.epochs = 500; net.trainParam.goal = 1e-6; net=init(net); % 重新初始化 pause clc elseif(choice=2) echo on clc % 采用贝叶斯正则化算法 TRAINBR net.trainFcn=trainbr; pause clc % 设置训练参数 net.trainParam.epochs = 500; randn(seed,192736547); net = init(net); % 重新初始化 pause clc end % 调用相应算法训练 BP 网络 net,tr=train(net,P,T); pause clc % 对 BP 网络进行仿真 A = sim(net,P); % 计算仿真误差 E = T - A; MSE=mse(E) pause clc % 绘制匹配结果曲线 close all; plot(P,A,P,T,+,P,sin(2*pi*P),:); pause; clc echo off 通过采用两种不同的训练算法,我们可以得到如图 1和图 2所示的两种拟合结果。图中的实线表示拟合曲线,虚线代表不含白噪声的正弦曲线,“”点为含有白噪声的正弦样本数据点。显然,经 trainlm 函数训练后的神经网络对样本数据点实现了“过度匹配”,而经 trainbr 函数训练的神经网络对噪声不敏感,具有较好的推广能力。 值得指出的是,在利用 trainbr 函数训练 BP 网络时,若训练结果收敛,通常会给出提示信息“Maximum MU reached”。此外,用户还可以根据 SSE 和 SSW 的大小变化情况来判断训练是否收敛:当 SSE 和 SSW 的值在经过若干步迭代后处于恒值时,则通常说明网络训练收敛,此时可以停止训练。观察trainbr 函数训练 BP 网络的误差变化曲线,可见,当训练迭代至 320 步时,网络训练收敛,此时 SSE 和 SSW 均为恒值,当前有效网络的参数(有效权值和阈值)个数为 11.7973。 例3 采用“提前停止”方法提高 BP 网络的推广能力。对于和例 2相同的问题,在本例中我们将采用训练函数 traingdx 和“提前停止”相结合的方法来训练 BP 网络,以提高 BP 网络的推广能力。 解:在利用“提前停止”方法时,首先应分别定义训练样本、验证样本或测试样本,其中,验证样本是必不可少的。在本例中,我们只定义并使用验证样本,即有 验证样本输入矢量:val.P = -0.975:.05:0.975 验证样本目标矢量:val.T = sin(2*pi*val.P)+0.1*randn(size(val.P) 值得注意的是,尽管“提前停止”方法可以和任何一种 BP 网络训练函数一起使用,但是不适合同训练速度过快的算法联合使用,比如 trainlm 函数,所以本例中我们采用训练速度相对较慢的变学习速率算法 traingdx 函数作为训练函数。 本例的 MATLAB 程序如下: close all clear echo on clc % NEWFF生成一个新的前向神经网络 % TRAIN对 BP 神经网络进行训练 % SIM对 BP 神经网络进行仿真 pause % 敲任意键开始 clc % 定义训练样本矢量 % P 为输入矢量 P = -1:0.05:1; % T 为目标矢量 randn(seed,78341223); T = sin(2*pi*P)+0.1*randn(size(P); % 绘制训练样本数据点 plot(P,T,+); echo off hold on; plot(P,sin(2*pi*P),:); % 绘制不含噪声的正弦曲线 echo on clc pause clc % 定义验证样本 val.P = -0.975:0.05:0.975; % 验证样本的输入矢量 val.T = sin(2*pi*val.P)+0.1*randn(size(val.P); % 验证样本的目标矢量 pause clc % 创建一个新的前向神经网络 net=newff(minmax(P),5,1,tansig,purelin,traingdx); pause clc % 设置训练参数 net.trainParam.epochs = 500; net = init(net); pause clc % 训练 BP 网络 net,tr=train(net,P,T,val); pause clc % 对 BP 网络进行仿真 A = sim

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论