当前位置:文档之家› 用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=[-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)

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

人口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 2012 2013 2014 2015 全国总人口134668 135478 136325 137185 138036 年份2016 2017 2018 2019 2020 全国总人口138862 139652 140402 141106 141760

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'},'tr

aingd');

net.trainParam.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-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 来演示批处理最速下降法的性

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 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 工具主

就能很方便地打开所建立的神经网络的结构图进行察看,也可以看到一个训练过程的 偏差曲线变化图. 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

络模型导入到神经网络预测控制模块中, 在 NN Predictive Controller 窗口中单击 O K 按钮,将控制器参数导入到 N N Predictive Controller 模块中.

图 3

predwq.mdl 仿真文件

图 4

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

系统模块 S ystem 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.00

5

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 为扩展名,所以称MEX 文件。MEX 实际是由MATLAB 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:如果filename 文件存在,则加载filename 文件中存储的所有

变量到工作空间;否则返回一错误信息。

(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为横坐标绘制出多条不同色彩的曲线,曲

精彩文档

(完整版)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

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编程)

神经网络的设计实例(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);

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实例

神经网络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实现

bp神经网络及matlab实现 分类:算法学习2012-06-20 20:56 66399人阅读评论(28) 收藏举报网络matlab算法functionnetworkinput 本文主要内容包括:(1) 介绍神经网络基本原理,(2) https://www.doczj.com/doc/169275342.html,实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法。 第0节、引例 本文以Fisher的Iris数据集作为神经网络程序的测试数据集。Iris数据集可以在https://www.doczj.com/doc/169275342.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神经网络实例(超级简单)

介绍神经网络算法在机械结构优化中的应用的例子 (大家要学习的时候只需要把输入输出变量更改为你自己的数据既可以了,如果看完了还有问题的话可以加我微博“极南师兄”给我留言,与大家共同进步)。 把一个结构的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

基于MATLAB 的神经网络的仿真

智能控制 基于MATLAB 的神经网络的仿真 学院:机电工程学院 姓名:白思明 学号:2011301310111 年级:自研-11 学科:检测技术与自动化装置 日期:2012-4-3

一.引言 人工神经网络以其具有信息的分布存储、并行处理以及自学习能力等优点, 已经在模式识别、 信号处理、智能控制及系统建模等领域得到越来越广泛的应用。MATLAB中的神经网络工具箱是以人工神经网络理论为基础, 利用MATLAB 语言构造出许多典型神经网络的传递函数、网络权值修正规则和网络训练方法,网络的设计者可根据自己的需要调用工具箱中有关神经网络的设计与训练的程序, 免去了繁琐的编程过程。 二.神经网络工具箱函数 最新版的MATLAB 神经网络工具箱为Version4.0.3, 它几乎涵盖了所有的神经网络的基本常用类型,对各种网络模型又提供了各种学习算法,我们可以根据自己的需要调用工具箱中的有关设计与训练函数,很方便地进行神经网络的设计和仿真。目前神经网络工具箱提供的神经网络模型主要用于: 1.数逼近和模型拟合; 2.信息处理和预测; 3.神经网络控制; 4.故障诊断。 神经网络工具箱提供了丰富的工具函数,其中有针对某一种网络的,也有通用的,下面列表中给出了一些比较重要的工具箱函数。 三.仿真实例 BP 网络是一种多层前馈神经网络,由输入层、隐层和输出层组成。BP 网络模型结构见图1。网络同层节点没有任何连接,隐层节点可以由一个或多个。网络的学习过程由正向和反向传播两部分组成。在正向传播中,输入信号从输入层节点经隐层节点逐层传向输出层节点。每一层神经元的状态只影响到下一层神经元网络,如输出层不能得到期望的输出,那么转入误差反向传播过程,将误差信号沿原来的连接通路返回,通过修改各层神经元的权值,逐次地向输入层传播去进行计算,在经正向传播过程,这两个过程反复运用,使得误差信号最小或达到人们所期望的要求时,学习过程结束。

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;2928 34972261;... 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], {TF1TF2TF3},'traingdx'); %网络创建traingdm net.trainParam.show=50; net.trainParam.epochs=50000;%训练次数设置 net.trainParam.goal=1e-5;%训练所要达到的精度

BP神经网络的Matlab语法介绍

