您好,欢迎访问三七文档
matlab中的归一化处理有三种方法1.premnmx、postmnmx、tramnmx2.restd、poststd、trastd3.自己编程如下:x=[68.766.6561019.2;89.990.8450011.8;120.8120.6680020.6;16940.4616040.6;180.869.8733033.4;190.3130.2732031.6;109.8151.1575486.1;33.261.4825522.6;111.7126.6704013.6;]t=x'fori=1:4t1(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)))endpremnmx语句的语法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)其中P,T分别为原始输入和输出数据,minp和maxp分别为P中的最小值和最大值。mint和maxt分别为T的最小值和最大值。premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。我们在训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tramnmx。下面介绍tramnmx函数:[Pn]=tramnmx(P,minp,maxp)其中P和Pn分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。找到比较好的结果后,用命令savefilenamenet;保存网络,可使预测的结果不会变化,调用时用命令loadfilenamenet;神经网络工具箱包含在nnet目录中,键入helpnnet可得到帮助主题。显示向导要讨论的神经网络例子和应用代码可以通过键入helpnndemos找到。安装神经网络工具箱的指令可以在下列两份MATLAB文档中找到:theInstallationGuideforMS-WindowsandMacintosh或者theInstallationGuideforUNIX。n=-5:0.1:5;plot(n,hardlim(n),'c+:');它产生一张在-5到5之间的阶跃函数图。当网络中存在延迟时,顺序发生的输入向量就要按一定的序列输入网络。常用的前馈型BP网络的转移函数有logsig,tansig,有时也会用到线性函数purelin。tansig、logsig和purelin都有对应的导函数dtansig、dlogsig和dpurelin。在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令init来实现。这个函数接收网络对象并初始化权重和偏置后返回网络对象。下面就是网络如何初始化的:net=init(net);我们可以通过设定网络参数net.initFcn和net.layer{i}.initFcn这一技巧来初始化一个给定的网络。net.initFcn用来决定整个网络的初始化函数。前馈网络的缺省值为initlay,它允许每一层用单独的初始化函数。设定了net.initFcn,那么参数net.layer{i}.initFcn也要设定用来决定每一层的初始化函数。对前馈网络来说,有两种不同的初始化方式经常被用到:initwb和initnw。initwb函数根据每一层自己的初始化参数(net.inputWeights{i,j}.initFcn)初始化权重矩阵和偏置。前馈网络的初始化权重通常设为rands,它使权重在-1到1之间随机取值。这种方式经常用在转换函数是线性函数时。initnw通常用于转换函数是曲线函数。它根据Nguyen和Widrow[NgWi90]为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。。如果我们想要用rands重新初始化第一层的权重和偏置,我们用以下命令:net.layers{1}.initFcn='initwb';net.inputWeights{1,1}.initFcn='rands';net.biases{1,1}.initFcn='rands';net.biases{2,1}.initFcn='rands';net=init(net);BP网络是一种多层前馈神经网络,因采用误差反向传播的学习算法而得名。Matlab编程实现的BP网络程序(不含动量因子)如下所示。Whileand(ErrAllErrStd,epochMAXTIMES)forp=1:P%取样本xt=[xteach1(p);xteach2(p)];yt=yteach(p);%计算各层输出:前向传播oi=xt;netj=wij’*oi;oj=11/(1+exp(-(netj-thetaj)));netk=wjk’*oj;ok=11/(1+exp(-(netk-thetak)));deltak=(yt-y)1*ok1*(1-ok);deltaj=wjk*deltak1*oj1*(1-oj);%修正权值和阈值wij=wij+eta*oi*deltaj’;thetaj=thetaj-eta*deltaj;wjk=wjk+eta*oj*deltak’;thetak=thetak-eta*deltak;%保存当前样本的误差errp(p)=sum((yt-y)1^2)/2;endErrAll=sum(errp);Eall(epoch)=ErrAll;End输入层神经元的个数决定IW的行数,输入向量元素的个数决定IW的列数,即S1行R列感知器神经网络函数:初始化:initp训练:trainp仿真:simup学习规则:learnp线性神经网络函数:初始化:initlin设计:solvelin仿真:simulin离线训练:trainwh在线自适应训练:adaptwh学习规则:learnwhBP网络函数:initff:初始化不超过3层的前向网络;simuff:仿真不超过3层的前向网络;trainbp,trainbpx,trainlm:训练BPtrainbp:最慢;trainbpx:次之;trainlm:速度最快,但需要更多的存储空间。learnbp:学习规则自组织网络初始化:initsm仿真:simuc训练:trainc:利用竞争规则训练trainsm:利用Kohonen规则训练反馈网络(Hopfield网络)仿真:simuhop设计:solvehopsolvehop设计Hopfield网络solvelin设计线性网络rands产生对称随机数learnbp反向传播学习规则learnhHebb学习规则learnp感知层学习规则learnwhWidrow-Hoff学习规则initlin线性层初始化initp感知层初始化initsm自组织映射初始化plotsm绘制自组织映射图trainbp利用反向传播训练前向网络trainp利用感知规则训练感知层trainwh利用Widrow-Hoff规则训练线性层trainsm利用Kohonen规则训练自组织映射归一化处理(把每组数据都变为-1~+1之间数)、标准化处理(把每组数据都化为均值为0、方差为1的一组数据)和主成分分析(进行正交处理,减少输入数据的维数).BP网络的算法描述(1)对每一层的权值Wij初始化.网络的权值一般在[0,1]之间取值.(2)对输入数据的预处理,提供训练样本以及目标输出.输入训练样本:X=(X1,X2,…Xn,1)期望输出:Y=(Y1,Y2,…Yn)(3)计算各层的输出.对于第k层第i个神经元的输出Xik有:Uik=Σn+1j=1WijXjk-1,Xn+1k-1=1,Wi,n+1=-θ,Xik=f(Uik)(4)求各层的学习误差dik.对于输出层有k=m,有:dim=Xim(1-Xim)(Xim-Yi),对于其他各层,有dik=Xik(1-Xik)ΣiWijdik+1.(5)修正权系数Wij和阀值θ.Wij(t+1)=Wij(t)-η.dik.Xjk-1,η为学习速率.(6)当求出了各层各个权系数之后,可按给定品质指标判别是否满足要求.如果满足要求,则算法结束;如果未满足要求,则返回(3)执行.关键代码.net=newff(minmax(p),[20,1],{t'ansig'p'urelin}',t'rainlm)';%建立相应的BP网络y1=sim(ne,tp);%对没有训练的网络进行仿真ne.ttrainParam.epochs=1000;ne.ttrainParam.goal=0.0001;%训练网络,设定训练时间为1000个单位时间,训练目标的误差小于0.0001net=train(ne,tp,t);%对训练后的网络进行仿真神经网络建模程序如下:Input’p=’;Input’t=’;%神经网络训练输入、输出矩阵[pn,meanp,stdp,tn,meant,stdt]=prestd(p,t);%神经网络输入、输出数据归一化处理net=newff(minmax(pn),[4101],{′logsig′′logsig′′purelin′},′trainlm′);%建立一个三层BP网络net.trainparam.show=25;net.trainparam.e-pochs=300;net.trainparam.goal=1e-10;%设置训练参数[net,tr,epochs]=train(net,pn,t);%神经网络训练a=sim(net,pn);%装载训练结果[m,b,r]=postreg(a,t);%线性回归分析save(′result′,′net′);%保存网络结果基本的批处理训练函数train():net=newff(PR,[S1S2...SN1],{TF1FT2...TFN1},BTF,BLF,PF)[net,tr,Y,E,Pf,Af,]=train(NET,P,T,Pi,Ai,VV,TV)靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。在确定隐层节点数时必须满足下列条件(1)隐层节点数必须小于N-1(其中N为训练样本数),否则,网络模型的系统误差与训练样本的特性无关而趋于零,即建立的网络模型没有泛化能力,也没有任何实用价值。同理可推得:输入层的节点数(变量数)必须小于N-1。(2)训练样本数必须多于网络模型的连接权数,一般为2~10倍,否则,样本必须分成几部分并采用“轮流训练”的方法才可能得到可靠的神经网络模型。BP算法中有几个常用的参数,包括学习率η,动量因子α,形状因子λ及收敛误差界值E等。
本文标题:神经网络笔记
链接地址:https://www.777doc.com/doc-4224105 .html