文档库 最新最全的文档下载
当前位置:文档库 › 用matlab编BP神经网络预测程序加一个优秀程序

用matlab编BP神经网络预测程序加一个优秀程序

用matlab编BP神经网络预测程序加一个优秀程序
用matlab编BP神经网络预测程序加一个优秀程序

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

求一用matlab编的程序

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

% 创建一个新的前向神经网络

net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')

% 当前输入层权值和阈值

inputWeights=net_1.IW{1,1}

inputbias=net_1.b{1}

% 当前网络层权值和阈值

layerWeights=net_1.LW{2,1}

layerbias=net_1.b{2}

% 设置训练参数

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 = sim(net_1,P);

% 计算仿真误差

E = T - A;

MSE=mse(E)

x=[。。。]';%测试

sim(net_1,x) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

不可能啊我2009

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

第二步:掌握如下算法:

2.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看《高等数学》(高等教育出版社,同济大学版)第8章的第十节:“最小二乘法”。

3.在第2步的基础上看Hebb学习算法、SOM和K-近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是《神经网络原理》(机械工业出版社,Simon Haykin著,中英文都有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡,张长水著)、《模式分类》(机械工业出版社,Richard O. Duda等著,中英文都有)、《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)。

4.ART(自适应谐振理论),该算法的最通俗易懂的读物就是《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)的第15和16章。若看理论分析较费劲可直接编程实现一下16.2.7节的ART1算法小节中的算法.

4.BP算法,初学者若对误差反传的分析过程理解吃力可先跳过理论分析和证明的内容,直接利用最后的学习规则编个小程序并测试,建议看《机器学习》(机械工业出版社,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:学习率,默认:0.01

% max_fail:确认样本进行仿真时,最大的失败次数,默认:5

% mc:动量因子,默认:0.9

% min_grad:最小梯度值,默认:1e-10

% show:显示的间隔次数,默认:25

% time:训练的最长时间,默认:inf

% --------------------------------------------------------------- % 当前输入层权值和阈值

inputWeights=net.IW{1,1}

inputbias=net.b{1}

% 当前网络层权值和阈值

layerWeights=net.LW{2,1}

layerbias=net.b{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 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)组成,其学习过程分为信息的正向传播过程和误差的反向传播过程两个阶段。外部输入的信号经输入层、隐含层为止。的神经元逐层处理,向前传播到输出层,给出结果。如果在输出层得不到期望输出,则转入逆向传播过程,将实际值与网络输出之间的误差沿原连接通路返回,通过修改各层神经元的连接权重,减少误差,然后再转入正向传播过程,反复迭代,直到误差小于给定的值

人口152769 153026 153185

2.1 利用Matlab Script节点实现

在此以对一个非线性函数的逼近作为例子来说明

实现流程,其中输入矢量p=[-1∶0.05∶1];目标矢量t=sin(2*pi*p)+0.1randn(size(p))。利用Mat-

lab Script节点实现BP算法的过程如下:

(1)新建一个LabVIEW vi,在框图程序中添加

Matlab Script节点。

(2)在节点内添加Matlab的动量BP算法实现代

码,并分别在节点左右边框分别添加对应的输入/输出参数,如图1所示。

(3)在vi的前面板添加相应的控件,设置输入参

数,连接输出控件。执行程序,结果如图2、图3所示。

下面的代码将重建我们以前的网络,然后用批处理最速下降法训(注意用批处理方式训练的话所有的输入要设置为矩阵方式)练网络。

net=newff([-1 2; 0

5],[3,1],{'tansig','purelin'},'traingd');

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-10

TRAINGD, Epoch 50/300, MSE 0.00236382/1e-05, Gradient 0.0495292/1e-10

TRAINGD, Epoch 100/300, MSE 0.000435947/1e-05, Gradient 0.0161202/1e-10

TRAINGD, Epoch 150/300, MSE 8.68462e-05/1e-05, Gradient 0.00769588/1e-10

TRAINGD, Epoch 200/300, MSE 1.45042e-05/1e-05, Gradient 0.00325667/1e-10

TRAINGD, Epoch 211/300, MSE 9.64816e-06/1e-05, Gradient 0.00266775/1e-10

TRAINGD, Performance goal met.

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.mc = 0.9;

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);

TRAINGDM, Epoch 0/300, MSE 3.6913/1e-05, Gradient 4.54729/

1e-10

TRAINGDM, Epoch 50/300, MSE 0.00532188/1e-05, Gradient

0.213222/1e-10

TRAINGDM, Epoch 100/300, MSE 6.34868e-05/1e-05, Gradient

0.0409749/1e-10

TRAINGDM, Epoch 114/300, MSE 9.06235e-06/1e-05, Gradient

0.00908756/1e-10

TRAINGDM, Performance goal met.

a = sim(net,p)

a =

-1.0026 -1.0044 0.9969 0.9992

3.1 MATLAB 神经网络工具箱的GUI(图形用户界面)工具

. 神经网络工具箱的GUI 工具主要包括:1)神经网络GUI 工具主窗口;2)神经网络的建立窗口;3)网络训练对话框;4)自适应参数设置对话框;5)权值显示窗口. 通过神经网络工具箱的GUI 工具按钮就能很方便地打开所建立的神经网络的结构图进行察看,也可以看到一个训练过程的偏差曲线变化图.

