用matlab编BP神经网络预测程序_第1页
用matlab编BP神经网络预测程序_第2页
用matlab编BP神经网络预测程序_第3页
用matlab编BP神经网络预测程序_第4页
用matlab编BP神经网络预测程序_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、求用matlab编BP神经网络预测程序求一用matlab编的程序 P1=3140 3767 4801 5288 5501 6157 6495 7061P2=127 133 130 125 136 140 142 142 T=455 544 642 668 731 792 862 918 % 创建一个新的前向神经网络 net_1=newff(minmax(P1),10,1,tansig,purelin,traingdm)% 创建一个新的前向神经网络 net_1=newff(minmax(P2),10,1,tansig,purelin,traingdm)% 当前输入层权值和阈值inputWeigh

2、ts=net_1.IW1,1inputbias=net_1.b1% 当前网络层权值和阈值layerWeights=net_1.LW2,1layerbias=net_1.b2% 设置训练参数net_1.trainParam.show = 50;net_1.trainParam.lr = 0.05;net_1.trainParam.mc = 0.9;net_1.trainParam.epochs = 10000;net_1.trainParam.goal = 1e-3;% 调用 TRAINGDM 算法训练 BP 网络net_1,tr=train(net_1,P,T);% 对 BP 网络进行仿真A

3、= sim(net_1,P);% 计算仿真误差 E = T - A;MSE=mse(E)X1=7505 7972;%测试sim(net_1,X1)X2=145 146;%测试sim(net_1,X2) %不可能啊 我2009 28 对初学神经网络者的小提示第二步:掌握如下算法:2.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看高等数学(高等教育出版社,同济大学版)第8章的第十节:“最小二乘法”。3.在第2步的基础上看Hebb学习算法、SOM和K-近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是神经网络原理(机械工业出版社,Simon Haykin著,

4、中英文都有)、人工神经网络与模拟进化计算(清华大学出版社,阎平凡,张长水著)、模式分类(机械工业出版社,Richard O. Duda等著,中英文都有)、神经网络设计(机械工业出版社,Martin T. Hargan等著,中英文都有)。4.ART(自适应谐振理论),该算法的最通俗易懂的读物就是神经网络设计(机械工业出版社,Martin T. Hargan等著,中英文都有)的第15和16章。若看理论分析较费劲可直接编程实现一下16.2.7节的ART1算法小节中的算法.4.BP算法,初学者若对误差反传的分析过程理解吃力可先跳过理论分析和证明的内容,直接利用最后的学习规则编个小程序并测试,建议看机器

5、学习(机械工业出版社,Tom M. Mitchell著,中英文都有)的第4章和神经网络设计(机械工业出版社,Martin T. Hargan等著,中英文都有)的第11章。BP神经网络Matlab实例(1)分类:Matlab实例采用Matlab工具箱函数建立神经网络,对一些基本的神经网络参数进行了说明,深入了解参考Matlab帮助文档。% 例1 采用动量梯度下降算法训练 BP 网络。 % 训练样本定义如下: % 输入矢量为 % p =-1 -2 3 1 % -1 1 5 -3 % 目标矢量为 t = -1 -1 1 1 close all clear clc % -% NEWFF生成一个新的前向

6、神经网络,函数格式:% 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%

7、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 - 训练记录(训练次数及每次训练的误差)

8、% 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算法修正

9、神经网络的权值和阈值。% 它的相关特性包括:% epochs:训练的次数,默认:100% goal:误差性能目标值,默认:0% lr:学习率,默认:0.01% max_fail:确认样本进行仿真时,最大的失败次数,默认:5% mc:动量因子,默认:0.9% min_grad:最小梯度值,默认:1e-10% show:显示的间隔次数,默认:25% time:训练的最长时间,默认:inf% -% 当前输入层权值和阈值 inputWeights=net.IW1,1 inputbias=net.b1 % 当前网络层权值和阈值 layerWeights=net.LW2,1 layerbias=net.b

