BP神经网络的Matlab语法.docx
- 文档编号:28690961
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:22
- 大小:31.79KB
BP神经网络的Matlab语法.docx
《BP神经网络的Matlab语法.docx》由会员分享,可在线阅读,更多相关《BP神经网络的Matlab语法.docx(22页珍藏版)》请在冰豆网上搜索。
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矩阵每一行的最小值,最大值
tn:
t矩阵按行归一化后的矩阵
mint,maxt:
t矩阵每一行的最小值,最大值
作用:
将矩阵p,t归一化到[-1,1],主要用于归一化处理训练数据集。
<2>tramnmx
语法:
[pn]=tramnmx(p,minp,maxp)
参数:
minp,maxp:
premnmx函数计算的矩阵的最小,最大值
pn:
归一化后的矩阵
作用:
主要用于归一化处理待分类的输入数据。
<3>postmnmx
语法:
[p,t]=postmnmx(pn,minp,maxp,tn,mint,maxt)
参数:
minp,maxp:
premnmx函数计算的p矩阵每行的最小值,最大值mint,maxt:
premnmx函数计算的t矩阵每行的最小值,最大值作用:
将矩阵pn,tn映射回归一化处理前的范围。
postmnmx函数主要用于将神经网络的输出结果映射回归一化前的数据范围。
2.使用Matlab实现神经网络
使用Matlab建立前馈神经网络主要会使用到下面3个函数:
newff:
前馈网络创建函数
train:
训练一个神经网络
sim:
使用网络进行仿真
下面简要介绍这3个函数的用法。
(1)newff函数
<1>newff函数语法
newff函数参数列表有很多的可选参数,具体可以参考Matlab的帮助文档,这里介绍newff函数的一种简单的形式。
语法:
net=newff(A,B,{C},‘trainFun')
参数:
A:
一个nX2的矩阵,第i行元素为输入信号xi的最小值和最大值;
B:
一个k维行向量,其元素为网络中各层节点数;
C:
一个k维字符串行向量,每一分量为对应层神经元的激活函数;trainFun:
为学习规则采用的训练算法。
表3.1BP网络的常用函数表
函数类型
函数名称
函数用途
前向网络创建函数
newcf
创建级联前向网络
Newff
创建前向BP网络
logsig
S型的对数函数
传递函数
tansig
S型的正切函数
purelin
纯线性函数
学习函数
learngd
基于梯度下降法的学习函数
learngdm
梯度下降动量学习函数
性能函数
mse
均方误差函数
msereg
均方误差规范化函数
显示函数
plotperf
绘制网络的性能
plotes
绘制一个单独神经元的误差曲面
plotep
绘制权值和阈值在误差曲面上的位置
errsurf
计算单个神经元的误差曲面
3.1.1BP网络创建函数
1)newff
该函数用于创建一个BP网络。
调用格式为:
net=newff
net=newff(PR[S1S2.SN1],{TF1TF2..TFN1},BTFBLF,PF)
其中,
net=newff;用于在对话框中创建一个BP网络。
net为创建的新BP神经网络;
PR为网络输入向量取值范围的矩阵;
[S1S2•-SNl]表示网络隐含层和输出层神经元的个数;
{TFITF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig';
BTF表示网络的训练函数,默认为’trainlm';
BLF表示网络的权值学习函数,默认为’learngdm';
PF表示性能数,默认为’mse'。
妇何初蛤化的,
nnt=initCnat]
曲们可认通11设定网堀巒裁rieL.inifcFon和net.l^erRhinitFcn這一技巧来初姑4t—个给定的阿貉。
net,initFcn的和始化函數「前馈阿络的磯苔值前
initlar^它允许同一层用单独的初姐北函敢・设定了net,诚tFom那么蔘数net.layHrHl.inttFan也要谡定用来决定每一层的初妬化函数.
对前诺朋得来從,有两神不同勺L始化方式些再幣用至」;initiihinitriTT.iiiitwiiIL国根据~后自己的初姑比善数(net.iriputWeirtits{i,j],initFcnJ初始■件杯重矩薛利偏直卩前懾网络的初始化权盍诵常谁为TBHds.它便权重在巧到1之闾随机取血这种方式登常用在转换谢數杲红匸苣数时.1出饷UT通會用于辂拗團数是曲线两救匚它根据陥uyen和叫肝”曲創HMJ]为层产生初始权至和偏武值,便得每层神经元的活动区域能丈致平坦的労市在输人空何・它比起单純的给相董和偏置陆机赋值有以下优点,
⑵有更快的训练速度(因为输入空间的野八区城都杷活动的神轻元范蛋中)* 初姑化朗数被血灌f所调用・因此兰岡络创建时.它很据缺省的李数自动初轴化・iciit不索要单独的凋用*可是我们可能耍重撕初始代权重和偏苣或晉曲亍自走义的初始代+例灿我们用nCWfffim的岡智它甥省用Eit护察初始化第一层.如果我们想宴用工皿血董祈U始化第一层的权重和雌,談怕用以下命母' nt匕Laycrs{l).iriitF>2n='init哑T; net.inDutWeiEhtefl,L].itiiif1an=*rands^, net.blares{Ij1],iiu*tFat=rands; nettiliees(2j11*InitFcn=*randc1. net—in.it(het)_ init>net.inltfen>net,1ayers(i}.initfen>net.inoiitweightsCi,j-rLnitfc n或者门已t*氏叩Ri・hts[ijj}.irjitfen或吉net^biasesfi.initfen 直中 net.initfon只能是initlay net,J.ayei'ElihiniiFen只能是irdtnw或者initwb net.inpu4: w已亍^上七^[i;j}.Lnittcn和net.1ayersz/eights.ijj.rands,mti-tzel*, midpointjrandnsrsndnr>initcoii)^ net.biases{! }.initFenrands,Intitzera? initcon <2>常用的激活函数 常用的激活函数有: a)线性函数(Lineartransferfunction)f(x)=x 该函数的字符串为’purelin。 b)对数S形转移函数(Logarithmicsigmoidtransferfunction) (0 c)双曲正切S形函数(Hyperbolictangentsigmoidtransferfunction) 卜)三1+宀[(丄V1) 也就是上面所提到的双极S形函数 该函数的字符串为’tansig。 ‘ Matlab的安装目录下的toolbox'nnet\nnet\nntransfer子目录中有所有 激活函数的定义说明。 <3>常见的训练函数 常见的训练函数有: traingd: 梯度下降BP训练函数(Gradientdescentbackpropagation) traingdx: 梯度下降自适应学习率训练函数 如果考虑增加动量项,可以使用两个训练函数: traingdm和traingdx traingdm有动量的梯度下降法,设置动量因子的命令如下: net.trainParam.mc=0.9(缺省值为0.9) traingdx有自适应lr的动量梯度下降法,设置动量因子的命令同traingdm 训练方法 训练国数 梯度下降法 trained 有动量的梯度下降法 tratngdm 自适应*梯度下降法 traingda 自适应⑹量梯度下降袪 tramgdx 弹性梯度下降法 trainrp Fietclier-Reeies共觇梯度法 traincgf Ploak-Ribiere共觇梯度法 traincgp PoweU'Beak共純梯度法 rraincgb 量化共辄梯度袪 traineeg 拟牛顿算法 trainbfs; 一步正割算法 trainoss Le\eiiberg-Marquardt trainkn <4>网络配置参数 一些重要的网络配置参数如下: net.trainparam.goal: 神经网络训练的目标误差 net.trainparam.show: 显示中间结果的周期 训练蟄数 卷数介绍 net・crainParim・epocha 最大训练次数(缺省为10) trainedtraingdin、train^da>trail net.TTalnParam・goal 训练要求 精度(缺 省为0) trainedtraingdm、train^da^trail net..trai: mParaja・Ir 学习率 (缺省为601) train吕traingdni、tram吕da、trail net.trainFarftin.ail 最大失败次数〔缺省为可 trained、trainprdiiRtrain^da^trail I)匕七txainParam,min7工0廿 最小梯度要求(缺 省为 10) traitigd.traingdm^traingda>traii net^tTaiEiParam.导how* 显示训练迭代过程 (KaN表 示不显示,缺省 为“) traingd^traingdm、train^datrail net.trainparam.epochsnet.trainParam.lr net.trainParam.max_fail net.trainParam.mc=0.9; : 最大迭代次数学习率 : 验证次数validation 动量因子 net.trainParam・time 最大训练时间(缺省为inf) traingdxtraingdm、traingda.trail net.trainParam・mu 动量因子 (缺 省0-9) net.trainParam・lr_inc 学习率k増长比(缺 省为L05) net.UEaAnParam・lr_dec 学习率k下降比(缺省为0.7) net.trainParam・maxperfinc 表现函数増加最大比(缺省为1.04) net.trainParana.delv_inc 权值变化増加量 (缺省 为1.2) net.crainParam・deLtdec 权值变化诚小量 (缺省 为0-5) net・crainParam・delt0 初始杈值变化(缺省为0.07) net.trainParam・deltamax 权值变化 最大值(缺省为50.0) net・trainParam・searchFcn —维线性 搜索方法 (缺省 为srchcha) nec.crainParam.sigma 因为二次求导对权值调整的影响参数 (缺省 值5.0e-5) net.lambda Hessiai^S阵不癒g性调节参数(缺省为5.0e-7) net.tr^inParam,irenredu匚 控制计算机内存漣度的参量,内存较大设为1,否则设为2(缺省为1) n上匸.匸rAinParam,mu 的初始值 〔缺省为0Q01) net.trainParam,mudec 的砌谭(缺省为0.1) 口上匸.rrainParam,mu_inc 的増长率緘省 为1Q) net■tr^inFaram.mumax 的最大值 〔缺省为210) ⑵train函数 网络训练学习函数。 语法: [net,tr,Y1,E]=train(net,X,Y) 参数: X: 网络实际输入 Y: 网络应有输出 tr: 训练跟踪信息 丫1: 网络实际输出 E: 误差矩阵 ⑶sim函数 语法: Y=sim(net,X) 参数: net: 网络 X: 输入给网络的KXN矩阵,其中K为网络输入个数,N为数据样本数 Y: 输出矩阵QXN,其中Q为网络输出个数 保存网络 如乐只是需更在工作目录下保到步前训练奸的网鉛,可以在命令窗口输入: savenet为己订练好的网络 然后在許令窗口 輸入: Luddnet为已保存的网路 加载neto 鱼一般找们都会在加較立甘对悶络迸厅逬一步的操诈,逢议都放在见文件中逬行保存网络和调甲网络的燥作 validationchecks是用来防止网络训练过适的,即是训练时网络的验证误差大于训练误差 的次数,默认值为6就是大于次数达到6次训练就会停止。 网络训练过适时,即使performanee还在减小网络性能也不会提高,反而会降低,因此要设定过适次数来提前训 练以保证网络性能。 %当前输入层权值和阈值 inputWeights=net」W{1,1} inputbias=net.b{1}%当前网络层权值和阈值 layerWeights=net.LW{2,1} layerbias=net.b{2}inputWeights=net」W{1,1} inputbias=net.b{1}%当前输入层权值和阀值 layerWeights=net.LW{2,1} layerbias=net.b{2} net.IW{1,1}; 输入层到第一层隐层的权值 net.b{1,1}; 输入层到第一层隐层的阈值 net.LW{2,1}; 第一层隐层到第二层隐层的权值 net.b{2,1}; 第一层隐层到第二层隐层的阈值 1.网络总体结构 网络总体结构包括以下属性: (I)numinputs: 该属性定义了神经网络的输入个数,属性值可以是0或正整数。 需要注意的是,该属性 定义了网络输入矢量的总个数,而不是单个输入矢量的维数。 ⑵numLayers: 该属性定义了神经网络的层数,其属性值可以是0或正整数。 ⑶biasConnect: 该属性定义了神经网络的每层是否具有阈值,其属性值为NX1维的布尔量矩阵,其 中N为网络的层数(net.numLayers)。 net.biasConnect(i)为1,表示第i层上的神经元具有阈值,为0则 表示该层没有阈值. ⑷inputConnect: 该属性定义了神经网络的输入层,其属性值为NXNi维的布尔量矩阵,其中N为网 络的层数,Ni为网络的输入个数(net.numlnputs)。 net.inputConnect(ij)为1,表示第i层上的每个神经元都要接收网络的第j个输入矢量,为0则表示不接收该输入。 (5)layerConnect: 该属性定义了网络各层的连接情况,其属性值为NXN维的布尔量矩阵,其中N为 网络的层数。 net.layerConnect(ij)为1,表示第i层与第j层上的神经元相连,为0则表示它们不相连。 (6)outputConnect: 该属性定义了神经网络的输出层,其属性值为1XN维的布尔量矩阵,其中N为网 络的层数。 net.outputConnect(i)为1,表示第i层神经元将产生网络的输出,为0则表示该层不产生输岀。 (7)targetConnect: 该属性定义了神经网络的目标层,即网络哪些层的输出具有目标矢量。 其属性值为 1XN维的布尔量矩阵,其中N为网络的层数。 net.targetConnect(i)为1,表示第i层神经元产生的输出 具有目标矢量,为0则表示该层输出不具有目标矢量。 (8)numOutputs: 该属性定义了神经网络输出矢量的个数,属性值为只读变量,其数值为网络中输出层的总数(sum(net.outputConnect))。 (9)numTargets: 该属性定义了网络目标矢量的个数,属性值为只读变量,其数值为网络中目标层的总数(sum(net.targetConnect))。 (10)numlnputDelays: 该属性定义了神经网络的输入延迟,属性值为只读变量,其数值为网络各输入层 输入延迟拍数(net.inputWeights{i,j}.delays)中的最大值。 (II)numLayerDelays: 该属性定义了神经网络的层输出延迟,属性值为只读变量,其数值为各层的神经 元之间连接延迟拍数(net.layerWeights{i,j}.delays)中的最大值。 2•子对象结构子对象结构包括以下属性: (1)inputs: 该属性定义了神经网络每个输入的属性,其属性值为NiX1维的单元数组,其中Ni为网络 输入的个数。 (2)layers: 该属性定义了神经网络每层神经元的属性,其属性值为NX1维的单元数组,其中N为网络 的层数。 ⑶outputs: 该属性定义了神经网络每个输出的属性,其属性值为NX1维的单元数组,其中N为网络 的层数。 ⑷targets: 该属性定义了每层神经网络目标矢量的属性,其属性值为NX1维的单元数组,其中N为 网络的层数。 (5)biases: 该属性定义了每层神经网络阈值的属性,其属性值为NX1维的单元数组,其中N为网络 (6)inputweights: 该属性定义了神经网络每组输入权值的属性,其属性值为NXNi维的单元数组,其中 N为网络的层数,Ni为网络的输入个数。 ⑺layerWeights: 该属性包括了神经网络各层神经元之间网络权值的属性,其属性值为NXN维的单元 数组,其中N为网络的层数。 3•函数神经网络对象的函数包括以下属性: (1)adaptFcn: 该属性定义了网络的自适应调整函数,其属性值为表示自适应函数名称的字符串。 (2)initFcn: 该属性定义了网络的初始化函数,其属性值为表示网络初始化函数名称的字符串。 ⑶performFcn: 该属性定义了衡量网络输岀误差的性能函数,其属性值为表示性能函数名称的字符串。 ⑷trainFcn: 该属性定义了网络的训练函数,其属性值为表示训练函数名称的字符串。 4•函数参数神经网络对象的函数参数包括以下属性: (1)adaptParam: 该属性定义了网络当前自适应函数的各参数,其属性值为各参数构成的结构体。 (2)initParam: 该属性定义了网络当前初始化函数的各参数,其属性值为各参数构成的结构体。 ⑶performParam: 该属性定义了网络当前性能函数的各参数,其属性值为各参数构成的结构体。 ⑷trainParam: 该属性定义了网络当前训练函数的各参数,其属性值为各参数构成的结构体。 5.权值和阈值 神经网络对象的权值和阈值包括以下属性: (1)IW: 该属性定义了网络输入和各输入层神经元之间的网络权值,属性值为NXNi维的单元数组,其中, N为网络的层数,Ni为网络的输入个数。 如果net.inputConnect(ij)为1,即第i层上的各神经元接收网 络的第j个输入,那么在单元net」W{i,j}中将存储它们之间的网络权值矩阵,该矩阵的行数为第i层神经 元的个数(net.layers{i}.size),列数为第j个输入的维数(net.inputs{j}.size)与输入延迟拍数(net.inputWeights{i,j}.delays)的乘积。 ⑵LW: 该属性定义了各层神经元之间的网络权值,其属性值为NXN维的单元数组,其中N为网络的 层数。 如果net.layerConnect(ij)为1,即第i层与第j层上的神经元相连,那么在单元net.LW{i,j}中将 存储它们之间的网络权值矩阵,该矩阵的行数为第i层上神经元的个数(net.layers{i}.size),列数为第j层 神经元的个数(net.layers{j}.size)与层输入延迟拍数(net.layerWeights{i,j}.delays)的乘积。 ⑶b: 该属性定义了各层神经元的阈值,其属性值为1XN维的单元数组,其中N为网络的层数。 如果 net.biasConnect(i)为1,即第i层的神经元具有阈值,那么单元net.b{i}中将存储该层的阈值矢量,矢量 维数和第i层
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BP 神经网络 Matlab 语法