3.2 神经网络工具箱解决问题的一般步骤

1)对待解决的问题进行分析,根据各种网络的特点选用合适的网络模型;2)建立网络;3)对网络初始化;4)对网络进行训练;5)

对网络进行仿真检验;6)应用网络解决问题. 4 系统的预测仿真

4.1

使用神经网络 G UI 工具建立神经网络的输入样本和目标样本

1)在 MATLAB 命令窗口输入 nntool ,打开图形用户界面工具主窗

口,如图 1 所示. 2)单击 New Data 按钮,打开数据生成对话框. 建立输入样本 P ,数据的输入和设置如图 2 所 示,单击 Create 按钮关闭对话框.

3)依照上一步,输入目标样本 T

,数据类型选 Targets.

回到 GUI 工具的主窗口,单击 Export

按钮弹出导出对话框,选中变量 P 和 T ,然后单击 Export 按钮,把变量 P 和 T 导出到工作区. 这为 仿真文件从工作空间调用导入数据做好了准备.

4.2

建立仿真模型文件进行预测

运行 MATLAB 软件中的 Simulink 仿真环境,在神经网络模块库中调用神经网络预测控制模块 NN Predictive Controller ,用模块封装技术建立河流水质数学方程模块,连接信号源模块和示波器模 块后就建立了河流水质预测仿真文件 predwq.mdl ,如图 3,其中 From Workspace 模块中是目标样本 T 的数据,可以直接从工作区导入.

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

图 3

predwq.mdl 仿真文件

图 4

神经网络预测控制模块窗口

系统模块 System

Model

是用模块封装技术封装的河流水质微分方程式(

4)的仿真模块,如图

5 所示.

在 predwq Simulink 主窗口,仿真时间输入 100,再单击 Start simulation 命令按钮开始仿真. 仿 真结束后,双击示波器模块就可以查看仿真结果,如图 6 所示. 对仿真结果和目标样本的值进行比 较,根据它们的差值绘出预测误差变化曲线,如图 7 所示.

图 5 河流水质微分方程仿真模块

图 6 目标和预测结果图

5 结果与讨论

比较图 6、图 7 知,本文建立的网络系统对水质参 数耗氧量的预测图像和目标样本基本一致. 把仿真预测 结果数据和实际目标样本数据进行比较,正、负最大误 差分别为 0.11 和

0.06,最小误差为 0,虽然还有偏差, 但误差是在满意的范围之内. 因此,把河流水质的数学 模型用 MATLAB 神经网络进行仿真预测,具有较高的 精度,为河流水质预测提供了方便的方法.

图7 预测误差的曲线变化

利用NNToolbox 4.0.2架构神经网络主要采用以下两种方

法:

(1)使用网络数据管理器(Network Data Manager)。具体操

作为:在Launch Pad窗体中点击Neural Network Toolbox目录下的。

nntool文件,即在计算机屏幕中央出现Network Data Manager窗体;点击窗体中NewNetwork按钮,根据提示设定网络类型、网络

结构、网络算法和网络激活函数即可生成用户定义的神经网络;

点击View按钮可显示该神经网络的结构图;点击initialize、simu- late、train和adapt按钮并设定参数可对神经网络进行初始化、模拟、训练和仿真;最后点击Export按钮可将网络模拟、训练和仿

真的结果以文件的形式导出。该方法操作简易,无需编写程序

代码,即可完成神经网络的构建、初始化、训练和仿真等主要工

作。但是该方法不能和MATLAB其他程序动态链接,网络仿真

结果只能以数据文件的形式导出,不能可视化显示。

(2)编写MATLAB应用程序,即运用MATLAB语言引用神

经网络工具箱函数编写程序代码并保存为M文件,然后运行该

文件。该种方法可以根据研究人员的需要,调用MATLAB丰富

的内部函数,并能和各类数据库及其他应用程序(包括C、FOR- TRAN程序)动态链接,使神经网络功能更为强大。本研究即采

用该种方法,其中引用的重要算法、函数及参数将在第2、3节详

述。

中国未来几年人口总量的预测

本文对所使用的序列数据进行GM(1,1)模型维数优化时得到最佳的维数是5~8 维不等,均属于短序列预测,只适合短期的人口总量的预测,所以对2008-2012 年共5 个时间序列点的中国人口总量进行预测,结果如表2 所示。

表2 灰色人工神经网络(GANN)模型对2008-2012 年中国人口总量预测的结果万人

20082009201020112012

年份

总人口132 663132 963133 706134 373135 025

建立BP神经网络预测模型

在进行BP网络预测模型设计时,主要考虑网络的层

数和每层中神经元的个数。

神经网络通过计算机程序实现对非线性映射逼近,在

众多语言中,MATLAB语言允许数学形式的语言编写程序, 比其他语言更接近我们书写计算公式的思维方式。因此编程效率高,易学易懂。

T r a i n i n g -B l u e G

o a l -B l a c k

采用单隐层的 B P 网络进行预测

。建立两层神经网络,由于输入样本为 3 维的输入向

量,因此,输入层一共有 3 个神经元,根据 Kolmogorov [2]定理,网络应该为 3 × 7 × 3 的结构。 其中,threshold 设定了网络输入向量的取值范围[0,1],第一层神经元数为 3,传函类型为

