Advertisement

【老生谈算法】matlab实现BP神经网络预测程序——BP神经网络

阅读量:

BP神经网络预测程序示例
matlab % 1. 加载数据 P = [输入数据矩阵]; % 输入样本矩阵 T = [目标值向量]; % 目标值向量 % 2. 创建神经网络 net = newff(minmax(P), [10, 1], {'tansig', 'purelin'}); % 3. 设置训练参数 net.trainParam.epochs = 1000; net.trainParam.goal = 0.01; net.trainParam.lr = 0.01; % 4. 训练网络 [net, tr] = train(net, P, T); % 5. 进行仿真 A = sim(net, P); % 6. 计算误差 E = T - A; MSE = mse(E); % 7. 显示结果 disp('预测结果:'); disp(A); disp('目标值:'); disp(T); disp('均方误差:'); disp(MSE);
代码说明:
数据加载:P为输入样本矩阵,T为目标值向量。
网络创建:使用newff函数创建神经网络,输入层、隐层、输出层的节点数分别为10、1。
训练设置:设置最大训练次数、误差目标和学习率。
训练网络:使用train函数进行训练。
仿真:使用sim函数进行仿真,输出预测结果。
误差计算:计算预测值与目标值的误差,并计算均方误差(MSE)。
结果展示:显示预测结果、目标值和均方误差。
此程序可以用于对简单的非线性函数进行预测,适用于初学者学习BP神经网络的基本实现方法。

求用matlab编BP神经网络预测程序

1、文档下载:

本算法已经整理成文档如下,有需要的朋友可以点击进行下载

说明 文档(点击下载)
本算法文档 【老生谈算法】matlab实现BP神经网络预测程序.doc

更多matlab算法原理及源码详解可点击下方文字直达:

500个精选的Matlab算法原理及其源代码详细解析——老生谈算法:个人见解与学习经验


2、算法详解:

求一用matlab编的程序

P=[。。。];输入T=[。。。];输出

复制代码
    %  创建一个新的前向神经网络 
    net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')
    
    %  当前输入层权值和阈值
    inputWeights={1,1}
    inputbias={1}
    %  当前网络层权值和阈值
    layerWeights={2,1}
    layerbias={2}
    
    %  设置训练参数
     = 50;
     = ;
     = ;
     = 10000;
     = 1e-3;
    
    %  调用 TRAINGDM 算法训练 BP 网络
    [net_1,tr]=train(net_1,P,T);
    
    %  对 BP 网络进行仿真
    A = sim(net_1,P);
    %  计算仿真误差 
    E = T - A;
    MSE=mse(E)
    
    x=[。。。]';%测试
    sim(net_1,x) 
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

对初学神经网络者的小提示

第二步:需要掌握的算法是:
2. 最小均方误差,这一原理是下面部分中提到的神经网络学习算法的核心理论,对于入门者来说,首先需要阅读《高等数学》(高等教育出版社,同济大学版)第8章第10节:“最小二乘法”。
3. 在完成第2步之后,可以进一步学习Hebb学习算法、SOM和K-近邻算法。这些算法都是建立在最小均方误差原理的基础上进行的改进,参考书籍包括《神经网络原理》(机械工业出版社,Simon Haykin著,中英文版本均有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡和张长水编写)、《模式分类》(机械工业出版社,Richard O. Duda著,中英文版本均有)以及《神经网络设计》(机械工业出版社,Martin T. Hargan著,中英文版本均有)。

自适应谐振理论

