matlab里面的newff函数怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab里面的newff函数怎么回事相关的知识,希望对你有一定的参考价值。

参考技术A matlab 中“newff” 函数的使用方法技巧|和各参数的意义

先来一个简单的源程序让大家练习一下:
% Here input P and targets T define a simple function which
% we can plot:

p = [0 1 2 3 4 5 6 7 8];
t = [0 0.84 0.91 0.14 -0.77 -0.96 -0.28 0.66 0.99];
plot(p,t,'o')

net = newff([0 8],[10 1],'tansig' 'purelin','trainlm');
y1 = sim(net,p)
plot(p,t,'o',p,y1,'x')

Here the network is trained for up to 50 epochs to a error goal of
0.01, and then resimulated.

net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
y2 = sim(net,p)
plot(p,t,'o',p,y1,'x',p,y2,'*')

设[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.layeri.initFcn这一技巧来初始化一个给定的网络。
net.initFcn用来决定整个网络的初始化函数。前馈网络的缺省值为initlay,它允许每一层用单独的初始化函数。
设定了net.initFcn ,那么参数net.layeri.initFcn 也要设定用来决定每一层的初始化函数。
对前馈网络来说,有两种不同的初始化方式经常被用到:initwb和initnw。initwb函数根据每一层自己的初始化参数(net.inputWeightsi,j.initFcn)初始化权重矩阵和偏置。前馈网络的初始化权重通常设为rands,它使权重在-1到1之间随机取值。这种方式经常用在转换函数是线性函数时。initnw通常用于转换函数是曲线函数。它根据Nguyen和Widrow[NgWi90]为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。
它比起单纯的给权重和偏置随机赋值有以下优点:
(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);

IW: 输入层到隐含层的权重矩阵
LW: 隐含层和输出层间的权重矩阵
b: 阀值向量

如网络为net, 输入层和输出均为一个接点情况下,则用
net.IW1,1可以看到第一个输入接点到第一隐含层的权重向量;
net.LW2,1可以看到隐含层到输出层的权值向量;
net.b1,1是隐含层的阀值向量,
net.b2,1是输出接点的阀值;

在多输入输出下先用
net.IW
net.LW
net.b
查看各矩阵结构,再相应用net.IW?,?等语句查到相关的向量

以上是关于matlab里面的newff函数怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

有人知道bp神经网络Matlab R2012a 的newff用法么

bp神经网络matlab实现时,newff函数中的网络各层神经元的激活函数怎么选啊?

matlab关于newff

matlab中建立bp神经网络的函数newff的第二个参数的问题

newff函数丢失

newff函数的函数参数