‘LOGSIG ’,第二层神经元数为 7,传函类型为‘PURELIN ’,采用动量梯度下降反向传播算法对 网络进行训练。中间层的神经元个数是很难确定的,而这又在很大程度上影响着网络的预测 性能。当网络的预测误差最小时,网络中间层的神经元数目就是最佳值。进行对比后,可见 中间层神经元个数为 8 时,网络的预测性能最好。训练结果如图 1 所示,网络的预报误差如

Performance is 9.89455e-005, Goal is 0.0001

10

0.035

-1

10

0.03

0.025

-2

10

0.02

0.015

-3

10

0.01

0.005

-4

10

-0.005

50

100

150

155

Epochs

-0.01

1 1.

2 1.4 1.6 1.8 2 2.2

2.4 2.6 2.8 3

8)图2网络的预报误差(中间层神经元数目:8)

,每行语句前都有一个符号“>>”,此即命令提示符。在此符号后(也只能在此符号后)输入各种语句并按Enter 键,方可被MATLAB 接收和执行。执行的结果通常就直接显示在语句下方,如图1.2 所示。

不同类型语句用不同颜色区分。在默认情况下,输入的命令、函数、表达式以及计算结果等采用黑色字体,字符串采用赭红色,if、for 等关键词采用蓝色,注释语句用绿色。

因为M ATLAB 是一个多功能集成软件,不同的功能需要使用不同的文件格式去表现,所以M ATLAB 的文件也有多种格式。最基本的是M文件、数据文件和图形文件,除此之外,还有M EX 文件、模型文件和仿真文件等。下面分别予以说明。

(1) M 文件,以.m 为扩展名,所以称为M文件。M 文件是由一系列M ATLAB 语句组成的文件,包括命令文件和函数文件两类,命令文件类似于其他高级语言中的主程序或主函数,而函数文件则类似于子程序或被调函数。

MATLAB 众多工具箱中的(函数)文件基本上是M 函数文件。因为它们是由ASCII 码表示的文件,所以可由任一文字处理软件编辑后以文本格式存放。

(2) 数据文件,以.mat 为扩展名,所以又称M AT 文件。在讨论工作空间窗口时已经涉及到M AT 文件。显然,数据文件保存了M ATLAB 工作空间窗口中变量的数据。

(3) 图形文件,以.fig 为扩展名。主要由MATLAB 的绘图命令产生,当然也可用File 菜单中的N ew 命令建立。

(4) MEX 文件,以.mex 或.dll 为扩展名,所以称M EX 文件。MEX 实际是由M ATLAB Executable 缩写而成的,由此可见,MEX 文件是M ATLAB 的可执行文件。

(5) 模型和仿真文件,模型文件以.mdl 为扩展名,由Simulink 仿真工具箱在建立各种仿真模型时产生。仿真文件以.s 为扩展名。

键盘输入语句(input)

其调用格式有

(1) x = input('prompt'):显示提示字符串'prompt',要求用户键盘输入x的值。(2) x = input('prompt','s'):显示提示字符串'prompt',要求用户键盘输入字符型变量x 的值,不至于将输入的数字看成是数值型数据。

6.3.2 屏幕输出语句(disp)

屏幕输出最简单的方法是直接写出欲输出的变量或数组名,后面不加分号。此外,可以采用d isp 语句,其调用格式为d isp(x)。

6.3.3 M 数据文件的存储/加载(save / load)

1. save 语句

其调用格式有

(1) save:将所有工作空间变量存储在名为M ATLAB.mat 的文件中。

(2) save filename:将所有工作空间变量存储在名为f ilename 的文件中。

(3) save filename X Y Z:将工作空间的指定变量X、Y、Z 存于名为f ilename 的文件中。

2. load 语句

其调用格式有

(1) load:如果M ATLAB.mat 文件存在,则加载M ATLAB.mat 文件中存储的所有变量到工作空间;否则返回一错误信息。

(2) load filename:如果f ilename 文件存在,则加载f ilename 文件中存储的所有变量到工作空间;否则返回一错误信息。

(3) load filename X Y Z:如果f ilename 文件及存储的变量X、Y、Z存在,则加载f ilename

文件中存储的变量X、Y、Z 到工作空间;否则返回一错误信息。

在M ATLAB 中,主要的二维绘图函数如下:

(1) plot:x 轴和y轴均为线性刻度。

(2) loglog:x 轴和y轴均为对数刻度。

(3) semilogx:x 轴为对数刻度,y 轴为线性刻度。

(4) semilogy:x 轴为线性刻度,y 轴为对数刻度。

(5) plotyy: 绘制双纵坐标图形。

其中p lot 是最基本的二维绘图函数,其调用格式有

①plot(Y):若Y 为实向量,则以该向量元素的下标为横坐标,以Y 的各元素值为纵坐标,绘制二维曲线;若Y为复数向量,则等效于p lot(real(Y),imag(Y));若Y为实矩阵,则按列绘制每列元素值相对其下标的二维曲线,曲线的条数等于Y的列数;若Y为复数矩阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条二维曲线。

