Matlab工具箱中的BP与RBF函数Matlab神经网络工具箱中的函数非常丰富,给网络设置合适的属性,可以加快网络的学习速度,缩短网络的学习进程。限于篇幅,仅对本章所用到的函数进行介绍,其它的函数及其用法请读者参考联机文档和帮助。1BP与RBF网络创建函数在Matlab工具箱中有如表1所示的创建网络的函数,作为示例,这里只介绍函数newff、newcf、newrb和newrbe。表1神经网络创建函数函数名含义newcf创建一个前向层叠(cascade-forward)BP网络newff创建一个前馈(feed-forward)BP网络newrb设计一个径向基网络newrbe设计一个精密径向基网络(1)newff函数功能:创建一个前馈BP神经网络。调用格式:net=newff(PR,[S1S2...SNl],{TF1TF2...TFNl},BTF,BLF,PF)参数说明:PR-R个输入的最小、最大值构成的R×2矩阵;Si–SNI层网络第i层的神经元个数;TFi-第i层的传递函数,可以是任意可导函数,默认为'tansig',可设置为logsig,purelin等;BTF-反向传播网络训练函数,默认为'trainlm',可设置为trainbfg,trainrp,traingd等;BLF-反向传播权值、阈值学习函数,默认为'learngdm';PF-功能函数,默认为'mse';(2)newcf函数功能:创建一个N层的层叠(cascade)BP网络调用格式:net=newcf(Pr,[S1S2...SNl],{TF1TF2...TFNl},BTF,BLF,PF)参数同函数newff。(3)newrb函数功能:创建一个径向基神经网络。径向基网络可以用来对一个函数进行逼近。newrb函数用来创建一个径向基网络,它可以是两参数网络,也可以是四参数网络。在网络的隐层添加神经元,直到网络满足指定的均方误差要求。调用格式:net=newrb(P,T,GOAL,SPREAD)参数说明:P:Q个输入向量构成的R×Q矩阵;T:Q个期望输出向量构成的S×Q矩阵;GOAL:均方误差要求,默认为0。SPREAD:分散度参数,默认值为1。SPREAD越大,网络逼近的函数越平滑,但SPREAD取值过大将导致在逼近变化比较剧烈的函数时神经元过多,若SPREAD取值过小,则导致在逼近平滑函数时,导致神经元过多。(4)newrbe函数功能:创建一个精密径向基网络。newrbe函数可以很快地根据设计向量创建一个0误差的径向基网络。调用格式:Net=Newrbe(P,T,SPREAD)参数说明:参数P,T和SPREAD同newrb函数中的参数P,T和SPREAD含义相同。2网络训练函数(1)Adapt函数功能:神经网络单步训练函数。调用格式:[net,Y,E,Pf,Af]=adapt(net,P,T,Pi,Ai)参数说明:Adapt函数调用由net.adaptFcn所指定的函数和net.adaptParam所指定的参数来训练网络。在执行命令Adapt之前,可以预先指定训练函数net.adaptFcn和训练参数net.adaptParam。输入参数:net–所要训练的网络;P-网络的输入;T-网络的期望输出,可选项,只在有教师训练时需要,一般不用,默认值为0;Pi–初始输入延迟,可选项,只在有输入延迟时需要,一般不用,默认值为0;Ai–初始层延迟,可选项,只在有层延迟时需要,默认值为0;输出参数:NET–训练后的网络;Y-网络输出;E-网络误差;Pf-训练后的输入延迟,一般不用.;Af-训练后的层延迟,一般不用。ADAPT的参数有两种格式:阵列格式和矩阵格式。阵列格式易于描述,最适合于多输入多输出网络。当ADAPT的参数为阵列格式时:P-Ni×TS阵列,阵列的每个元素P{i,ts}是一个Ri×Q的矩阵;T-Nt×TS阵列,阵列的每个元素P{i,ts}是一个Vi×Q的矩阵;Pi-Ni×ID阵列,阵列的每个元素{i,k}是一个Ri×Q的矩阵;Ai-Nl×LD阵列,阵列的每个元素{i,k}是一个Si×Q的矩阵;其中:Ni=net.numInputsNl=net.numLayersNt=net.numTargetsID=net.numInputDelaysLD=net.numLayerDelaysTS=NumberoftimestepsQ=BatchsizeRi=net.inputs{i}.sizeSi=net.layers{i}.sizeVi=net.targets{i}.size矩阵格式最适合于单输入单输出网络,但也可以用于多输入多输出网络。每个矩阵元素通过把相应阵列参数元素存储到一个单一的矩阵来寻找。当ADAPT的参数为矩阵格式时:P-(sumofRi)×QmatrixT-(sumofVi)×QmatrixPi-(sumofRi)×(ID*Q)matrixAi-(sumofSi)×LD*Q)matrix其中Pi,Ai,Pf和Af的列为最初的延迟条件到最近的延迟条件。Pi{i,k}为时刻ts=k-ID的输入i;Pf{i,k}为时刻ts=TS+k-ID的输入i;Ai{i,k}为时刻ts=k-LD的层输出i;Af{i,k}为时刻ts=TS+k-LD的层输出i。(2)adaptwb函数功能:网络权值和偏置单步训练函数调用格式:[net,Ac,El]=adaptwb(net,Pd,T,Ai,Q,TS)info=adaptwb(code)说明:adaptwb函数根据网络的学习函数(net.learnFcn)对网络的权值和偏置进行单步训练。输入参数:net所要训练的神经网络;Pd延迟输入,是一个No×Ni×TS阵列,元素P{i,j,ts}是一个Zij×Q矩阵;Tl各层的期望输出,Nl×TS阵列,元素P{i,ts}是一个Vi×Q矩阵或空矩阵;Ai初始输入条件,Nl×LD阵列,元素Ai{i,k}是一个Si×Q矩阵;Q输入向量的个数TS步长输出参数:net更新后的网络Ac总的层输出,Nl×(LD+TS)阵列,元素El{i,k}是一个Si×Q矩阵或空矩阵。El该层的误差其中参数Ni、Nl、LD、Ri、Si和Vi同adapt函数中的参数Ni、Nl、LD、Ri、Si和Vi相同。Zij=Ri*length(net.inputWeights{i,j}.delays)adaptwb(code)函数根据code返回有用的信息,code可以取为‘pnames’训练参数的名称‘pdefaults’缺省的训练参数如果要使一个网络使用adaptwb函数进行网络训练,需要作如下设置:设置net.adaptFcn为adaptwb(net.adaptParam将自动设为adaptwb的缺省值);设置第i层各偏置的学习函数(net.biases{i}.learnFcn)和各权值的学习函数(net.inputWeights{i,j}.learnFcn和net.layerWeights{i,j}.learnFcn)为各自的期望学习函数;(3)train函数功能:神经网络学习函数。调用格式:[net,tr]=train(net,P,T,Pi,Ai)[net,tr]=train(net,P,T,Pi,Ai,VV,TV)说明:train函数根据net.trainFcn和net.trainParam训练网络net。输入参数:train函数的输入参数同adapt函数的输入参数相同。输出参数:net–返回网络;tr–网络训练步数和性能;Train函数的信号参数可以有两种格式:阵列或矩阵,输入参数的阵列格式和矩阵格式同adapt函数相同。Train函数的第二种调用格式[net,tr]=train(NET,P,T,Pi,Ai,VV,TV)与其第一种格式的区别在于:第二种调用格式在训练完网络过程中进行网络测试,确认向量用来尽早终止训练,以免过训练损害网络的普遍性,而第一种调用格式在训练过程中不进行这种测试。如果VV.Pi、VV.Ai设为空矩阵或空阵列,将使用起默认值。其中VV.P,TV.P为给定/测试输入,VV.T,TV.T为给定/测试输入的期望输出,默认值为0;VV.Pi,TV.Pi为给定/测试初始输入延迟条件,默认值为0;VV.Ai,TV.Ai为给定/测试层延迟条件,默认值为0;(4)trainwb函数功能:网络权值/偏置训练函数调用格式:[net,tr]=trainwb(net,Pd,Tl,Ai,Q,TS,VV)info=trainwb(code)说明:输入参数:Pd延迟输入,No×Ni×TS阵列,元素P{i,j,ts}是一个Dij×Q矩阵,其中Dij=Ri*length(net.inputWeights{i,j}.delays)VV变量向量结构体或空矩阵其它参数同adaptwb函数中相应的参数相同。输出参数:net训练后的网络tr每一步中各个值的训练记录,它有四个参量,tr.epoch为训练次数,tr.perf为训练性能,tr.vperf为验证性能,tr.tperf为测试性能。同adaptwb函数一样,若要设计一个用trainwb函数进行训练的网络,需要对网络作一些设置,设置的参数与设置方法同adaptwb相同。3网络初始化函数(1)init函数功能:网络初始化函数。调用格式:init(net)说明:根据由net.initFcn说明的网络初始化函数和net.initParam说明的参数值重新初始化网络的权值和阈值。示例:net=newp([01;-22],1);%创建一个感知器神经网络;net.iw{1,1}%显示网络的输入权值,其结果为ans=00P=[0101;0011];%网络的输入矩阵T=[0001];%网络的输出矩阵net=train(net,P,T);%对网络进行训练net.iw{1,1}%显示训练后网络的输入权值,其结果为ans=11net=init(net);%重新初始化网络net.iw{1,1}%显示重新初始化后网络的输入权值,其结果为ans=00(2)initlay函数功能:网络层初始化函数。调用格式:net=initlay(net)info=initlay(code)说明:第一种调用格式根据网络各层的初始化函数net.layers{i}.initFcn对网络相应层进行初始化,其中i为初始化层的序号;第二种调用格式根据code指定的代码返回一些有用的信息,其中code可以取‘pnames’初始化参数的名称‘pdefaults’缺省的初始化参数(3)initwb函数功能:神经网络某一层的权值和偏置的初始化函数调用格式:net=initwb(net,i)说明:initwb函数只对网络中的第i层的权值和偏置进行初始化。(4)initzero函数功能:将权值/偏置初始化为0的函数。调用格式:W=initzero(S,PR)B=initzero(S,[11])说明:initzero(S,PR)函数将网络的权值矩阵初始化为0矩阵;B=initzero(S,[11])将网络的偏置初始化为0,它返回一个0偏置向量。其中S为神经元个数,PR为输入向量的范围。4网络学习函数Matlab工具箱中的学习函数用于网络的设置,以配合adapt函数和train函数对网络进行训练,一般不单独调用。(1)Learnp函数功能:感知器权值和偏置值学习函数。调用格式:[dW,LS]=learnp(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)[db,LS]=learnp(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)info=learnp(code)参数说明:输入参数W-S×R权值矩阵(或S×1偏置向量);P-R×Q输入向量;Z-S×Q加权输入向量;N-S×Q网络输入向量;A-S×Q输出向量;T-S×Ql层期望向量;E-S×Q层误差向量;gW-S×R关于性能的梯度;gA-S×Q关于性能的输出梯度;.D-S×S节点距离;LP–