下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Matlab神经网络工具箱应用简介

Matlab神经网络工具箱应用简介.pdf

Matlab神经网络工具箱应用简介

5542yu9459
2009-07-27 0人阅读 举报 0 0 暂无简介

简介:本文档为《Matlab神经网络工具箱应用简介pdf》,可适用于教育、出版领域

Matlab神经网络工具箱应用简介第一章介绍.神经网络神经网络是单个并行处理元素的集合我们从生物学神经系统得到启发。在自然界网络功能主要由神经节决定我们可以通过改变连接点的权重来训练神经网络完成特定的功能。一般的神经网络都是可调节的或者说可训练的这样一个特定的输入便可得到要求的输出。如下图所示。这里网络根据输出和目标的比较而调整直到网络输出和目标匹配。作为典型许多输入目标对应的方法已被用在有监督模式中来训练神经网络。神经网络已经在各个领域中应用以实现各种复杂的功能。这些领域包括:模式识别、鉴定、分类、语音、翻译和控制系统。如今神经网络能够用来解决常规计算机和人难以解决的问题。我们主要通过这个工具箱来建立示范的神经网络系统并应用到工程、金融和其他实际项目中去。一般普遍使用有监督训练方法但是也能够通过无监督的训练方法或者直接设计得到其他的神经网络。无监督网络可以被应用在数据组的辨别上。一些线形网络和Hopfield网络是直接设计的。总的来说有各种各样的设计和学习方法来增强用户的选择。神经网络领域已经有年的历史了但是实际的应用却是在最近年里如今神经网络仍快速发展着。因此它显然不同与控制系统和最优化系统领域它们的术语、数学理论和设计过程都已牢固的建立和应用了好多年。我们没有把神经网络工具箱仅看作一个能正常运行的建好的处理轮廓。我们宁愿希望它能成为一个有用的工业、教育和研究工具一个能够帮助用户找到什么能够做什么不能做的工具一个能够帮助发展和拓宽神经网络领域的工具。因为这个领域和它的材料是如此新这个工具箱将给我们解释处理过程讲述怎样运用它们并且举例说明它们的成功和失败。我们相信要成功和满意的使用这个工具箱对范例和它们的应用的理解是很重要的并且如果没有这些说明那么用户的埋怨和质询就会把我们淹没。所以如果我们包括了大量的说明性材料请保持耐心。我们希望这些材料能对你有帮助。这个章节在开始使用神经网络工具箱时包括了一些注释它也描述了新的图形用户接口和新的运算法则和体系结构并且它解释了工具箱为了使用模块化网络对象描述而增强的机动性。最后这一章给出了一个神经网络实际应用的列表并增加了一个新的文本神经网络设计。这本书介绍了神经网络的理论和它们的设计和应用并给出了相当可观的MATLAB和神经网络工具箱的使用。.准备工作基本章节第一章是神经网络的基本介绍第二章包括了由工具箱指定的有关网络结构和符号的基本材料以及建立神经网络的一些基本函数例如new、init、adapt和train。第三章以反向传播网络为例讲解了反向传播网络的原理和应用的基本过程。帮助和安装神经网络工具箱包含在nnet目录中键入helpnnet可得到帮助主题。工具箱包含了许多示例。每一个例子讲述了一个问题展示了用来解决问题的网络并给出了最后的结果。显示向导要讨论的神经网络例子和应用代码可以通过键入helpnndemos找到。安装神经网络工具箱的指令可以在下列两份MATLAB文档中找到:theInstallationGuideforMSWindowsandMacintosh或者theInstallationGuideforUNIX。第二章神经元模型和网络结构.符号数学符号下面给出等式和数字中用到的基本符号:标量小写的斜体字a,b,c向量小写加粗的非斜体字a,b,c矩阵大写加粗的非斜体字A,B,C向量表示一组数字数学符号和字符的等价从数学符号到字符的转换或者反过来可以遵循一些规则为了便于今后引用我们将这些规则列出。为了从数学符号变为MATLAB符号用户需要:变上标为细胞数组标号例如变下标为圆括号标号例如和变圆括号标号为二维数组标号例如变数学运算符为MATLAB运算符和工具箱函数例如.神经元模型单神经元下图所示为一个单标量输入且无偏置的神经元。这个输入标量通过乘以权重为标量w的连结点得到结果wp这仍是一个标量。这里加权的输入wp仅仅是转移函数f的参数函数的输入是标量a。右边的神经元有一个标量偏置b你既可以认为它仅仅是通过求和节点加在结果wp上也可以认为它把函数f左移了b个单位偏置除了有一个固定不变的输入值以外其他的很像权重。标量n是加权输入wp和偏置b的和它作为转移函数f的参数。函数f是转移函数它可以为阶跃函数或者曲线函数它接收参数n给出输出a下一节将给出各种不同的转移函数。注意神经元中的w和b都是可调整的标量参数。神经网络的中心思想就是参数的可调整使得网络展示需要和令人感兴趣的行为。这样我们就可以通过调整权重和偏置参量训练神经网络做一定的工作。或者神经网络自己调整参数以得到想要的结果。在这个工具箱里所有的神经元都提供偏置我们的许多例子中都用到了偏置并且假定它在这个工具箱的大多数情况下都要用到。可是如果你愿意的话你也可以在一个神经元中省略偏置。正如上面所提到的在神经元中标量b是个可调整的参数。它不是一个输入。可是驱动偏置的常量却是一个输入而且当考虑线性输入向量时一定要这样认为。转移函数在这个工具箱里包括了许多转移函数。你能在"TransferFunctionGraphs"中找到它们的完全列表。下面列出了三个最常用的函数。上图所示的阶跃转移函数限制了输出使得输入参数小于时输出为大于或等于时输出为在第三章中我们将用它来进行分类。工具箱中有一个函数hardlim来数学上的阶跃如上图所示。我们可以输入以下代码n=::plot(n,hardlim(n),'c:')它产生一张在到之间的阶跃函数图。所有在工具箱中的数学转移函数都能够用同名的函数实现。线性转移函数如下图所示这种类型的神经元将在第四章的自适应线性滤波中用作线性拟合。下图显示的曲线转移函数的输入参数是正负区间的任意值而将输出值限定于到之间。这种传递函数通常用于反向传播(BP)网络这得益于函数的可微性。在上面所示的每一个转移函数图的右边方框中的符号代表了对应的函数这些图表将替换网络图的方框中的f来表示所使用的特定的转移函数。第章列出了所有的转移函数和图标。你能够定义自己的传递函数你可以不限于使用第章所列的转移函数。你能够通过运行示例程序nnn来试验一个神经元和各种转移函数。带向量输入的神经元一个有R个元素输入向量的神经元如下图所示。这里单个输入元素乘上权重得到加权值输入求和节点。它们的和是Wp单行矩阵W和向量p的点乘。这个神经元有一个偏置b它加在加权的输入上得到网络输入n和值n是转移函数f的参数。表达式自然可用MATLAB代码表示为:n=W*pb可是用户很少要写如此底层的代码因为这些代码已经被建立到函数中来定义和模拟整个网络。上面所示的图包括了许多细节。当我们考虑有许多神经元和可能是许多神经元组成的多层网络时我们可能会漏掉许多细节。因此作者设计了一个简洁的符号代表单个神经元。这个符号如下图中所示它将会在以后的多重神经元电路中用到。这里输入向量p用左边的黑色实心竖条代表p的维数写在符号p下面在图中是Rx。(注意我们用的是大写字母正如在以前句子里R用来表示向量大小时一样。)因此p是一个有R个输入元素的向量。这个输入列向量乘上R列单行矩阵W。和以前一样常量作为一个输入乘上偏置标量b给转移函数的网络输入是n它是偏置与乘积Wp的和。这个和值传给转移函数f得到网络输出a在这个例子中它是一个标量。注意如果我们有超过一个神经元网络输出就有可能是一个向量。上面图中定义了神经网络的一层。一层包括权重的组合乘法和加法操作(这里就是向量乘积Wp)偏置b和转移函数f。输入数组即向量p不包括在一层中。这个简洁的网络符号每一次都会被用到向量的大小会显示在矩阵变量名字的下面。我们希望这个符号会让你理解神经网络的结构以及与之相关的矩阵数学。正如前面所讨论的当特定的转移函数在一张图中被使用时转移函数将用上面所示的符号代替。下面是几个例子:你可以通过运行示例程序nndn来试验有个元素的神经元。.网络结构两个或更多的上面所示的神经元可以组合成一层一个典型的网络可包括一层或者多层。我们首先来研究神经元层。单层神经元网络有R输入元素和S个神经元组成的单层网络如下图所示:在一个单层网络中输入向量p的每一个元素都通过权重矩阵W和每一个神经元连接起来。第I个神经元通过把所有加权的输入和偏置加起来得到它自己的标量输出n(i)。不同的n(i)合起来形成了有S个元素的网络输入向量n。最后网络层输出一个列向量a我们在图的底部显示了a的表达式。注意输入元素个数R和神经元个数S通常是不等的我们也并不需要这两者相等。你也可以建立一个简单的复合神经元层它将上面所示的网络并行的合在一起使用不同的转移函数。所有的网络都有相同的输入而每一个网络都会产生输出。输入向量元素经加权矩阵W作用输入网络。W=注意加权矩阵W的行标标记权重的目的神经元列标标记待加权的输入标号。因此的标号表示从输入信号的第二个元素到第一个神经元的权重是。有S个神经元和R个输入元素的神经网络也能够简化成以下符号:这里p是一个有R个元素的输入向量W是一个SxR的矩阵a和b是有S个元素的向量。如前面所定义的神经元层包括权重矩阵乘法运算偏置向量b求和符和转移函数框。输入和层我们将要讨论多层网络所以我们需要拓展我们的符号来描述这样的网络。特别是我们要弄清连接输入的权重矩阵和连接层的权重矩阵之间的区别。我们也要分清权重矩阵的目的和源。我们将把连接输入的权重矩阵成为输入权重把来自层输出的权重矩阵称为层矩阵。进一步说我们在各个权重和其他网络元素中将用上标区分源(第二个标号)和目的(第一个标号)。作为示例我们用简化的形式重画了上面所画的单层多输入网络。你可以看到我们把连接输入向量p的权重矩阵标记为输入权重矩阵(IW,)第二个标号是源第二个标号是目的。同样第一层的元素比如偏置、网络输入和输出都有上标来表示它们属于第一层。在下一章节我们将用LW表示层权重矩阵用IW表示输入权重矩阵。你可以复习以下这一章开始的符号那一节它把特定的网络net中用数学符号表示的层权重矩阵转换成代码如下所示:IW,netIW{,}这样,你就可以写代码来得到对转移函数的网络输入了:n{}=netIW{,}*pnetb{}多层神经元网络一个网络可以有几层每一层都有权重矩阵W偏置向量b和输出向量a。为了区分这些权重矩阵、输出矩阵等等在图中的每一层我们都为感兴趣的变量以上标的形式增加了层数。你能够看到在下面所示的三层网络图和等式中使用层符号。上面所示的网络有R个输入第一层有S个神经元第二层有S个神经元以次类推。一般不同层有不同数量的神经元。每一个神经元的偏置输入是常量。注意中间层的输出就是下一层的输入。第二层可看作有S个输入S个神经元和SxS阶权重矩阵W的单层网络。第二层的输入是a输出是a现在我们已经确定了第二层的所有向量和矩阵我们就能把它看成一个单层网络了。其他层也可以照此步骤处理。多层网络中的层扮演着不同的角色。给出网络输出的层叫做输出层。所有其他的层叫做隐层。上图所示的三层网络有一个输出层(第三层)和两个隐层(第一和第二层)。有些作者把输入作为第四层这里不用这种指定。上面所示的三层网络的简洁画法如下图所示:多层网络的功能非常强大。举个例子一个两层的网络第一层的转移函数是曲线函数第二层的转移函数是线性函数通过训练它能够很好的模拟任何有有限断点的函数。这种两层网络集中应用于"反向传播网络"。注意我们把第三层的输出a标记为y。我们将使用这种符号来定义这种网络的输出。.数据结构这一节将讨论影响网络仿真的输入数据结构的格式。我们首先讨论静态网络在讨论动态网络。我们将关心两种基本的输入向量类型:同步(同时或者无时序)向量和异步向量。对异步向量来说向量的顺序是非常重要的。对同步向量来说顺序是不重要的并且如果我们已经有一定数量的并行网络我们就能把一个输入向量输入到其中的任意网络。静态网络中的同步输入仿真仿真静态网络(没有反馈或者延迟)是网络仿真最简单的一种。在这种情况中我们不需要关心向量输入的时间顺序所以我们可以认为它是同时发生的。另外为了是问题更简单我们假定开始网络仅有一个输入向量。我们用下面的网络作为例子。为了建立这个网络我们可以用以下命令:net=newlin(,)简单起见我们假定权重矩阵和偏置为:W=b=其命令行是:netIW{,}=netb{}=假定模拟的网络有四个无序向量即Q=:这些同步向量可以用一个矩阵来表示:P=现在我们就可以模拟这个网络了:A=sim(net,P)A=我们向网络输入一个简单的同步向量矩阵得到了一个简单的同步向量输出矩阵。结果不论是由一个网络串行输出还是由四个网络并行输出得到的都是一样的。由于输入并无关联输入向量的顺序并不重要。动态网络中的异步输入仿真当网络中存在延迟时顺序发生的输入向量就要按一定的序列输入网络。为了演示这种情况我们用了一个有延迟的简单网络。为了建立这个网络我们可以用以下命令:net=newlin(,,)netbiasConnect=假定权重矩阵为:W=命令行为:netIW{,}=假定输入顺序为:p()=,p()=,p()=,p()=输入序列可以用一个细胞数组来表示:P={}这样我们就能模拟这个网络了:A=sim(net,P)A=我们输入一个包含输入序列的细胞数组网络产生一个包含输出序列的细胞数组。注意异步输入中的输入顺序是很重要的。在这个例子中当前输出等于当前输入乘加上前一个输入乘。如果我们改变输入顺序那么输出结果也回随之改变。动态网络中的同步输入仿真如果我们在上一个例子中把输入作为同步而不是异步应用我们就会得到完全不同的响应。(虽然我们不清楚为什么要在动态网络中使用这种方式。)这就好象每一个输入都同时加到一个单独的并行网络中。在前一个例子中如果我们用一组同步输入我们有:p=,p=,p=,p=这可用下列代码创建:P=模拟这个网络我们得到:A=sim(net,P)A=这个结果和我们同时把每一个输入应用到单独的网络中并计算单独的输出没什么两样。注意如果我们没有初始化延迟时间那么缺省值就是。在这个例子中由于当前输入的权重是输出就是输入乘。在某些特定的情况下我们可能想要在同一时间模拟一些不同序列的网络响应。这种情况我们就要给网络输入一组同步序列。比如说我们要把下面两个序列输入网络:p()=,p()=,p()=,p()=p()=,p()=,p()=,p()=输入P应该是一个细胞数组每一个数组元素都包含了两个同时发生的序列的元素。P={}现在我们就可以模拟这个网络了:A=sim(net,P)网络输出结果将是:A={}你可以看到每个矩阵的第一列是由第一组输入序列产生的输出序列每个矩阵的第二列是由第二组输入序列产生的输出序列。这两组序列之间没有关联好象他们是同时应用在单个的并行网络上的。下面的图表显示了当我们有Q个TS长度的序列时在函数sim中输入P的一般格式。它函盖了单输入向量的所有的情况。每一个细胞数组的元素都是一个同步向量矩阵它对应于每一个序列的同一时间点。如果有多输入向量那么在细胞数组中的矩阵里就有多行。这一节我们我们把同步和异步输入应用到了动态网络中。在以前的章节中我们把同步输入应用到了静态网络中。我们也能把异步序列应用到静态网络中。这不会改变网络的输出响应但是这会影响训练过的网络的形式。在下一节你会更清楚的了解这一点。.训练方式在这一节中我们将描述两种不同的训练方式。在增加方式中每提交一次输入数据网络权重和偏置都更新一次。在批处理方式中仅仅当所有的输入数据都被提交以后网络权重和偏置才被更新。增加方式(应用与自适应网络和其他网络)虽然增加方式更普遍的应用于动态网络比如自适应滤波但是在静态和动态网络中都可以应用它。在这一节中我们将示范怎样把增加方式应用到这两种网络中去。静态网络中的增加方式继续考虑前面用过的第一个静态网络的例子我们用增加方式来训练它这样每提交一次输入数据网络权重和偏置都更新一次。在这个例子里我们用函数adapt并给出输入和目标序列:假定我们要训练网络建立以下线性函数:t=pp我们以前用的输入是:目标输出是:t=,t=,t=,t=我们首先用初始化权重和偏置。为了显示增加方式的效果我们把学习速度也设为。net=newlin(,,,)netIW{,}=netb{}=为了用增加方式我们把输入和目标输出表示为以下序列:P={}T={}前面的讨论中不论是作为一个同步向量矩阵输入还是作为一个异步向量细胞数组输入模拟的输出值是一样的。而在训练网络时这是不对的。当我们使用adapt函数时如果输入是异步向量细胞数组那么权重将在每一组输入提交的时候更新(就是增加方式)我们将在下一节看到如果输入是同步向量矩阵那么权重将只在所有输入提交的时候更新(就是批处理方式)。我们现在开始用增加方式训练网络:net,a,e,pf=adapt(net,P,T)由于学习速度为网络输出仍然为并且权重没有被更新。错误和目标输出相等。a=e=如果我们设置学习速度为我们就能够看到当每一组输入提交时网络是怎么调整的了。netinputWeights{,}learnParamlr=netbiases{,}learnParamlr=net,a,e,pf=adapt(net,P,T)a=e=由于在第一个输入数据提交前还没有更新第一个输出和学习速率为时一样。由于权重已更新第二个输出就不一样了。每计算一次错误权重都不断的修改。如果网络可行并且学习速率设置得当错误将不断的趋向于。动态网络中的增加方式我们同样也能用增加方式训练动态网络。实际上这是最普遍的情况。让我们用前面用过的那个有输入延迟的线性网络作为例子我们将初始化权重为并把学习速率设为。net=newlin(,,,)netIW{,}=netbiasConnect=为了用增加方式我们把输入和目标输出表示为细胞数组的元素:Pi={}P={}T={}这里我们尝试训练网络把当前输入和前一次输入加起来作为当前输出。输入序列和我们以前使用sim的例子中用过的一样除了我们指定了输入序列的第一组作为延迟的初始状态。现在我们可以用adapt来训练网络了:net,a,e,pf=adapt(net,P,T,Pi)a=e=由于权重没有更新第一个输出是。每一个序列步进权重都改变一次。批处理方式在批处理方式中仅仅当所有的输入数据都被提交以后网络权重和偏置才被更新它也可以应用于静态和动态网络。我们将在这一节讨论这两种类型。静态网络中的批处理方式批处理方式可以用adapt或train函数来实现虽然由于由于采用了更高效的学习算法train通常是最好的选择。增加方式只能用adapt来实现train函数只能用于批处理方式。让我们用前面用过的静态网络的例子开始学习速率设置为。net=newlin(,,,)netIW{,}=netb{}=用adapt函数实现静态网络的批处理方式输入向量必须用同步向量矩阵的方式放置:P=T=当我们调用adapt时将触发adaptwb函数这是缺省的线性网络调整函数。learnwh是缺省的权重和偏置学习函数。因此WidrowHoff学习法将会被使用:net,a,e,pf=adapt(net,P,T)a=e=注意网络的输出全部为因为在所有要训练的数据提交前权重没有被更新如果我们显示权重我们就会发现:>>netIW{,}ans=>>netb{}ans=经过了用adapt函数的批处理方式调整这就和原来不一样了。现在用train函数来实现批处理方式。由于WidrowHoff规则能够在增加方式和批处理方式中应用它可以通过adapt和train触发。我们有好几种算法只能用于批处理方式(特别是LevenbergMarquardt算法)所以这些算法只能用train触发。网络用相同的方法建立:net=newlin(,,,)netIW{,}=netb{}=在这种情况下输入向量即能用同步向量矩阵表示也能用异步向量细胞数组表示。用train函数任何异步向量细胞数组都会转换成同步向量矩阵。这是因为网络是静态的并且因为train总是在批处理方式中使用。因为MATLAB实现同步模式效率更高所以只要可能总是采用同步模式处理。P=T=现在我们开始训练网络。由于我们只用了一次adapt我们这里训练它一次。缺省的线性网络训练函数是trainwb。learnwh是缺省的权重和偏置学习函数。因此我们应该和前面缺省调整函数是adaptwb的例子得到同样的结果。netinputWeights{,}learnParamlr=netbiases{}learnParamlr=nettrainParamepochs=net=train(net,P,T)经过一次训练后我们显示权重发现:>>netIW{,}ans=>>netb{}ans=这和用adapt训练出来的结果是一样的。在静态网络中adapt函数能够根据输入数据格式的不同应用于增加方式和批处理方式。如果数据用同步向量矩阵方式输入就用批处理方式训练如果数据用异步方式输入就用增加方式。但这对于train函数行不通无论输入格式如何它总是采用批处理方式。动态网络中的增加方式训练静态网络相对要简单一些。如果我们用train训练网络即使输入是异步向量细胞数组它也是转变成同步向量矩阵而采用批处理方式。如果我们用adapt。输入格式决定着网络训练方式。如果传递的是序列网络用增加方式如果传递的是同步向量就采用批处理方式。在动态网络中批处理方式只能用train完成特别是当仅有一个训练序列存在时。为了说明清楚让我们重新考虑那个带延迟的线性网络。我们把学习速率设为(当我们采用梯度下降算法时我们要用比增加方式更小的学习速率应为所有的分立的梯度都要在决定权重改变步进之前求和)net=newlin(,,,)netIW{,}=netbiasConnect=nettrainParamepochs=Pi={}P={}T={}我们用以前增加方式训练过的那组数据训练但是这一次我们希望只有在所有数据都提交后才更新权重(批处理方式)。因为输入是一个序列网络将用异步模式模拟。但是权重将用批处理方式更新。net=train(net,P,T,Pi)经过一次训练后权重值为:>>netIW{,}ans=这里的权重值和我们用增加方式得到的不同。在增加方式中通过训练设置一次训练可以更新权重三次。在批处理方式中每次训练只能更新一次。第三章反向传播网络(BP网络).概述前面介绍了神经网络的结构和模型在实际应用中我们用的最广泛的是反向传播网络(BP网络)。下面就介绍一下BP网络的结构和应用。BP网络是采用WidrowHoff学习算法和非线性可微转移函数的多层网络。一个典型的BP网络采用的是梯度下降算法也就是WidrowHoff算法所规定的。backpropagation就是指的为非线性多层网络计算梯度的方法。现在有许多基本的优化算法例如变尺度算法和牛顿算法。神经网络工具箱提供了许多这样的算法。这一章我们将讨论使用这些规则和这些算法的优缺点。一个经过训练的BP网络能够根据输入给出合适的结果虽然这个输入并没有被训练过。这个特性使得BP网络很适合采用输入目标对进行训练而且并不需要把所有可能的输入目标对都训练过。为了提高网络的适用性神经网络工具箱提供了两个特性规则化和早期停止。这两个特性和用途我们将在这一章的后面讨论。这一章还将讨论网络的预处理和后处理技术以提高网络训练效率。.基础网络结构神经网络的结构前一章已详细讨论过前馈型BP网络的结构结构和它基本相同这里就不再详细论述了这里着重说明以下几点:.常用的前馈型BP网络的转移函数有logsigtansig有时也会用到线性函数purelin。当网络的最后一层采用曲线函数时输出被限制在一个很小的范围内如果采用线性函数则输出可为任意值。以上三个函数是BP网络中最常用到的函数但是如果需要的话你也可以创建其他可微的转移函数。.在BP网络中转移函数可求导是非常重要的tansig、logsig和purelin都有对应的导函数dtansig、dlogsig和dpurelin。为了得到更多转移函数的导函数你可以带字符"deriv"的转移函数:tansig('deriv')ans=dtansig网络构建和初始化训练前馈网络的第一步是建立网络对象。函数newff建立一个可训练的前馈网络。这需要个输入参数。第一个参数是一个Rx的矩阵以定义R个输入向量的最小值和最大值。第二个参数是一个颟顸每层神经元个数的数组。第三个参数是包含每层用到的转移函数名称的细胞数组。最后一个参数是用到的训练函数的名称。举个例子下面命令将创建一个二层网络,其网络模型如下图所示。它的输入是两个元素的向量第一层有三个神经元第二层有一个神经元。第一层的转移函数是tansigmoid输出层的转移函数是linear。输入向量的第一个元素的范围是到输入向量的第二个元素的范围是到训练函数是traingd。net=newff(,,,{'tansig','purelin'},'traingd')这个命令建立了网络对象并且初始化了网络权重和偏置因此网络就可以进行训练了。我们可能要多次重新初始化权重或者进行自定义的初始化。下面就是初始化的详细步骤。在训练前馈网络之前权重和偏置必须被初始化。初始化权重和偏置的工作用命令init来实现。这个函数接收网络对象并初始化权重和偏置后返回网络对象。下面就是网络如何初始化的:net=init(net)我们可以通过设定网络参数netinitFcn和netlayer{i}initFcn这一技巧来初始化一个给定的网络。netinitFcn用来决定整个网络的初始化函数。前馈网络的缺省值为initlay它允许每一层用单独的初始化函数。设定了netinitFcn那么参数netlayer{i}initFcn也要设定用来决定每一层的初始化函数。对前馈网络来说有两种不同的初始化方式经常被用到:initwb和initnw。initwb函数根据每一层自己的初始化参数(netinputWeights{i,j}initFcn)初始化权重矩阵和偏置。前馈网络的初始化权重通常设为rands它使权重在到之间随机取值。这种方式经常用在转换函数是线性函数时。initnw通常用于转换函数是曲线函数。它根据Nguyen和WidrowNgWi为层产生初始权重和偏置值使得每层神经元的活动区域能大致平坦的分布在输入空间。它比起单纯的给权重和偏置随机赋值有以下优点:()减少神经元的浪费(因为所有神经元的活动区域都在输入空间内)。()有更快的训练速度(因为输入空间的每个区域都在活动的神经元范围中)。初始化函数被newff所调用。因此当网络创建时它根据缺省的参数自动初始化。init不需要单独的调用。可是我们可能要重新初始化权重和偏置或者进行自定义的初始化。例如我们用newff创建的网络它缺省用initnw来初始化第一层。如果我们想要用rands重新初始化第一层的权重和偏置我们用以下命令:netlayers{}initFcn='initwb'netinputWeights{,}initFcn='rands'netbiases{,}initFcn='rands'netbiases{,}initFcn='rands'net=init(net)网络模拟(SIM)函数sim模拟一个网络。sim接收网络输入p网络对象net返回网络输出a这里是simuff用来模拟上面建立的带一个输入向量的网络。p=a=sim(net,p)a=(用这段代码得到的输出是不一样的这是因为网络初始化是随机的。)下面调用sim来计算一个同步输入向量网络的输出:p=a=sim(net,p)a=网络训练一旦网络加权和偏差被初始化网络就可以开始训练了。我们能够训练网络来做函数近似(非线性后退)模式结合或者模式分类。训练处理需要一套适当的网络操作的例子网络输入p和目标输出t。在训练期间网络的加权和偏差不断的把网络性能函数netperformFcn减少到最小。前馈网络的缺省性能函数是均方误差mse网络输出和目标输出t之间的均方误差。这章的余项将描述几个对前馈网络来说不同的训练算法。所有这些算法都用性能函数的梯度来决定怎样把权重调整到最佳。梯度由叫做反向传播的技术决定它要通过网络实现反向计算。反向传播计算源自使用微积分的链规则。基本的反向传播算法的权重沿着梯度的负方向移动这将在下一节讲述。以后的章节将讲述更复杂的算法以提高收敛速度。反向传播算法反向传播算法中有许多变量这一章将讨论其中的一些。反向传播学习算法最简单的应用是沿着性能函数最速增加的方向梯度的负方向更新权重和偏置。这种递归算法可以写成:xk=xkakgk这里xk是当前权重和偏置向量gk是当前梯度ak是学习速率。有两种不同的办法实现梯度下降算法:增加模式和批处理模式。在增加模式中网络输入每提交一次梯度计算一次并更新权重。在批处理模式中当所有的输入都被提交后网络才被更新。下面两节将讨论增加模式和批处理模式。增加模式训练法(ADAPT)函数adapt用来训练增加模式的网络它从训练设置中接受网络对象、网络输入和目标输入返回训练过的网络对象、用最后的权重和偏置得到的输出和误差。这里有几个网络参数必须被设置第一个是netadaptFcn它决定使用哪一种增加模式函数缺省值为adaptwb这个值允许每一个权重和偏置都指定它自己的函数这些单个的学习函数由参数netbiases{i,j}learnFcn、netinputWeights{i,j}learnFcn、netlayerWeights{i,j}learnFcn和GradientDescent(LEARDGD)来决定。对于基本的梯度最速下降算法权重和偏置沿着性能函数的梯度的负方向移动。在这种算法中单个的权重和偏置的学习函数设定为"learngd"。下面的命令演示了怎样设置前面建立的前馈函数参数:netbiases{,}learnFcn='learngd'netbiases{,}learnFcn='learngd'netlayerWeights{,}learnFcn='learngd'netinputWeights{,}learnFcn='learngd'函数learngd有一个相关的参数学习速率lr。权重和偏置的变化通过梯度的负数乘上学习速率倍数得到。学习速率越大步进越大。如果学习速率太大算法就会变得不稳定。如果学习速率太小算法就需要很长的时间才能收敛。当learnFcn设置为learngd时就为每一个权重和偏置设置了学习速率参数的缺省值如上面的代码所示当然你也可以自己按照意愿改变它。下面的代码演示了把层权重的学习速率设置为。我们也可以为权重和偏置单独的设置学习速率。netlayerWeights{,}learnParamlr=为有序训练设置的最后一个参数是netadaptParampasses它决定在训练过程中训练值重复的次数。这里设置重复次数为netadaptParampasses=现在我们就可以开始训练网络了。当然我们要指定输入值和目标值如下所示:p=t=如果我们要在每一次提交输入后都更新权重那么我们需要将输入矩阵和目标矩阵转变为细胞数组。每一个细胞都是一个输入或者目标向量。p=numcell(p,)t=numcell(t,)现在就可以用adapt来实现增加方式训练了:net,a,e=adapt(net,p,t)训练结束以后我们就可以模拟网络输出来检验训练质量了。a=sim(net,p)a=带动力的梯度下降法(LEARDGDM)除了learngd以外还有一种增加方式算法常被用到它能提供更快的收敛速度learngdm,带动量的最速下降法。动力允许网络不但根据当前梯度而且还能根据误差曲面最近的趋势响应。就像一个低通滤波器一样动量允许网络忽略误差曲面的小特性。没有动量网络又可能在一个局部最小中被卡住。有了动量网络就能够平滑这样的最小。动量能够通过把权重变得与上次权重变化的部分和由算法规则得到的新变化的和相同而加入到网络学习中去。上一次权重变化对动量的影响由一个动量常数来决定它能够设为到之间的任意值。当动量常数为时权重变化之根据梯度得到。当动量常数为时新的权重变化等于上次的权重变化梯度值被忽略了。Learngdm函数有上面所示的learngd函数触发除非mc和lr学习参数都被设置了。由于每一个权重和偏置有它自己的学习参数每一个权重和偏置都可以用不同的参数。下面的命令将用lerangdm为前面建立的用增加方式训练的网络设置缺省的学习参数:netbiases{,}learnFcn='learngdm'netbiases{,}learnFcn='learngdm'netlayerWeights{,}learnFcn='learngdm'netinputWeights{,}learnFcn='learngdm'net,a,e=adapt(net,p,t)批处理训练方式训练的另一种方式是批处理方式它由函数train触发。在批处理方式中当整个训练设置被应用到网络后权重和偏置才被更新。在每一个训练例子中的计算的梯度加在一起来决定权重和偏置的变化。批处理梯度下降法(TRAINGD)与增加方式的学习函数learngd等价的函数是traingd它是批处理形式中标准的最速下降学习函数。权重和偏置沿着性能函数的梯度的负方向更新。如果你希望用批处理最速下降法训练函数你要设置网络的trainFcn为traingd并调用train函数。不像以前章节的学习函数它们要单独设置权重矩阵和偏置向量这一次给定的网络只有一个学习函数。Traingd有几个训练参数:epochs,show,goal,time,mingrad,maxfail和lr。这里的学习速率和lerangd的意义是一样的。训练状态将每隔show次显示一次。其他参数决定训练什么时候结束。如果训练次数超过epochs,性能函数低于goal梯度值低于mingrad或者训练时间超过time训练就会结束。下面的代码将重建我们以前的网络然后用批处理最速下降法训练网络。(注意用批处理方式训练的话所有的输入要设置为矩阵方式)net=newff(,,,{'tansig','purelin'},'traingd')nettrainParamshow=nettrainParamlr=nettrainParamepochs=nettrainParamgoal=ep=t=net=train(net,p,t)TRAINGD,Epoch,MSEe,GradienteTRAINGD,Epoch,MSEe,GradienteTRAINGD,Epoch,MSEe,GradienteTRAINGD,Epoch,MSEee,GradienteTRAINGD,Epoch,MSEee,GradienteTRAINGD,Epoch,MSEee,GradienteTRAINGD,Performancegoalmeta=sim(net,p)a=用nndsd来演示批处理最速下降法的性能。带动量的批处理梯度下降法(TRAINGDM)带动量的批处理梯度下降法用训练函数traingdm触发。这种算法除了两个例外和learmgdm是一致的。第一.梯度是每一个训练例子中计算的梯度的总和并且权重和偏置仅仅在训练例子全部提交以后才更新。第二.如果在给定重复次数中新的性能函数超过了以前重复次数中的性能函数的预定义速率maxperfinc(典型的是)倍那么新的权重和偏置就被丢弃并且动量系数mc就被设为。在下面的代码重我们重建了以前的网络并用带动量的梯度下降算法重新训练。Traingdm的训练参数和traingd的一样动量系数mc和性能最大增量maxperfinc也是如此。(无论什么时候只要nettrainFcn倍设为traingdm,训练参数就被设为缺省值。)net=newff(,,,{'tansig','purelin'},'traingdm')nettrainParamshow=nettrainParamlr=nettrainParammc=nettrainParamepochs=nettrainParamgoal=ep=t=net=train(net,p,t)TRAINGDM,Epoch,MSEe,GradienteTRAINGDM,Epoch,MSEe,GradienteTRAINGDM,Epoch,MSEee,GradienteTRAINGDM,Epoch,MSEee,GradienteTRAINGDM,Performancegoalmeta=sim(net,p)a=注意既然我们在训练前重新初始化了权重和偏置我们就得到了一个和使用traingd不同的均方误差。如果我们想用traingdm重新初始化并且重新训练,我们仍将得到不同的军方误差。初始化权重和偏置的随机选择将影响算法的性能。如果我们希望比较不同算法的性能我们应该测试每一个使用着的不同的权重和偏值的设置。用nndmo来演示批处理最速下降法的性能。

用户评价(2)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/20

Matlab神经网络工具箱应用简介

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利