②plot(X,Y):若X、Y 为长度相等的向量,则绘制以X和Y 为横、纵坐标的二维曲线;若X 为向量,Y 是有一维与Y 同维的矩阵,则以X 为横坐标绘制出多条不同色彩的曲线,曲线的条数与Y的另一维相同;若X、Y 为同维矩阵,则绘制以X和Y对应的列元素为横、纵坐标的多条二维曲线,曲线的条数与矩阵的列数相同。

③plot(X1,Y1,X2,Y2,…X n,Yn):其中的每一对参数Xi 和Yi(i=1,2,...,n)的取值和所绘图形与②中相同。

④plot(X1,Y1,LineSpec,...):以L ineSpec 指定的属性,绘制所有X n、Yn 对应的曲线。

⑤plot(...,'PropertyName',PropertyValue,...):对于由plot 绘制的所有曲线,按照设置的属性值进行绘制,PropertyName 为属性名,PropertyValue 为对应的属性值。

⑥h = plot(...):调用函数p lot 时,同时返回每条曲线的图形句柄h(列向量)。

①在工作空间查看各个变量,或在命令窗口用who, whos( 注意大小写) 查看各个变量。

②在工作空间双击变量,弹出A rray Editor 窗口(数组编辑器窗口),即可修改变量。

③使用s ave 命令把工作空间的全部变量保存为m y_var.mat 文件。

>>save my_var.mat

④输入下列命令:

>>clear all %清除工作空间的所有变量

观察工作空间的变量是否被清空。使用l oad 命令把刚才保存的变量载入工作空间。

>>load my_var.mat

⑤清除命令窗口命令:

>>clc

(完整版)BP神经网络matlab实例(简单而经典).doc

p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 原始数据归一化 net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的BP 网络net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); %调用TRAINGDM 算法训练BP 网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); anew=postmnmx(anewn,mint,maxt); %对 BP 网络进行仿真%还原数据 y=anew'; 1、 BP 网络构建 (1)生成 BP 网络 net newff ( PR,[ S1 S2...SNl],{ TF1 TF 2...TFNl }, BTF , BLF , PF ) PR :由R 维的输入样本最小最大值构成的R 2 维矩阵。 [ S1 S2...SNl] :各层的神经元个数。 {TF 1 TF 2...TFNl } :各层的神经元传递函数。 BTF :训练用函数的名称。 (2)网络训练 [ net,tr ,Y, E, Pf , Af ] train (net, P, T , Pi , Ai ,VV , TV ) (3)网络仿真 [Y, Pf , Af , E, perf ] sim(net, P, Pi , Ai ,T ) {'tansig','purelin'},'trainrp' BP 网络的训练函数 训练方法 梯度下降法 有动量的梯度下降法 自适应 lr 梯度下降法 自适应 lr 动量梯度下降法弹性梯度下降法训练函数traingd traingdm traingda traingdx trainrp Fletcher-Reeves 共轭梯度法traincgf Ploak-Ribiere 共轭梯度法traincgp

人工神经网络Matlab实现代码

以下是用Matlab中的m语言编写的BP神经网络代码,实现的是一个正弦函数的拟合过程,包括了初始化、BP算法、绘制曲线等过程,可以将代码放到一个M文件中运行,以下是代码: defaultpoints=20; %%%%%%%%%隐含层节点数 inputpoints=1; %%%%%%%%%输入层节点数 outputpoints=1; %%%%%%%%%输出层节点数 Testerror=zeros(1,100);%%%%每个测试点的误差记录 a=zeros(1,inputpoints);%%%%输入层节点值 y=zeros(1,outputpoints);%%%样本节点输出值 w=zeros(inputpoints,defaultpoints);%%%%%输入层和隐含层权值 %初始化权重很重要,比如用rand函数初始化则效果非常不确定,不如用zeros初始化 v=zeros(defaultpoints,outputpoints);%%%%隐含层和输出层权值 bin=rand(1,defaultpoints);%%%%%隐含层输入 bout=rand(1,defaultpoints);%%%%隐含层输出 base1=0*ones(1,defaultpoints);%隐含层阈值,初始化为0 cin=rand(1,outputpoints);%%%%%%输出层输入 cout=rand(1,outputpoints);%%%%%输出层输出 base2=0*rand(1,outputpoints);%%输出层阈值 error=zeros(1,outputpoints);%%%拟合误差 errors=0;error_sum=0; %%%误差累加和 error_rate_cin=rand(defaultpoints,outputpoints);%%误差对输出层节点权值的导数 error_rate_bin=rand(inputpoints,defaultpoints);%%%误差对输入层节点权值的导数 alfa=0.5; %%%% alfa 是隐含层和输出层权值-误差变化率的系数,影响很大 belt=0.5; %%%% belt 是隐含层和输入层权值-误差变化率的系数,影响较小 gama=5; %%%% gama 是误差放大倍数,可以影响跟随速度和拟合精度,当gama大于2时误差变大,容易震荡 %%%%规律100个隐含节点,当alfa *gama =1.5时,效果好,其他值误差变大,belt基本不影响效果 %%%%规律200个隐含节点,当alfa *gama =0.7时,效果好,其他值误差变大,belt基本不影响效果,最小误差和100个隐含点一样 %%%%规律50个隐含节点,当alfa *gama =3时,效果好,其他值误差变大,belt基本不影响效果,最小误差和100个隐含点一样 trainingROUND=200;% 训练次数,有时训练几十次比训练几百次上千次效果要好很多sampleNUM=361; % 样本点数 x1=zeros(sampleNUM,inputpoints); %样本输入矩阵 y1=zeros(sampleNUM,outputpoints); %样本输出矩阵 x2=zeros(sampleNUM,inputpoints); %测试输入矩阵

