matlab 中netff,newff函数里的参数设置方法

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.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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新版Matlab神经网络训练函数Newff的详细讲解-新版Matlab神经网络训练函数Newff的使用方法.doc 本帖最后由 小小2008鸟 于 2013-1-15 21:42 编辑 新版Matlab神经网络训练函数Newff的详细讲解 一、   介绍新版newffSyntax·          net = newff],{TF1 TF2...TFNl}, BTF,BLF,PF,IPF,OPF,DDF) Descriptionnewff],{TF1 TF2...TFNl}, BTF,BLF,PF,IPF,OPF,DDF) takes several arguments PR x Q1 matrix of Q1 sample R-element input vectorsTSN x Q2 matrix of Q2 sample SN-element target vectorsSiSize of ith layer, for N-1 layers, default = [ ]. TFiTransfer function of ith layer. (Default = 'tansig' for hidden layers and 'purelin' for output layer.)BTFBackpropagation network training function BLFBackpropagation weight/bias learning function IPFRow cell array of input processing functions. OPFRow cell array of output processing functions. DDFData divison function ExamplesHere is a problem consisting of inputs P and targets T to be solved with a network.·          P = [0 1 2 3 4 5 6 7 8 9 10];T = [0 1 2 3 4 3 2 1 2 3 4];Here a network is created with one hidden layer of five neurons.·          net = newff;The network is simulated and its output plotted against the targets.·          Y = sim;plotThe network is trained for 50 epochs. Again the network's output is plotted.·          net.trainParam.epochs = 50;net = train;Y = sim; plot 二、   新版newff与旧版newff调用语法对比 Example1比如输入input(6*1000),输出output为(4*1000),那么旧版定义:net=newff,[14,4],{'tansig','purelin'},'trainlm');新版定义:net=newff; Example2比如输入input(6*1000),输出output为(4*1000),那么旧版定义:net=newff,[49,10,4],{'tansig','tansig','tansig'},'traingdx');新版定义:net=newff; 更详细请看word文档 新版Matlab神经网络训练函数Newff的使用方法.doc
### 回答1: MATLABnetff是一种前馈神经网络,它可以用来训练非线性模型。其训练分为两种基本方法: 1.梯度下降法 梯度下降法是使用反向传播算法进行权重更新的一种优化方法,它可以快速地找到一个较好的模型。具体来说,每次训练的步骤包括输入样本并计算输出值,再计算输出误差,最后使用反向传播算法更新权重。 2.矩阵分解法 矩阵分解法是一种迭代求解方法,它将网络权重矩阵分解成多个较小的矩阵,并通过一些优化技巧进行更新。这种方法通常比梯度下降法需要更多的计算资源,但它能够求解困难的非凸问题。 除了这两种方法MATLABnetff还支持其他一些高级训练方法,如Levenberg-Marquardt算法、Bayesian正则化等。这些算法可根据实际需求在代码进行选择。总之,使用netff训练神经网络的过程需要分别设置算法类型、学习速率、误差函数和训练规则等参数,具体可参考MATLAB的文档和示例代码。 ### 回答2: MATLAB NetFF是基于神经网络的一种训练方法,它的训练过程分为两个步骤:前向传播和反向传播。前向传播是将输入数据在各个神经元之间传递,从而得到网络的输出结果。反向传播是根据误差信号对网络进行调整,以不断提高网络的准确性和预测能力。 在MATLAB NetFF,训练方法主要分为3种:traingd、traingda和trainlm。 traingd是一种梯度下降法,它通过沿着误差信号下降的方向来调整网络的权重和偏置,从而最小化误差信号。这种方法速度较快,但容易陷入局部最优解。 traingda是一种具有自适应学习率的梯度下降法,它能够自动调整学习率,从而加快收敛速度,并且避免过度拟合的问题。这种方法通常比traingd更具优势。 trainlm是一种Levenberg-Marquardt算法,它是一种快速、有效的二阶优化方法,能够自动调整学习率,并且避免过度拟合问题。这种方法相对于traingda来说更加复杂,但对于深度神经网络等较复杂的体系结构来说,其优势更加明显。 总之,MATLAB NetFF通过不断训练和调整,可以提高神经网络的预测准确性和预测能力,从而在各个领域得到应用和推广。 ### 回答3: MATLABnetff是一种前馈神经网络模型,它的训练方法主要是基于误差反向传播算法。误差反向传播算法又称为反向传播算法,是一种常用的神经网络训练方法。该算法主要分为两个过程,即前向传播和反向传播。 前向传播是指将输入数据从输入层传递到输出层的过程。在该过程,网络的每个神经元都接收到来自输入端的数据,并将其与权重进行加权叠加,然后通过激活函数进行计算,并将结果传递给下一层。 反向传播是指将误差信息从输出层反向传递到输入层的过程。在该过程,首先计算网络的输出与真实输出之间的误差,然后将误差信息反向传递到网络各层,并根据误差信息调整每个神经元的权重,以逐步降低误差大小。 在MATLAB,可以使用train函数进行神经网络模型的训练。train函数包括了多种不同的训练算法,例如Levenberg-Marquardt、BFGS和CG算法等。通过选取不同的训练算法可以针对不同的数据集和模型进行训练,并得到最优训练结果。 在使用netff进行训练时,需要选择适当的输入输出数据和参数设置,例如神经网络的隐藏层数、神经元个数、学习率、动量因子等。这些参数的选择将直接影响模型的训练效果和预测精度。因此,在实际应用需要进行充分的实验和调参,以获得最优的训练效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值