对于新手来说,若对误差反传的分析过程感到困难,可以考虑暂时跳过理论分析和证明的部分内容,直接编写并测试一个基于基本学习规则的小程序。建议参考《机器学习》(机械工业出版社,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——生成一个新的前向神经网络,函数格式:
    % 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 on
    P=[-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:学习率,默认:
    % max_fail:确认样本进行仿真时,最大的失败次数,默认:5
    % mc:动量因子,默认:
    % min_grad:最小梯度值,默认:1e-10
    % show:显示的间隔次数,默认:25
    % time:训练的最长时间,默认:inf
    % ---------------------------------------------------------------
    % 当前输入层权值和阈值 
    inputWeights={1,1} 
    inputbias={1} 
    % 当前网络层权值和阈值 
    layerWeights={2,1} 
    layerbias={2} 
    % 设置网络的训练参数 
     = 50; 
     = ; 
     = ; 
     = 1000; 
     = 1e-3; ? 
    % 调用 TRAINGDM 算法训练 BP 网络 
    [net,tr]=train(net,P,T); 
    % 对 BP 网络进行仿真 
    A = sim(net,P) 
    % 计算仿真误差 
    E = T - A 
    MSE=mse(E) 
    echo off
    figure;
    plot((1:4),T,'-*',(1:4),A,'-o')

1 B P神经网络的原理及算法的基本步骤
理 论上已证 明 ,一个 3层的 B P网络能够实现任意的连续映射 ,可以任意 精度逼近任何给定的连续函数 。
1 1 B P神经网络的原理
B P (B ack P rop aga tion)神经网络通常由具有多个节点的 输入层 ( inp u t laye r) 、隐含层 ( h idden laye r) 和多个 或一个输 出节点的输出层 ( ou tp u t laye r)组成 ,其学习过程分为信息的 正向传播过程和误差的反向传播过程两个阶段 。外部输入 的信号经输入层 、隐含层为止 。的神经元逐层处理 ,向前传播到输 出层 ,给出结果 。如果在输出层得不到期望输出 ,则转入逆 向传播过程 ,将实际值与网络输出之间的误差沿原连接通路 返回 ,通过修改各层神经元的连接权重 ,减少误差 ,然后再转 入正向传播过程 ,反复迭代 ,直到误差小于给定的值

表1 1981~2005年全国总人口(单位:万人)
年份 1981 1982 1983 1984 1985 1986 1987 1988 1989
人口 99622 101541 102495 103604 104639 106008 108000 109614 111191
年份 1990 1991 1992 1993 1994 1995 1996 1997 1998
人口 114333 115823 117171 118517 119850 121121 122389 123626 124810
年份 1999 2000 2001 2002 2003 2004 2005
人口 125909 缺省 127627 128453 129227 129988 130756

模型二预测2001年~2010年全国总人口(单位:万人)
年份 2001 2002 2003 2004 2005
人口 127699 128457 129220 129987 130758
年份 2006 2007 2008 2009 2010
人口 131534 132315 133100 133890 134685

模型 预测的全国总人口(1981年至2016年)(单位:万人)
年份 1981 1982 1983 1984 1985 1991
人口 99266 101308 102967 104600 106203 115172
年份 1992 1993 1994 1995 2001 2002
人口 116550 117895 119205 120480 127403 128436
年份 2003 2004 2005 2006 2007 2008
人口 129437 130405 131340 132244 133116 133958
年份 2009 2010 2015 2020 2025 2030
人口 134770 135552 139049 141921 144257 146144
年份 2035 2040 2045 2050 2060 2070
人口 147659 148869 149832 150596 151678 152352
年份 2080 2090 2100 2105 2110 2120
人口 152769 153026 153185 153240 153283 153344

在这里插入图片描述
在这里插入图片描述

模型四预测2011至2020年人口(单位:万人)
年份 2011 2012 2013 2014 2015
全国总人口 134668 135478 136325 137185 138036
年份 2016 2017 2018 2019 2020
全国总人口 138862 139652 140402 141106 141760

在这里插入图片描述

利用Matlab Script节点实现

以逼近非线性函数为例,说明该方法的实现流程。输入矢量p定义为[-1∶∶1],目标矢量t由sin(2 pi p)加上size§组成。利用Matlab Script节点实现BP算法的过程如下:首先,在LabVIEW中创建一个新的vi,然后在框图程序中添加Matlab Script节点。接着,在节点内部编写动量BP算法的Matlab实现代码,并在节点两侧添加相应的输入和输出参数框。最后,在vi的前面板添加必要的控件,设置输入参数,并连接输出端口。运行程序后,观察图2和图3中的结果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

该代码将被用于重建原有的神经网络模型,随后,采用批处理最速下降法进行网络训练。需要注意的是,当采用批处理方式训练时,所有输入数据需以矩阵形式进行处理。

复制代码
    net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');
     
     = 50;  = ;  = 300;  = 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 1e-05, Gradient 
    1e-10
    TRAINGD, Epoch 50/300, MSE 1e-05, Gradient
    1e-10
    TRAINGD, Epoch 100/300, MSE 1e-05, Gradient
    1e-10
    TRAINGD, Epoch 150/300, MSE 1e-05, Gradient
    1e-10
    TRAINGD, Epoch 200/300, MSE 1e-05, Gradient
    1e-10
    TRAINGD, Epoch 211/300, MSE 1e-05, Gradient
    1e-10
    TRAINGD, Performance goal met. a = sim(net,p)
    a =
       
    用nnd12sd1 来演示批处理最速下降法的性能。 带动量的批处理梯度下降法(TRAINGDM)
    net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingdm');
     = 50;  = ;  = ;  = 300;  = 1e-5;
    p = [-1 -1 2 2;0 5 0 5]; t = [-1 -1 1 1]; net=train(net,p,t);
    TRAINGDM, Epoch 0/300, MSE 1e-05, Gradient 
    1e-10
    TRAINGDM, Epoch 50/300, MSE 1e-05, Gradient
    1e-10
    TRAINGDM, Epoch 100/300, MSE 1e-05, Gradient
    1e-10
    TRAINGDM, Epoch 114/300, MSE 1e-05, Gradient
    1e-10
    TRAINGDM, Performance goal met. a = sim(net,p)
    a =

MATLAB神经网络软件包的图形界面(GUI)工具,其主要功能包括:1.神经网络 GUI 主窗口;2.神经网络建立窗口;3.网络训练对话框;4.自适应参数设置对话框;5.权值显示窗口。通过工具箱提供的GUI按钮,用户可以方便地打开所建立的神经网络结构图进行查看,并可观察训练过程中的偏差曲线变化情况。解决特定问题的步骤如下:1.分析待解决的问题,选择合适的网络模型;2.建立神经网络模型;3.对网络进行初始化设置;4.对网络进行训练;5.对网络进行仿真验证;6.将网络应用于实际问题求解。

利用NNToolbox架构神经网络主要采用以下两种方法:
(1)调用网络数据管理器。具体操作如下:在Launch Pad窗体中点击Neural Network Toolbox目录下的nntool文件,即可在计算机屏幕中央出现Network Data Manager窗体;点击窗体中NewNetwork按钮,根据提示设定网络类型、网络结构、网络算法和网络激活函数,即可生成用户定义的神经网络;点击View按钮可显示该神经网络的结构图;点击initialize、simulate、train和adapt按钮并设定参数,可对神经网络进行初始化、模拟、训练和仿真;最后点击Export按钮可将网络模拟、训练和仿真的结果以文件的形式导出。该方法操作简便,无需编写程序代码,即可完成神经网络的构建、初始化、训练和仿真等主要工作。然而,该方法无法与MATLAB其他程序动态链接,网络仿真结果仅以数据文件的形式导出,无法实现可视化显示。
(2)编写MATLAB应用程序,即运用MATLAB语言引用神经网络工具箱函数编写程序代码并保存为M文件,然后运行该文件。该种方法可根据研究人员的需要,调用MATLAB丰富的内部函数,并能与各类数据库及其他应用程序(包括C、FORTRAN程序)动态链接,使神经网络功能更为强大。本研究即采用该种方法,其中引用的重要算法、函数及参数将在第2、3节详细说明。

全部评论 (0)

还没有任何评论哟~