BP神经网络模型应用实例

BP神经网络模型 第1节基本原理简介 近年来全球性的神经网络研究热潮的再度兴起,不仅仅是因为神经科学本身取得了巨大的进展.更主要的原因在于发展新型计算机和人工智能新途径的迫切需要.迄今为止在需要人工智能解决的许多问题中,人脑远比计算机聪明的多,要开创具有智能的新一代计算机,就必须了解人脑,研究人脑神经网络系统信息处理的机制.另一方面,基于神经科学研究成果基础上发展出来的人工神经网络模型,反映了人脑功能的若干基本特性,开拓了神经网络用于计算机的新途径.它对传统的计算机结构和人工智能是一个有力的挑战,引起了各方面专家的极大关注. 目前,已发展了几十种神经网络,例如Hopficld模型,Feldmann等的连接型网络模型,Hinton等的玻尔茨曼机模型,以及Rumelhart等的多层感知机模型和Kohonen的自组织网络模型等等。在这众多神经网络模型中,应用最广泛的是多层感知机神经网络。多层感知机神经网络的研究始于50年代,但一直进展不大。直到1985年,Rumelhart等人提出了误差反向传递学习算法(即BP算),实现了Minsky的多层网络

设想,如图34-1所示。 BP 算法不仅有输入层节点、输出层节点,还可有1个或多个隐含层节点。对于输入信号,要先向前传播到隐含层节点,经作用函数后,再把隐节点的输出信号传播到输出节点,最后给出输出结果。节点的作用的激励函数通常选取S 型函数,如 Q x e x f /11)(-+= 式中Q 为调整激励函数形式的Sigmoid 参数。该算法的学习过程由正向传播和反向传播组成。在正向传播过程中,输入信息从输入层经隐含层逐层处理,并 传向输出层。每一层神经元的状态只影响下一层神经

基于遗传算法的BP神经网络MATLAB代码

用遗传算法优化BP神经网络的Matlab编程实例(转) 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=[1:19;2:20;3:21;4:22]'; YY=[1:4]; XX=premnmx(XX); YY=premnmx(YY); YY %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'tra inlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个MAT-file,initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数

BP神经网络地设计实例(MATLAB编程)

神经网络的设计实例(MATLAB编程) 例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=[-1, -2, 3, 1; -1, 1, 5, -3]; % P 为输入矢量T=[-1, -1, 1, 1]; % T 为目标矢量

clc % 创建一个新的前向神经网络 net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm') % 当前输入层权值和阈值 inputWeights=net.IW{1,1} inputbias=net.b{1} % 当前网络层权值和阈值 layerWeights=net.LW{2,1} layerbias=net.b{2} 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);

BP神经网络matlab源程序代码

close all clear echo on clc % NEWFF——生成一个新的前向神经网络 % TRAIN——对 BP 神经网络进行训练 % SIM——对 BP 神经网络进行仿真 % 定义训练样本 % P为输入矢量 P=[0.7317 0.6790 0.5710 0.5673 0.5948;0.6790 0.5710 0.5673 0.5948 0.6292; ... 0.5710 0.5673 0.5948 0.6292 0.6488;0.5673 0.5948 0.6292 0.6488 0.6130; ... 0.5948 0.6292 0.6488 0.6130 0.5654; 0.6292 0.6488 0.6130 0.5654 0.5567; ... 0.6488 0.6130 0.5654 0.5567 0.5673;0.6130 0.5654 0.5567 0.5673 0.5976; ... 0.5654 0.5567 0.5673 0.5976 0.6269;0.5567 0.5673 0.5976 0.6269 0.6274; ... 0.5673 0.5976 0.6269 0.6274 0.6301;0.5976 0.6269 0.6274 0.6301 0.5803; ... 0.6269 0.6274 0.6301 0.5803 0.6668;0.6274 0.6301 0.5803 0.6668 0.6896; ... 0.6301 0.5803 0.6668 0.6896 0.7497]; % T为目标矢量 T=[0.6292 0.6488 0.6130 0.5654 0.5567 0.5673 0.5976 ... 0.6269 0.6274 0.6301 0.5803 0.6668 0.6896 0.7497 0.8094]; % Ptest为测试输入矢量 Ptest=[0.5803 0.6668 0.6896 0.7497 0.8094;0.6668 0.6896 0.7497 0.8094 0.8722; ... 0.6896 0.7497 0.8094 0.8722 0.9096]; % Ttest为测试目标矢量 Ttest=[0.8722 0.9096 1.0000]; % 创建一个新的前向神经网络 net=newff(minmax(P'),[12,1],{'logsig','purelin'},'traingdm'); % 设置训练参数 net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 5000; net.trainParam.goal = 0.001; % 调用TRAINGDM算法训练 BP 网络 [net,tr]=train(net,P',T); % 对BP网络进行仿真 A=sim(net,P'); figure; plot((1993:2007),T,'-*',(1993:2007),A,'-o'); title('网络的实际输出和仿真输出结果,*为真实值,o为预测值'); xlabel('年份'); ylabel('客运量'); % 对BP网络进行测试 A1=sim(net,Ptest');

Matlab训练好的BP神经网络如何保存和读取方法(附实例说明)

Matlab训练好的BP神经网络如何保存和读取方法(附实例说明) 看到论坛里很多朋友都在提问如何存储和调用已经训练好的神经网络。 本人前几天也遇到了这样的问题,在论坛中看了大家的回复,虽然都提到了关键的两个函数“save”和“load”,但或多或少都简洁了些,让人摸不着头脑(呵呵,当然也可能是本人太菜)。通过不断调试,大致弄明白这两个函数对神经网络的存储。下面附上实例给大家做个说明,希望对跟我有一样问题的朋友有所帮助。 如果只是需要在工作目录下保到当前训练好的网络,可以在命令窗口 输入:save net %net为已训练好的网络 然后在命令窗口 输入:load net %net为已保存的网络 加载net。 但一般我们都会在加载完后对网络进行进一步的操作,建议都放在M文件中进行保存网络和调用网络的操作 如下所示: %% 以函数的形式训练神经网络 functionshenjingwangluo() P=[-1,-2,3,1; -1,1,5,-3]; %P为输入矢量 T=[-1,-1,1,1,]; %T为目标矢量 net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm') %创建一个新的前向神经网络 inputWeights=net.IW{1,1} inputbias=net.b{1} %当前输入层权值和阀值 layerWeights=net.LW{2,1} layerbias=net.b{2} net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.mc=0.9;

BP神经网络MATLAB代码

BP神经网络matlab代码 p=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;]'; %====期望输出======= t=[4554292834972261692113913580445126363471385435562659... 4335288240841999288921752510340937293489317245684015... 3666]; ptest=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;456840153666]'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%将数据归一化 NodeNum1=20;%隐层第一层节点数 NodeNum2=40;%隐层第二层节点数 TypeNum=1;%输出维数 TF1='tansig'; TF2='tansig'; TF3='tansig'; net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1TF2 TF3},'traingdx');

