matlab BP神经网络出错 newff参数 隐含层 怎么确定

2024-12-16 20:25:30
推荐回答(3个)
回答1:

设[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]为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。

回答2:

1,你好,BP神经网络的隐层数,各隐层的节点数都是要不断的调节的,不过有一个一般性的范围。
隐层节点数 L2,每一层之间的传递函数也是要不断变换着用来调出符合目标的最佳组合。你这里的这个组合是比较好的。
3,学习率,lr也是要调整的参数,不过一般0.1-0.3也可。
4,输出后的误差标准选取也是影响很大。

回答3:

隐含层节点个数不能取的太小,否则会导致网络根本无法训练,隐含层神经元最小个数大体估算为:根号(输入神经元个数+输出神元个数) ,双隐含层就是有两个隐含层,比如你的网络参数写为:[26,26,1],这样网络就是双隐含层,