10、2 % 设置网络的训练参数 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 - A MSE=mse(E) echo offfigure;plot(1:4),T,-*,(1:4),A,-o)1 B

11、 P神经网络的原理及算法的基本步骤理 论上已证 明 ,一个 3层的 B P网络能够实现任意的连续映射 ,可以任意 精度逼近任何给定的连续函数 。1. 1B P神经网络的原理B P (B ack P rop aga tion)神经网络通常由具有多个节点的 输入层 ( inp u t laye r) 、隐含层 ( h idden laye r) 和多个 或一个输 出节点的输出层 ( ou tp u t laye r)组成 ,其学习过程分为信息的 正向传播过程和误差的反向传播过程两个阶段 。外部输入 的信号经输入层 、隐含层为止 。的神经元逐层处理 ,向前传播到输 出层 ,给出结果 。如果在输出层得

12、不到期望输出 ,则转入逆 向传播过程 ,将实际值与网络输出之间的误差沿原连接通路 返回 ,通过修改各层神经元的连接权重 ,减少误差 ,然后再转 入正向传播过程 ,反复迭代 ,直到误差小于给定的值表1 19812005年全国总人口(单位:万人)年份198119821983198419851986198719881989人口99622101541102495103604104639106008108000109614111191年份199019911992199319941995199619971998人口1143331158231171711185171198501211211223891236

13、26124810年份1999200020012002200320042005人口125909缺省127627128453129227129988130756模型二预测2001年2010年全国总人口(单位:万人)年份20012002200320042005人口127699128457129220129987130758年份20062007200820092010人口131534132315133100133890134685 模型预测的全国总人口(1981年至2016年)(单位:万人)年份198119821983198419851991人口9926610130810296710460010620

14、3115172年份199219931994199520012002人口116550117895119205120480127403128436年份200320042005200620072008人口129437130405131340132244133116133958年份200920102015202020252030人口134770135552139049141921144257146144年份203520402045205020602070人口147659148869149832150596151678152352年份208020902100210521102120人口152769153

15、026153185153240153283153344 模型四预测2011至2020年人口(单位:万人)年份20112012201320142015全国总人口134668135478136325137185138036年份20162017201820192020全国总人口1388621396521404021411061417602.1利用Matlab Script节点实现在此以对一个非线性函数的逼近作为例子来说明实现流程,其中输入矢量p=-10.051;目标矢量t=sin(2*pi*p)+0.1randn(size(p)。利用Mat-lab Script节点实现BP算法的过程如下:(1)新建

16、一个LabVIEW vi,在框图程序中添加Matlab Script节点。(2)在节点内添加Matlab的动量BP算法实现代码,并分别在节点左右边框分别添加对应的输入/输出参数,如图1所示。(3)在vi的前面板添加相应的控件,设置输入参数,连接输出控件。执行程序,结果如图2、图3所示。下面的代码将重建我们以前的网络,然后用批处理最速下降法训练网络。(注意用批处 理方式训练的话所有的输入要设置为矩阵方式)net=newff(-1 2; 0 5,3,1,tansig,purelin,traingd);第 23 卷 第 1 期陈龙等:MATLAB 神经网络工具箱在河流水质预测中的应用73net.tr

17、ainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.epochs = 300; net.trainParam.goal = 1e-5;p = -1 -1 2 2;0 5 0 5; t = -1 -1 1 1; net=train(net,p,t);TRAINGD, Epoch 0/300, MSE 1.59423/1e-05, Gradient 2.76799/1e-10TRAINGD, Epoch 50/300, MSE 0.00236382/1e-05, Gradient0.0495292/1e-10TRAINGD, E

18、poch 100/300, MSE 0.000435947/1e-05, Gradient0.0161202/1e-10TRAINGD, Epoch 150/300, MSE 8.68462e-05/1e-05, Gradient0.00769588/1e-10TRAINGD, Epoch 200/300, MSE 1.45042e-05/1e-05, Gradient0.00325667/1e-10TRAINGD, Epoch 211/300, MSE 9.64816e-06/1e-05, Gradient0.00266775/1e-10TRAINGD, Performance goal m

19、et. a = sim(net,p)a =-1.0010 -0.9989 1.0018 0.9985用nnd12sd1 来演示批处理最速下降法的性能。 带动量的批处理梯度下降法(TRAINGDM)net=newff(-1 2; 0 5,3,1,tansig,purelin,traingdm);net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 300; net.trainParam.goal = 1e-5;p = -1 -1 2 2;0 5 0

20、5; t = -1 -1 1 1; net=train(net,p,t);TRAINGDM, Epoch 0/300, MSE 3.6913/1e-05, Gradient 4.54729/1e-10TRAINGDM, Epoch 50/300, MSE 0.00532188/1e-05, Gradient0.213222/1e-10TRAINGDM, Epoch 100/300, MSE 6.34868e-05/1e-05, Gradient0.0409749/1e-10TRAINGDM, Epoch 114/300, MSE 9.06235e-06/1e-05, Gradient0.009

21、08756/1e-10TRAINGDM, Performance goal met. a = sim(net,p)a =-1.0026 -1.0044 0.9969 0.99923.1MATLAB 神经网络工具箱的 GUI(图形用户界面)工具. 神经网络工具箱的 GUI 工具主要包括:1)神经网络 GUI 工具主窗口;2)神经网络的建立 窗口;3)网络训练对话框;4)自适应参数设置对话框;5)权值显示窗口. 通过神经网络工具箱的 GUI 工具按钮就能很方便地打开所建立的神经网络的结构图进行察看,也可以看到一个训练过程的 偏差曲线变化图.3.2神经网络工具箱解决问题的一般步骤1)对待解决的问题进