BP神经网络matlab源程序代码

BP神经网络matlab源程序代码) %******************************% 学习程序 %******************************% %======原始数据输入======== p=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;... 3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;... 4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;... 2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;... 2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;... 3489 3172 4568;3172 4568 4015;]'; %===========期望输出======= t=[4554 2928 3497 2261 6921 1391 3580 4451 2636 3471 3854 3556 2659 ... 4335 2882 4084 1999 2889 2175 2510 3409 3729 3489 3172 4568 4015 ... 3666]; ptest=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;... 3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;... 4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;... 2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;... 2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;... 3489 3172 4568;3172 4568 4015;4568 4015 3666]'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %将数据归一化 NodeNum1 =20; % 隐层第一层节点数 NodeNum2=40; % 隐层第二层节点数 TypeNum = 1; % 输出维数 TF1 = 'tansig';

BP神经网络matlab实例

神经网络Matlab p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络 net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); %对BP网络进行仿真 anew=postmnmx(anewn,mint,maxt); %还原数据 y=anew'; 1、BP网络构建 (1)生成BP网络 = net newff PR S S SNl TF TF TFNl BTF BLF PF (,[1 2...],{ 1 2...},,,) R?维矩阵。 PR:由R维的输入样本最小最大值构成的2

S S SNl:各层的神经元个数。 [1 2...] TF TF TFNl:各层的神经元传递函数。 { 1 2...} BTF:训练用函数的名称。 (2)网络训练 = [,,,,,] (,,,,,,) net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真 = [,,,,] (,,,,) Y Pf Af E perf sim net P Pi Ai T {'tansig','purelin'},'trainrp' BP网络的训练函数 训练方法训练函数 梯度下降法traingd 有动量的梯度下降法traingdm 自适应lr梯度下降法traingda 自适应lr动量梯度下降法traingdx 弹性梯度下降法trainrp Fletcher-Reeves共轭梯度法traincgf Ploak-Ribiere共轭梯度法traincgp Powell-Beale共轭梯度法traincgb 量化共轭梯度法trainscg 拟牛顿算法trainbfg 一步正割算法trainoss Levenberg-Marquardt trainlm

matlab BP神经网络

基于MATLAB的BP神经网络工具箱函数 最新版本的神经网络工具箱几乎涵盖了所有的神经网络的基本常用模型,如感知器和BP网络等。对于各种不同的网络模型,神经网络工具箱集成了多种学习算法,为用户提供了极大的方便[16]。Matlab R2007神经网络工具箱中包含了许多用于BP网络分析与设计的函数,BP网络的常用函数如表3.1所示。 3.1.1BP网络创建函数 1) newff 该函数用于创建一个BP网络。调用格式为: net=newff net=newff(PR,[S1S2..SN1],{TF1TF2..TFN1},BTF,BLF,PF) 其中, net=newff;用于在对话框中创建一个BP网络。 net为创建的新BP神经网络; PR为网络输入向量取值范围的矩阵; [S1S2…SNl]表示网络隐含层和输出层神经元的个数; {TFlTF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’; BTF表示网络的训练函数,默认为‘trainlm’; BLF表示网络的权值学习函数,默认为‘learngdm’; PF表示性能数,默认为‘mse’。

2)newcf函数用于创建级联前向BP网络,newfftd函数用于创建一个存在输入延迟的前向网络。 3.1.2神经元上的传递函数 传递函数是BP网络的重要组成部分。传递函数又称为激活函数,必须是连续可微的。BP网络经常采用S型的对数或正切函数和线性函数。 1) logsig 该传递函数为S型的对数函数。调用格式为: A=logsig(N) info=logsig(code) 其中, N:Q个S维的输入列向量; A:函数返回值,位于区间(0,1)中; 2)tansig 该函数为双曲正切S型传递函数。调用格式为: A=tansig(N) info=tansig(code) 其中, N:Q个S维的输入列向量; A:函数返回值,位于区间(-1,1)之间。 3)purelin 该函数为线性传递函数。调用格式为: A=purelin(N) info=purelin(code) 其中, N:Q个S维的输入列向量; A:函数返回值,A=N。 3.1.3BP网络学习函数 1)learngd 该函数为梯度下降权值/阈值学习函数,它通过神经元的输入和误差,以及权值和阈值的学习效率,来计算权值或阈值的变化率。调用格式为: [dW,ls]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) [db,ls]=learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)

