Matlab_中神经网络算法指令newff使用.pdfVIP

  • 8
  • 0
  • 约 5页
  • 2016-03-01 发布于安徽
  • 举报
Matlab 中神经网络算法指令 newff 的使用 设[P,T]是训练样本,[X,Y]是测试样本; net=newrb(P,T,err_goal,spread); % 建立网络 q=sim(net,p); e=q-T; plot(p,q); % 画训练误差曲线 q=sim(net,X); e=q-Y; plot(X,q); % 画测试误差曲线 训练前馈网络的第一步是建立网络对象。函数newff 建立一个可训练的前馈网络。这需要4 个输入参数。 第一个参数是一个Rx2 的矩阵以定义R 个输入向量的最小值和最大值。 第二个参数是一个设定每层神经元个数的数组。 第三个参数是包含每层用到的传递函数名称的细胞数组。 最后一个参数是用到的训练函数的名称。 举个例子,下面命令将创建一个二层网络。它的输入是两个元素的向量,第一层有三个神经 元(3) ,第二层有一个神经元(1) 。 第一层的传递函数是tan-sigmoid,输出层的传递函数是linear 。 输入向量的第一个元素的范围是- 1 到2[- 1 2],输入向量的第二个元素的范围是0 到5[0 5] , 训练函数是traingd 。 net=newff([- 1 2; 0 5],[3,1],{tansig,purelin},traingd); 这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。 我们可能要多次重新初始化权重或者进行自定义的初始化。 下面就是初始化的详细步骤。 在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令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] 为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。 它比起单纯的给权重和偏置随机赋值有以下优点: (1)减少神经元的浪费(因为所有神经元的活动区域都在输入空间内)。 (2 )有更快的训练速度(因为输入空间的每个区域都在活动的神经元范围中)。 初始化函数被newff 所调用。因此当网络创建时,它根据缺省的参数自动初始化。init 不需要单独的调用。可是我们可能要重新初始化权重和偏置或者进行自定义的初始化。例如, 我们用newff 创建的网络,它缺省用initnw 来初始化第一层。如果我们想要用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); IW: 输入层到隐含层的权重矩阵 LW: 隐含层和输出层间的权重矩阵 b: 阀值向量 如网络为net, 输入层和输出均为一个接点情况下,则用 net.IW{1,1}可以看到第一个输入接点到第一隐含层的权重向量; net.LW{2,1}可以看到隐含层到输出层的权值向量; net.b{1,1}是隐含层的阀值向量, net.b{2,1}是输出接点的阀值; 在多输入输出下先用 net.IW net.LW net.b 查看各矩阵结构,再相应用net.IW{?,?}等语句查到相关的向量 _______________________________________________________

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档