22、行分析,根据各种网络的特点选用合适的网络模型;2)建立网络;3) 对网络初始化;4)对网络进行训练;5)对网络进行仿真检验;6)应用网络解决问题.4 系统的预测仿真4.1使用神经网络 GUI 工具建立神经网络的输入样本和目标样本1)在 MATLAB 命令窗口输入 nntool,打开图形用户界面工具主窗口,如图 1 所示.2)单击 New Data 按钮,打开数据生成对话框. 建立输入样本 P,数据的输入和设置如图 2 所 示,单击 Create 按钮关闭对话框.3)依照上一步,输入目标样本 T ,数据类型选 Targets. 回到 GUI 工具的主窗口,单击 Export按钮弹出导出对话框,选

23、中变量 P 和 T,然后单击 Export 按钮,把变量 P 和 T 导出到工作区. 这为 仿真文件从工作空间调用导入数据做好了准备.4.2建立仿真模型文件进行预测运行 MATLAB 软件中的 Simulink 仿真环境,在神经网络模块库中调用神经网络预测控制模块 NN Predictive Controller,用模块封装技术建立河流水质数学方程模块,连接信号源模块和示波器模 块后就建立了河流水质预测仿真文件 predwq.mdl,如图 3,其中 From Workspace 模块中是目标样本 T 的数据,可以直接从工作区导入.双击神经网络预测控制模块 NN Predictive Contr

24、oller,弹出如图 4 的窗口,此窗口用于设计模 型预测控制器,输入控制器变量空间 N 2 和 Nu 、权值参数 和控制最优化参数 的值. 然后点击 Plant Identification 按钮,打开系统辨识窗口,从工作区导入输入样本 P,设置好其它参数后训练网络, 单击 OK 按钮,将训练好的神经网络模型导入到神经网络预测控制模块中, 在 NN PredictiveController 窗口中单击 OK 按钮,将控制器参数导入到 NN Predictive Controller 模块中.图 3 predwq.mdl 仿真文件图 4 神经网络预测控制模块窗口系统模块 System Mode