BP神经网络matlab代码 (1)

%======原始数据输入======== p=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;]'; %期望输出 t=[4554292834972261692113913580445126363471385435562659... 4335288240841999288921752510340937293489317245684015... 3666]; pt=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;456840153666]';%测试输入数据 tt=[………];%测试输出数据 [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%将数据归一化 NodeNum1=12;%隐层节点 TypeNum=1;%输出节点 TF1='tansig'; TF2='tansig'; net=newff(minmax(pn),[NodeNum1,TypeNum],{TF1 TF2},'traingdx'); inputWeights=net.IW{1,1};%第一层权值输出

bp神经网络及matlab实现

bp神经网络及matlab实现 分类:算法学习2012-06-20 20:56 66399人阅读评论(28) 收藏举报网络matlab算法functionnetworkinput 本文主要内容包括:(1) 介绍神经网络基本原理,(2) https://www.wendangku.net/doc/2c4544675.html,实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法。 第0节、引例 本文以Fisher的Iris数据集作为神经网络程序的测试数据集。Iris数据集可以在https://www.wendangku.net/doc/2c4544675.html,/wiki/Iris_flower_data_set 找到。这里简要介绍一下Iris数据集: 有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类。不同品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度会有差异。我们现有一批已知品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度的数据。 一种解决方法是用已有的数据训练一个神经网络用作分类器。 如果你只想用C#或Matlab快速实现神经网络来解决你手头上的问题,或者已经了解神经网络基本原理,请直接跳到第二节——神经网络实现。 第一节、神经网络基本原理 1. 人工神经元( Artificial Neuron )模型 人工神经元是神经网络的基本元素,其原理可以用下图表示:

图1. 人工神经元模型 图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值( threshold ),或称为偏置( bias )。则神经元i的输出与输入的关系表示为: 图中yi表示神经元i的输出,函数f称为激活函数 ( Activation Function )或转移函数( Transfer Function ) ,net称为净激活(net activation)。若将阈值看成是神经元i的一个输入x0的权重wi0,则上面的式子可以简化为: 若用X表示输入向量,用W表示权重向量,即: X = [ x0 , x1 , x2 , ....... , xn ]

用遗传算法优化BP神经网络的Matlab编程实例

用遗传算法优化BP神经网络的 Matlab编程实例 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP 算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=premnmx(XX); YY=premnmx(YY); %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},' trainlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数 %下面调用gaot工具箱,其中目标函数定义为gabpEval [x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,... 'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutatio n',[2 gen 3]); %绘收敛曲线图 figure(1) plot(trace(:,1),1./trace(:,3),'r-'); hold on plot(trace(:,1),1./trace(:,2),'b-'); xlabel('Generation'); ylabel('Sum-Squared Error'); figure(2) plot(trace(:,1),trace(:,3),'r-'); hold on plot(trace(:,1),trace(:,2),'b-'); xlabel('Generation'); ylabel('Fittness'); %下面将初步得到的权值矩阵赋给尚未开始训练的BP网络 [W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x); net.LW{2,1}=W1; net.LW{3,2}=W2; net.b{2,1}=B1; net.b{3,1}=B2; XX=P; YY=T; %设置训练参数 net.trainParam.show=1; net.trainParam.lr=1; net.trainParam.epochs=50; net.trainParam.goal=0.001; %训练网络 net=train(net,XX,YY); 程序二:适应值函数 function [sol, val] = gabpEval(sol,options) % val - the fittness of this individual % sol - the individual, returned to allow for Lamarckian evolution % options - [current_generation] load data2 nntwarn off XX=premnmx(XX); YY=premnmx(YY); P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 for i=1:S, x(i)=sol(i); end; [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);

BP神经网络matlab实例