1. 数据预处理 在训练神经网络前一般需要对数据进行预处理,一种重要的预处理手段是归一化处理。下面简要介绍归一化处理的原理与方法。 (1) 什么是归一化? 数据归一化,就是将数据映射到[0,1]或[-1,1]区间或更小的区间,比如 (0.1,0.9) 。 (2) 为什么要归一化处理? <1>输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。 <2>数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。 <3>由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。例如神经网络的输出层若采用S形激活函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。 <4>S形激活函数在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。 (3) 归一化算法 一种简单而快速的归一化算法是线性转换算法。线性转换算法常见有两种形式: <1> y = ( x - min )/( max - min ) 其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y 。上式将数据归一化到[ 0 , 1 ]区间,当激活函数采用S形函数时(值域为(0,1))时这条式子适用。 <2> y = 2 * ( x - min ) / ( max - min ) - 1 这条公式将数据归一化到[ -1 , 1 ] 区间。当激活函数采用双极S形函数(值域为(-1,1))时这条式子适用。 (4) Matlab数据归一化处理函数 Matlab中归一化处理数据可以采用premnmx ,postmnmx ,tramnmx 这3个函数。 <1> premnmx 语法:[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t) 参数: pn:p矩阵按行归一化后的矩阵 minp,maxp:p矩阵每一行的最小值,最大值

神经网络matlab实现实例

神经网络matlab实现实例 clear all clc %原始数据输入 p=[1000 1200 1300;1200 1300 1500;1300 1500 1800;1500 1800 1900 ;1800 1900 2000 ;1900 2000 2200 ;]'; %期望输出 t=[1500 1800 1900 2000 2200 2300 ]; ptest=[1000 1200 1300;1200 1300 1500;1300 1500 1800;1500 1800 1900 ;1800 1900 2000 ;1900 2000 2200 ;2000 2200 2300;]'; [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],{TF1,TF2,TF3},'train gdx'); %网络创建traingdm net.trainParam.show=50; net.trainParam.epochs=50000; %训练次数设置 net.trainParam.goal=1e-5; %训练所要达到的精度 net.trainParam.lr=0.01; %学习速率 net=train(net,pn,tn); p2n=tramnmx(ptest,minp,maxp); %测试数据的归一化 an=sim(net,p2n); [a]=postmnmx(an,mint,maxt) %数据的反归一化,即最终想要得到的预测结果 plot(1:length(t),t,'o',1:length(t)+1,a,'+'); title('o表示预测值---*表示实际值') grid on m=length(a); %向量a的长度 t1=[t,a(m)]; error=t1-a; %误差向量 figure plot(1:length(error),error,'-.') title('误差变化图') grid on

使用MATLAB遗传算法工具实例(详细)

第八章使用MATLAB遗传算法工具 最新发布的MATLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。 本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。 8.1 遗传算法与直接搜索工具箱概述 本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。 8.1.1 工具箱的特点 GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。 使用语句 type function_name 就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。 工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。 遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。 遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。 8.1.1.1 功能特点 遗传算法与直接搜索工具箱的功能特点如下: (1)图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。 (2)具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。 (3)直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表 决方法和搜索方法。 (4)遗传算法与直接搜索工具箱函数可与MATLAB的优化工具箱或其他的 MATLAB程序结合使用。 (5)支持自动的M代码生成。 8.1.1.2 图形用户界面和命令行函数

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

用遗传算法优化BP神经网络的M a t l a b编程实例 由于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],'nonUnifMuta tion',[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=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); 程序三:编解码函数 function [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x) load data2

Matlab中各种神经网络的使用示例

Matlab中各种神经网络的使用示例 %通用BP神经网络 (1) %通用径向基函数网络 (2) %广义回归神经网络 (4) %通用感应器神经网络 (6) %通用BP神经网络 P=[-1 -1 2 2;0 5 0 5]; t=[-1 -1 1 1]; net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd'); %输入参数依次为:'样本P范围',[各层神经元数目],{各层传递函数},'训练函数' %训练函数traingd--梯度下降法,有7个训练参数. %训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9) %训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:lr_inc(学习率增长比,缺省为1.05; % lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04) %训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda 的4个附加参数 %训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数: % delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5); % delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0) % 适合大型网络 %训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法; %训练函数traincgb--Powell-Beale共轭梯度法 %共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr %训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络 % 附加2个训练参数:sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5); % lambda(Hessian阵不确定性调节参数,缺省为5.0e-7) % 缺少1个训练参数:lr %训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络 %训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同 %训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络 net=init(net);

相关主题
文本预览
相关文档 最新文档