BP神经网络初始化.doc_第1页
BP神经网络初始化.doc_第2页
BP神经网络初始化.doc_第3页
BP神经网络初始化.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Matlab中BP神经网络的构建和初始化Matlab中BP神经网络的构建和初始化训练前馈网络的第一步是建立网络对象。函数newff建立一个可训练的前馈网络。这需要4个输入参数。第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。第二个参数是一个网络每层神经元个数的数组。第三个参数是包含每层用到的转移函数名称的细胞数组。最后一个参数是用到的训练函数的名称。举个例子下面命令将创建一个二层网络。它的输入是两个元素的向量,第一层有三个神经元,第二层有一个神经元。第一层的转移函数是tan-sigmoid,输出层的转移函数是linear。输入向量的第一个元素的范围是-1到2,输入向量的第二个元素的范围是0到5,训练函数是traingd。 net=newff(-1 2; 0 5,3,1,tansig,purelin,traingd); 这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。我们可能要多次重新初始化权重或者进行自定义的初始化。下面就是初始化的详细步骤。 在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令init来实现。这个函数接收网络对象并初始化权重和偏置后返回网络对象。下面就是网络如何初始化的: net = init(net); 我们可以通过设定网络参数net.initFcn和net.layeri.initFcn这一技巧来初始化一个给定的网络。net.initFcn用来决定整个网络的初始化函数。前馈网络的缺省值为initlay,它允许每一层用单独的初始化函数。设定了net.initFcn,那么参数net.layeri.initFcn 也要设定用来决定每一层的初始化函数。 对前馈网络来说,有两种不同的初始化方式经常被用到:initwb和initnw。initwb函数根据每一层自己的初始化参数(net.inputWeightsi,j.initFcn)初始化权重矩阵和偏置。前馈网络的初始化权重通常设为rands,它使权重在-1到1之间随机取值。这种方式经常用在转换函数是线性函数时。initnw通常用于转换函数是曲线函数。它根据Nguyen和WidrowNgWi90为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。它比起单纯的给权重和偏置随机赋值有以下优点:(1)减少神经元的浪费(因为所有神经元的活动区域都在输入空间内)。(2)有更快的训练速度(因为输入空间的每个区域都在活动的神经元范围中)。 初始化函数被newff所调用。因此当网络创建时,它根据缺省的参数自动初始化。init不需要单独的调用。可是我们可能要重新初始化权重和偏置或者进行自定义的初始化。例如,我们用newff创建的网络,它缺省用initnw来初始化第一层。如果我们想要用rands重新初始化第一层的权重和偏置,我们用以下命令: net.layers1.initFcn = initwb; net.inputWeights1,1.initFcn = rands; net.biases1,1.initFcn = rands; net.biases2,1.initFcn = rands; net = init(net);%导入处理数据 load cmgatys; p = p; t = t; pn,minp,maxp,tn,mint,maxt = premnmx(p,t); ptrans,transMat = prepca(pn,0.001) R,Q = size(ptrans) iitst = 2:4:Q; iival = 4:4:Q; iitr = 1:4:Q 3:4:Q; vv.P = ptrans(:,iival); vv.T = tn(:,iival); vt.P = ptrans(:,iitst); vt.T = tn(:,iitst); ptr = ptrans(:,iitr); ttr = tn(:,iitr); net = newff(minmax(ptr),20,1,tansig purelin,trainlm,learngd); net.layers1.initFcn = initwb; net.inputWeights1,1.initFcn = rands; net.biases1,1.initFcn = rands; net.biases2,1.initFcn = rands; net = init(net); %训练参数的设定 net.trainParam.epochs = 50000 % Maximum number of epochs to train net.trainParam.goal = 0 % 0 Performance goal net.trainParam.max_fail = 5 % Maximum validation failures net.trainParam.mem_reduc = 1 % Factor to use for memory/speed trade off. net.trainParam.min_grad = 1e-10 % Minimum performance gradient net.trainParam.mu = 0.001 % Initial Mu net.trainParam.mu_dec = 0.1 % Mu decrease factor net.trainParam.mu_inc = 10 % Mu increase factor net.trainParam.mu_max = 1e10 % Maximum Mu net.trainParam.show = 1 % 25 Epochs between displays (NaN for no displays) net.trainParam.time = inf % Maximum time to train in seconds LP.lr = 0.5 % 0.01 Learning rate net,tr = train(net,ptr,ttr,vv,vt); plot(tr.epoch,tr.perf,r,tr.epoch,tr.vperf,:g,tr.epoch,tr.tperf,-.b); legend(训练,确证,测试,-1); ylabel(平方误差); xlabel(时间); pause; an = sim(net,ptrans); a = postmnmx(an,mint,maxt); m,b,r = postreg(a,t);【原创】关于神经网络几个初始化函数之间的联系总结神经网络初学者对Matlab神经网络工具箱的好多函数混淆不清,就那初始化函数来说,什么网络初始化、层初始化、权值初始化、阀值初始化函数等等,脑袋都发晕了。好下面我以初始化函数,来说明神经网络工具的网络结构和函数参数意义。对于训练函数之类的请自己举一反三!1Matlab提供的神经网络结构中包含四个层次initfcn函数,依次为:initnet.initfcnnet.layersi.initfcnnet.inputweightsi,j.initfcn或者net.layersweightsi,j.initfcn或者net.biasesi.initfcn其中net.initfcn只能是initlaynet.layersi.initfcn只能是initnw或者initwbnet.inputweightsi,j.initfcn和net.layersweightsi,j只能是rands,intitzero,midpoint,randnc,randnr,initsompc net.biasesi.initfcn只能是rands,intitzero,initconinit初始化神经网络根据net.initfcn和net.initparam调用网络初始化函数net.initfcn,有net.initfcn只能是initlayer,说白了就是直接调用initlayerinitlay网络初始化函数,根据每一层net.layersi.initfcn的设置初始化每一层我们可以如下设置1.设置net.initfcn为initlay,此时net.initpatam自动设置为空2.设置net.layersi.initfcn为一个你需要的层初始化函数(这里只有两种选择initwb或者initwn)initwb是一个层初始化函数,根据各自的权值和阀值初始化函数,初始化它们的权值和阀值我们可以如下设置:1.设置net.initfcn为initlay,此时net.initpatam自动设置为空2.设置net.layersi.initfcn为initwb3.设置net.inputweightsi,j.initfcn和net.layersweightsi,j.initfcn为一个你需要的权值初始化函数,net.biasesi.initfcn为你需要的阀值初始化函数initnw是一个层初始化函数,根据Nguyen-Widrow算法初始每一层的权值和阀值,该算法具有一定的随机性,故每一次调用的时候会得到不同的结果我们以可以如下设置:1.设置net.initfcn为initlay,此时net.initpatam自动设置为空2.设置net.layersi.initfcn为initnw注意:当net.layersi.initfcn设置为initwn的时候,就不需要设置具体的权值和阀值初始化函数了总结下就是:init()函数根据初始化参数net.initparam调用网络初始化函数net.initfcn;经典的,网络初始化函数一般为initlay,initlayer()调用层初始化函数net.layersi.initfcn(此时只有两个选择),比

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论