25、l 是用模块封装技术封装的河流水质微分方程式(4)的仿真模块,如图5 所示.在 predwq Simulink 主窗口,仿真时间输入 100,再单击 Start simulation 命令按钮开始仿真. 仿 真结束后,双击示波器模块就可以查看仿真结果,如图 6 所示. 对仿真结果和目标样本的值进行比 较,根据它们的差值绘出预测误差变化曲线,如图 7 所示.图 5 河流水质微分方程仿真模块图6 目标和预测结果图5 结果与讨论比较图 6、图 7 知,本文建立的网络系统对水质参 数耗氧量的预测图像和目标样本基本一致. 把仿真预测 结果数据和实际目标样本数据进行比较,正、负最大误 差分别为 0.11

26、和0.06,最小误差为 0,虽然还有偏差, 但误差是在满意的范围之内. 因此,把河流水质的数学 模型用 MATLAB 神经网络进行仿真预测,具有较高的 精度,为河流水质预测提供了方便的方法.图 7 预测误差的曲线变化利用NNToolbox 4.0.2架构神经网络主要采用以下两种方法:(1)使用网络数据管理器(Network Data Manager)。具体操作为:在Launch Pad窗体中点击Neural Network Toolbox目录下的。nntool文件,即在计算机屏幕中央出现Network Data Manager窗体;点击窗体中NewNetwork按钮,根据提示设定网络类型、网络

27、结构、网络算法和网络激活函数即可生成用户定义的神经网络;点击View按钮可显示该神经网络的结构图;点击initialize、simu-late、train和adapt按钮并设定参数可对神经网络进行初始化、模拟、训练和仿真;最后点击Export按钮可将网络模拟、训练和仿真的结果以文件的形式导出。该方法操作简易,无需编写程序代码,即可完成神经网络的构建、初始化、训练和仿真等主要工作。但是该方法不能和MATLAB其他程序动态链接,网络仿真结果只能以数据文件的形式导出,不能可视化显示。(2)编写MATLAB应用程序,即运用MATLAB语言引用神经网络工具箱函数编写程序代码并保存为M文件,然后运行该文件

28、。该种方法可以根据研究人员的需要,调用MATLAB丰富的内部函数,并能和各类数据库及其他应用程序(包括C、FOR-TRAN程序)动态链接,使神经网络功能更为强大。本研究即采用该种方法,其中引用的重要算法、函数及参数将在第2、3节详述。中国未来几年人口总量的预测本文对所使用的序列数据进行 GM(1,1)模型维数优化时 得到最佳的维数是 58 维不等,均属于短序列预测,只适合短 期的人口总量的预测,所以对 2008-2012 年共 5 个时间序列点 的中国人口总量进行预测,结果如表 2 所示。表 2 灰色人工神经网络(GANN)模型对 2008-2012 年 中国人口总量预测的结果万人年份2008

29、2009201020112012总人口132 663132 963133 706134 373135 025建立BP神经网络预测模型在进行BP网络预测模型设计时,主要考虑网络的层数和每层中神经元的个数。神经网络通过计算机程序实现对非线性映射逼近,在众多语言中,MATLAB语言允许数学形式的语言编写程序,比其他语言更接近我们书写计算公式的思维方式。因此编程效率高,易学易懂。年份人 口总数 (万人)198510585119861075071987109300198811102619891127041990114333- 6 -199111582319921171711993118517199411

30、985019951211211996122389199712362619981247611999125786200012674320011276272002128453200312922720041299882005130756采用单隐层的 BP 网络进行预测3。建立两层神经网络,由于输入样本为 3 维的输入向量,因此,输入层一共有 3 个神经元,根据 Kolmogorov2定理,网络应该为 3 7 3 的结构。 其中,threshold 设定了网络输入向量的取值范围0,1,第一层神经元数为 3,传函类型为LOGSIG,第二层神经元数为 7,传函类型为PURELIN,采用动量梯度下降反向传播算