BP神经网络及其MATLAB实例 问题:BP神经网络预测2020年某地区客运量和货运量 公路运量主要包括公路客运量和公路货运量两方面。某个地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,已知该地区20年(1999-2018)的公路运量相关数据如下: 人数/万人: 20.5522.4425.3727.1329.4530.1030.9634.0636.4238.09 39.1339.9941.9344.5947.3052.8955.7356.7659.1760.63机动车数量/万辆: 0.60.750.850.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1 公路面积/单位:万平方公里: 0.090.110.110.140.200.230.230.320.320.34 0.360.360.380.490.560.590.590.670.690.79 公路客运量/万人:5126621777309145104601138712353157501830419836 21024194902043322598251073344236836405484292743462公路货运量/万吨: 1237137913851399166317141834432281328936 11099112031052411115133201676218673207242080321804影响公路客运量和公路货运量主要的三个因素是:该地区的人数、机动车数量和公路面积。 Matlab代码实现 %人数(单位:万人) numberOfPeople=[20.5522.4425.3727.1329.4530.1030.9634.0636.42 38.0939.1339.9941.9344.5947.3052.8955.7356.7659.1760.63]; %机动车数(单位:万辆) numberOfAutomobile=[0.60.750.850.91.051.351.451.61.71.852.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1]; %公路面积(单位:万平方公里) roadArea=[0.090.110.110.140.200.230.230.320.320.340.360.360.38

Matlab神经网络30个案例第1案例代码

%% 清空环境变量 clc clear %% 训练数据预测数据提取及归一化 %下载四类语音信号 load data1 c1 load data2 c2 load data3 c3 load data4 c4 %四个特征信号矩阵合成一个矩阵 data(1:500,:)=c1(1:500,:); data(501:1000,:)=c2(1:500,:); data(1001:1500,:)=c3(1:500,:); data(1501:2000,:)=c4(1:500,:); %从1到2000间随机排序 k=rand(1,2000); [m,n]=sort(k); %输入输出数据 input=data(:,2:25); output1 =data(:,1); %把输出从1维变成4维 for i=1:2000 switch output1(i) case 1 output(i,:)=[1 0 0 0]; case 2 output(i,:)=[0 1 0 0]; case 3 output(i,:)=[0 0 1 0]; case 4 output(i,:)=[0 0 0 1]; end end %随机提取1500个样本为训练样本,500个样本为预测样本input_train=input(n(1:1500),:)'; output_train=output(n(1:1500),:)'; input_test=input(n(1501:2000),:)';

output_test=output(n(1501:2000),:)'; %输入数据归一化 [inputn,inputps]=mapminmax(input_train); %% 网络结构初始化 innum=24; midnum=25; outnum=4; %权值初始化 w1=rands(midnum,innum); b1=rands(midnum,1); w2=rands(midnum,outnum); b2=rands(outnum,1); w2_1=w2;w2_2=w2_1; w1_1=w1;w1_2=w1_1; b1_1=b1;b1_2=b1_1; b2_1=b2;b2_2=b2_1; %学习率 xite=0.1 alfa=0.01; %% 网络训练 for ii=1:10 E(ii)=0; for i=1:1:1500 %% 网络预测输出 x=inputn(:,i); % 隐含层输出 for j=1:1:midnum I(j)=inputn(:,i)'*w1(j,:)'+b1(j); Iout(j)=1/(1+exp(-I(j))); end % 输出层输出 yn=w2'*Iout'+b2; %% 权值阀值修正 %计算误差 e=output_train(:,i)-yn; E(ii)=E(ii)+sum(abs(e));

matlab神经网络实例(超级简单)

介绍神经网络算法在机械结构优化中的应用的例子 (大家要学习的时候只需要把输入输出变量更改为你自己的数据既可以了,如果看完了还有问题的话可以加我微博“极南师兄”给我留言,与大家共同进步)。 把一个结构的8个尺寸参数设计为变量,如上图所示, 对应的质量,温差,面积作为输出。用神经网络拟合变量与输出的数学模型,首相必须要有数据来源,这里我用复合中心设计法则构造设计点,根据规则,八个变量将构造出81个设计点。然后在ansys workbench中进行81次仿真(先在proe建模并设置变量,将模型导入wokbench中进行相应的设置,那么就会自动的完成81次仿真,将结果导出来exceel文件) Matlab程序如下 P= [20 2.5 6 14.9 16.5 6 14.9 16.5 15 2.5 6 14.9 16.5 6 14.9 16.5 25 2.5 6 14.9 16.5 6 14.9 16.5 20 1 6 14.9 16.5 6 14.9 16.5 20 4 6 14.9 16.5 6 14.9 16.5 20 2.5 2 14.9 16.5 6 14.9 16.5 20 2.5 10 14.9 16.5 6 14.9 16.5 20 2.5 6 10 16.5 6 14.9 16.5 20 2.5 6 19.8 16.5 6 14.9 16.5 20 2.5 6 14.9 10 6 14.9 16.5 20 2.5 6 14.9 23 6 14.9 16.5 20 2.5 6 14.9 16.5 2 14.9 16.5 20 2.5 6 14.9 16.5 10 14.9 16.5 20 2.5 6 14.9 16.5 6 10 16.5 20 2.5 6 14.9 16.5 6 19.8 16.5 20 2.5 6 14.9 16.5 6 14.9 10 20 2.5 6 14.9 16.5 6 14.9 23 17.51238947 1.75371684 4.009911573 12.46214168 13.26610631 4.009911573 12.46214168 19.73389369 22.48761053 1.75371684 4.009911573 12.46214168 13.26610631 4.009911573 12.46214168 13.26610631 17.51238947 3.24628316 4.009911573 12.46214168 13.26610631 4.009911573

相关文档
相关文档 最新文档