31、法对 网络进行训练。中间层的神经元个数是很难确定的,而这又在很大程度上影响着网络的预测 性能。当网络的预测误差最小时,网络中间层的神经元数目就是最佳值。进行对比后,可见 中间层神经元个数为 8 时,网络的预测性能最好。训练结果如图 1 所示,网络的预报误差如Performance is 9.89455e-005, Goal is 0.00010100.035-110 0.030.025T raining-B lue G oal-B la c k-210 0.020.015-310 0.010.005-4100-0.0050 50 100 150155 Epochs-0.0111.2 1.4 1

32、.6 1.822.2 2.4 2.6 2.83图 1 训练结果(中间层神经元数目:8)图 2 网络的预报误差(中间层神经元数目:8)年份总人口数(万人)200614080020071425002008146600200915100020101558002011159600201216210020131633002014163800201516400020161641002017164100201816410020191641002020164100,每行语句前都有一个符号“”,此即命令提示符。在此符号后(也只能 在此符号后)输入各种语句并按 Enter 键,方可被 MATLAB 接收和执行。执

33、行的结果通常 就直接显示在语句下方,如图 1.2 所示。不同类型语句用不同颜色区分。在默认情况下,输入的命令、函数、表达式以及计算 结果等采用黑色字体,字符串采用赭红色,if、for 等关键词采用蓝色,注释语句用绿色。因为 MATLAB 是一个多功能集成软件,不同的功能需要使用不同的文件格式去表现, 所以 MATLAB 的文件也有多种格式。最基本的是 M 文件、数据文件和图形文件,除此之 外,还有 MEX 文件、模型文件和仿真文件等。下面分别予以说明。(1) M 文件,以.m 为扩展名,所以称为 M 文件。M 文件是由一系列 MATLAB 语句组 成的文件,包括命令文件和函数文件两类,命令文件

34、类似于其他高级语言中的主程序或主 函数,而函数文件则类似于子程序或被调函数。MATLAB 众多工具箱中的(函数)文件基本上是 M 函数文件。因为它们是由 ASCII 码表 示的文件,所以可由任一文字处理软件编辑后以文本格式存放。(2) 数据文件,以.mat 为扩展名,所以又称 MAT 文件。在讨论工作空间窗口时已经涉 及到 MAT 文件。显然,数据文件保存了 MATLAB 工作空间窗口中变量的数据。(3) 图形文件,以.fig 为扩展名。主要由 MATLAB 的绘图命令产生,当然也可用 File菜单中的 New 命令建立。(4) MEX 文件,以.mex 或.dll 为扩展名,所以称 MEX

35、文件。MEX 实际是由 MATLAB Executable 缩写而成的,由此可见,MEX 文件是 MATLAB 的可执行文件。(5) 模型和仿真文件,模型文件以.mdl 为扩展名,由 Simulink 仿真工具箱在建立各种 仿真模型时产生。仿真文件以.s 为扩展名。键盘输入语句(input)其调用格式有(1) x = input(prompt):显示提示字符串prompt,要求用户键盘输入 x 的值。(2) x = input(prompt,s):显示提示字符串prompt,要求用户键盘输入字符型变量 x 的 值,不至于将输入的数字看成是数值型数据。6.3.2屏幕输出语句(disp)屏幕输出最

36、简单的方法是直接写出欲输出的变量或数组名,后面不加分号。此外,可 以采用 disp 语句,其调用格式为 disp(x)。6.3.3M 数据文件的存储/加载(save / load)1. save 语句其调用格式有(1) save:将所有工作空间变量存储在名为 MATLAB.mat 的文件中。(2) save filename:将所有工作空间变量存储在名为 filename 的文件中。(3) save filename X Y Z:将工作空间的指定变量 X、Y、Z 存于名为 filename 的文件中。2. load 语句其调用格式有(1) load:如果 MATLAB.mat 文件存在,则加载 MATLAB.mat 文件中存储的所有变量 到工作空间;否则返回一错误信息。(2) load filename:如果 fil

温馨提示

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

最新文档

评论

0/150

提交评论