计算机MATLAB神经网络工具箱.ppt_第1页
计算机MATLAB神经网络工具箱.ppt_第2页
计算机MATLAB神经网络工具箱.ppt_第3页
计算机MATLAB神经网络工具箱.ppt_第4页
计算机MATLAB神经网络工具箱.ppt_第5页
已阅读5页,还剩290页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,计算机MATLAB神经网络 工具箱 1 MATLAB神经网络工具箱函数 2 MATLAB神经网络工具箱的图形用户界面 3 基于Simulink的神经网络模块 4 神经网络在系统预测和故障诊断中的应用,2,本章将介绍MATLAB神经网络工具箱的应用。在MATLAB神经网络工具箱中提供了丰富的演示实例,用MATLAB语言构造了典型神经网络的激活函数,编写了各种网络设计与训练的子程序,网络的设计者可以根据自己的需要去调用工具箱中有关神经网络的设计训练程序,使自己能够从繁琐的编程中解脱出来。,3,MATLAB神经网络工具箱提供了许多进行神经网络设计和分析的工具函数,这些函数的MATLAB实现,使得设计者对所选定网络进行计算的过程,转变为对函数的调用和参数的选择,这给用户带来了极大的方便,即使不了解算法的本质,也可以直接应用功能丰富的函数来实现自己的目的。有关这些工具函数的使用可以通过help命令得到,本章将对这些函数的功能、调用格式,以及使用方法做详细的介绍。,1 MATLAB神经网络工具箱函数,4,随着MATLAB软件的版本提高,其对应的神经网络工具箱的内容越来越丰富,它包括了很多现有的神经网络的新成果,涉及的网络模型有,感知机网络、线性神经网络、BP神经网络、径向基神经网络、自组织神经网络、学习向量量化神经网络、Elman神经网络、Hopfield神经网络、自适应滤波和控制系统网络等。,5,1.1 神经网络工具箱中的通用函数 MATLAB神经网络工具箱中提供的函数主要分为两大部分。一部分函数是通用的,这些函数几乎可以用于所有类型的神经网络,如神经网络的初始化函数init( )、训练函数train( )和仿真函数sim( )等;另一部分函数则是特别针对某一种类型的神经网络的,如对感知机神经网络进行建立的函数simup( )等。表2-1列出了一些通用函数的名称和基本功能。,6,表2-1 神经网络的通用函数和功能,7,1. 初始化神经网络函数init( ) 利用初始化神经网络函数init( )可以对一个已存在的神经网络进行初始化修正,该网络的权值和偏值是按照网络初始化函数来进行修正的。其调用格式为: net=init(NET),8,2. 神经网络某一层的初始化函数initlay( ) 初始化函数initlay( )特别适用于层-层结构神经网络的初始化,该网络的权值和偏值是按照网络初始化函数来进行修正的。其调用格式为: net=initlay(NET),9,3. 神经网络某一层的权值和偏值初始化函数initwb( ) 利用初始化函数initwb( )可以对一个已存在的神经网络的NET某一层i的权值和偏值进行初始化修正,该网络对每层的权值和偏值是按照设定的每层的初始化函数来进行修正的。其调用格式为: net=initwb(NET,i),10,4. 神经网络训练函数train( ) 利用train( ) 函数可以训练一个神经网络。网络训练函数是一种通用的学习函数,训练函数重复地把一组输入向量应用到一个网络上,每次都更新网络,直到达到了某种准则。停止准则可能是最大的学习步数、最小的误差梯度或者是误差目标等,调用格式为: net,tr,Y,E,Xf,Af=train(NET,X,T,Xi,Ai),11,5. 网络自适应训练函数adapt( ) 另一种通用的训练函数是自适应函数adapt( )。自适应函数在每一个输入时间阶段更新网络时仿真网络,而这在进行下一个输入的仿真前完成,其调用格式为: net,Y,E,Xf,Af,tr= adapt(NET,X,T,Xi,Ai),12,6. 网络仿真函数sim( ) 神经网络一旦训练完成,网络的权值和偏值就已经确定了。于是就可以使用它来解决实际问题了。利用sim( ) 函数可以仿真一个神经网络的性能。其调用格式为: Y,Xf,Af,E,perf=sim(net,X,Xi,Ai,T) 或 Y,Xf,Af,E,perf=sim(net,Q Ts,Xi,Ai),13,7. 权值点积函数dotprod( ) 网络输入向量与权值的点积可得到加权输入。函数dotprod ( )的调用格式为: Z=dotprod (W,X) 8. 网络输入的和函数netsum( ) 网络输入的和函数是通过某一层的加权输入和偏值相加作为该层的输入。调用格式: Z=netprod(Z1,Z2,),14,9. 网络输入的积函数netprod( ) 网络输入的积函数是通过某一层的加权输入和偏值相乘作为该层的输入。调用格式: Z=netprod(Z1,Z2,) 10. 结构一致函数concur( ) 函数concur( )的作用在于使得本来不一致的权值向量和偏值向量的结构一致,以便于进行相加或相乘运算,其调用格式为: Z=concur(b,q) 。,15,例2-1 利用netsum( )函数和netprod( )函数,对两个加权输入向量Z1和Z2进行相加和相乘。 解 MATLAB的程序如下。 Z1=1 2 4;3 4 1;Z2=-1 2 2;-5 -6 1; b=0;-1;q=3; Z=concur(b,q) X1=netsum(Z1,Z2),X2=netprod(Z1,Z2) %计算向量的和与积 结果显示: Z = 0 0 0 -1 -1 -1 X1 = 0 4 6 -2 -2 2 X2 = -1 4 8 -15 -24 1,16,1.2 感知机神经网络工具箱函数 MATLAB神经网络工具箱中提供了大量的与感知机相关的的函数。在MATLAB工作空间的命令行键入“help percept”,便可得到与感知机(Perceptron)相关的函数,进一步利用help命令又能得到相关函数的详细介绍。表2-2列出了这些函数的名称和基本功能。,17,表2-2 感知机网络的重要函数和功能,18,1平均绝对误差性能函数mae( ) 感知机网络学习规则为调整网络的权值和偏值,使网络的平均绝对误差和性能最小。平均绝对误差性能函数的调用格式为: perf=mae(E,w,pp),19,2硬限幅传输函数hardlim( ) 硬限幅传输函数hardlim( )通过计算网络的输入得到该层的输出。如果网络的输入达到门限,则硬限幅传输函数的输出为1,否则为0。这表明神经元可用来作出判断或分类。其调用格式为: a=hardlim(N) 或 a=hardlim(Z,b) a=hardlim(P),20,返回的元素a是1还是0,取决于网络输入矩阵中的元素是大于等于0还是小于0;函数hardlim(P)包含传输函数的特性名并返回问题中的特性,如下的特性可从任何传输函数中获得: (1)delta与传输函数相关的delta函数; (2)init传输函数的标准初始化函数; (3)name传输函数的全称; (4)output包含有传输函数最小、最大值的二元矢量。 例利用以下命令可得图2-1。 N=-5:0.1:5; a=hardlim(N);plot(N,a),图2-1 硬限幅传输函数曲线,21,3对称硬限幅传输函数hardlims( ) 对称硬限幅传输函数hardlims( )通过计算网络的输入得到该层的输出。如果网络的输入达到门限,则硬限幅传输函数的输出为1,否则为-1。例 w=eye(3);b=-0.5*ones(3,1); X=1 0;0 1;1 1; a=hardlims(w*X,b) 结果显示: a = 1 -1 -1 1 1 1,22,例2-2 建立一个感知机网络,使其能够完成“或”的功能。 解 为了完成“或”函数,建立一个两输入、单输出的一个单层感知机网络。 设输入向量为:X=0 0 1 1;0 1 0 1, 目标向量为:T=0 1 1 1。 激活函数取硬限幅传输函数。 根据感知机学习算法的计算步骤,利用MATLAB的神经网络工具箱的有关函数编写的程序如下。 ex2_2,23,结果显示: epoch = 3 Wij = 1.5028 1.7095 y = 0 1 1 1,24,4. 绘制样本点的函数plotpv( ) 利用plotpv( ) 函数可在坐标图中绘出已知给出的样本点及其类别,不同的类别使用了不同的符号。其调用格式为: plotpv(X,T) 如果T只含一元矢量,目标0的输入矢量画为“o”; 目标1的输入矢量画为“+”; 如果T含二元矢量,则输入矢量对应如下:0 0用“o”;0 1用“+”;1 0用“*”;1 1用“”。例,25,X=-0.5,-0.5,0.3,-0.1,0.2,0.0,0.6,0.8; -0.5,0.5,-0.5,1.0,0.5,-0.9,0.8,-0.6; T=1 1 0 1 1 0 1 0; plotpv(X,T) 对样本不同的类别使用了不同的符号,如图2-2所示。,图2-2 样本的分类,26,5. 在存在的图上画感知机的分类线函数plotpc( ) 硬特性神经元将输入空间用一条直线(如果神经元有两个输入),或用一个平面(如果神经元有三个输入),或用一个超平面(如果神经元有三个以上输入)分成两个区域。plotpc(w,b)对含权矩阵w和偏差矢量b的硬特性神经元的两个或三个输入画一个分类线。这一函数返回分类线的句柄以便以后调用。plotpc(w,b,h)包含从前的一次调用中返回的句柄,它在画新分类线之前,删除旧线。,27,6. 感知机神经网络的初始化函数initp( ) 利用initp( ) 函数可建立一个单层(一个输入层和一个输出层)感知机神经网络。其调用格式为: W,b=initp(R,S) 或 W,b=initp(X,T),28,例利用以下命令,可得图1-54。 X=0 0 1 1;0 1 0 1;T=0 1 1 1; W,b=initp(X,T); plotpv(X,T);plotpc(W,b); 使用plotpc( )函数可以在已绘制的图上加上感知机分类线(MATLAB6.1 及以下版本利用此命令 不能产生分类线),如 图2-3所示。由图可见 经过初始化后的网络对 输入样本还不能正确进 行分类。,图2-3 输入样本加网络初始分类线,29,7用感知机准则训练感知机的函数trainp( ) 经过初始化建立的感知机,还必须经过训练才能够实际应用。通过训练以决定网络的权值和偏值。对于感知机,其训练过程为:对于给定的输入向量,计算网络的实际输出,并与相应的目标向量进行比较,得到误差,然后根据相应的学习规则调整权值和偏值。重新计算网络在新的权值和偏值作用下的输出,重复上述的权值和偏值的调整过程,直到网络的输出与期望的目标向量相等或者训练次数达到预定的最大次数时才停止训练,之所以要设定最大训练次数,是因为对于有些问题,使用感知机神经网络时是不能解决的,这正是感知机的缺点。,30,训练感知机神经网络trainp( ) 函数的调用格式为: W,B,epochs,errors= trainp(w,b,X,T,tp),31,例2-4 利用trainp( )函数训练一个感知机网络,并用训练后的网络对输入样本进行分类。 解 程序如下。 ex2_4 例利用以上程序,可得如图2-4所示的样本及分类线。 用标准化感知机准则训 练感知机的函数trainpn( ) 的用法同函数trainp( ), 即使输入矢量的长度不同, 使用标准化感知机准则也 使得学习过程收敛很快。,图2-4 样本加分类线,32,8. 感知机神经网络的仿真函数simup( ) 神经网络一旦训练完成,网络的权值和偏值就已经确定了。于是就可以使用它来解决实际问题了。感知机由一系列硬特性神经元组成,运行速度很快,对简单的分类很有用。利用simup( ) 函数可以测试一个感知机神经网络的性能。其调用格式为: Y=simup(X,w,b),33,例2-5 利用trainp( )函数训练一个感知机网络,使其能够完成“或”的功能。 解 根据神经网络工具箱函数编写的程序如下。 ex2_5,执行以上程序可得如下结果以及图2-5至图2-8。 y = 0 1 1 1 由以上结果和图2-7可知,训练后的网络已具有“或”的功能,且可对输入样本进行正确分类,34,图2-5 输入样本的分类 图2-6 输入样本加网络初始分类线,图2-7 输入样本加网络训练后的分类线 图2-8 误差曲线,35,例2-6 利用trainp( )函数训练一个感知机网络,使其能够对三个输入进行分类。 解 根据神经网络工具箱函数编写的程序如下。 ex2_6 执行以上程序可得如下结果以及图2-9至图2-12。 y = 0 1 0 0 1 1 0 1,36,图2-9 输入样本的分类 图2-10 输入样本加网络初始分类线,图2-11 输入样本加网络训练后的分类线 图2-12 误差曲线,37,例2-7 利用trainp( )函数训练一个感知机网络,使其能够将输入分为4类。 解 根据神经网络工具箱函数编写的程序如下。 ex2-7,38,执行以上程序可得如下结果以及图2-13和图2-14。 y = 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 图2-13 输入样本加网络训练后的分类线 图2-14 误差曲线,39,9感知机学习函数learnp( ) 感知机神经网络学习规则为调整网络的权值和偏值使网络平均绝对误差性能最小,以便对网络输入矢量正确分类。感知机的学习规则只能训练单层网络,函数调用格式为: dW, db=learnp(X,E),40,例2-8 利用learnp( )函数训练建立一个感知机网络,使其能够完成“或”的功能。 解 根据神经网络工具箱函数编写的程序如下。 ex2_8,41,结果显示: epoch = 5 W = 1.3626 1.7590 y = 0 1 1 1,42,10标准化感知机学习函数learnpn( ) 感知机学习规则在调整网络的权值和偏值时利用下式 从上式可以看出,输入向量X越大,则权值的变化w就越大。当存在奇异样本(即该样本向量同其它所有的样本向量比较起来,特别得大或者特别得小)时,利用以上规则训练时间大为加长。因为其它样本则需花很多时间才能同奇异样本所对应的权值变化相匹配。为了消除学习训练时间对奇异样本的敏感性,提出了一种改进的感知机学习规则,也成为标准化感知机学习规则,标准化感知机学习规则试图使奇异样本和其它样本对权值的变化值的影响均衡,它可通过下式实现,43,标准化感知机的学习函数为learnpn( ),其调用格式为: dW, db=learnpn(X,E) 相应于标准化感知机学习规则的训练函数为trainpn( ),其调用格式为: W,B,epochs,errors= trainpn(w,b,X,T,tp),44,例2-9 利用trainpn( )函数训练建立一个感知机网络,观察奇异输入样本对训练结果的影响。 解 根据神经网络工具箱函数编写的程序如下。 ex2_9,45,执行以上程序可得如下结果以及图2-15和图2-16。 y = 1 1 0 0 1,图2-15 输入样本加网络训练后的分类线 图2-16 误差曲线,由图2-16可见利用函数trainpn( ),网络训练只需要2步,如果利用函数trainp( ),网络训练需要经过60多步。,46,例2-10 利用trainpn( )函数训练建立一个感知机网络,对“异或”问题进行分类。 解 单层感知机不能解决像逻辑“异或”一类的线性不可分的输入向量的分类问题,解决这一问题的方案,是可以设计一个两层的网络,即含有输入层,隐含层和输出层的结构。设输入向量为:X=0 0 1 1;0 1 0 1,目标向量为:T=0 1 1 0。根据神经网络工具箱函数编写的程序ex2_10.m如下。 %ex2_10.m,执行以上程序可得如下结果以及图2-17和图2-18。 y = 0 1 1 0,47,由图2-18可见网络训练只需要4步。需要指出的是,由于隐含层的权值和偏值是随机给定的而且不可调整,故隐含层的输出也是随机的,这样网络有可能有解,也有可能无解,如果网络找不到解,可再次运行网络,以重新初始化隐含层的权值和偏值。如果采用单层网络,对以上问题永远也找不到正确的分类方案。,48,11. 建立感知机神经网络函数newp( ) 利用newp( ) 函数可建立一个感知机神经网络。其调用格式为: net=newp(Xr,S,Tf,Lf) 例建立一个两输入且样本点取值在-1,1之间,而网络只有单个神经元的感知机神经网络,可利用以下命令 net=newp(-1 1;-1 1,1);,49,使用plotpc( )函数可以在已绘制的图上加上感知机分类线。让它返回得到的分类线的句柄,以便在下一次再绘制分类线时能够将原来的删除。例 handle=plotpc(net.iw1,net.b1); 式中 net.iw1用来计算网络net的权值,net.b1用来计算网络net的偏值。,50,例2-11 利用newp( )和train( )函数建立并训练一个感知机网络,使其同样能够完成“或”的功能。 解 根据神经网络工具箱函数编写的程序如下。 ex2_11 执行结果 y = 0 1 1 1,51,例2-12 利用train( )函数训练一个感知机网络,并选择10个点对其进行测试。 解 根据神经网络工具箱函数编写的程序ex2_12.m如下。 ex2_12.m 运行以上命令可得如图2-20和图2-21所示的训练过程误差曲线和测试结果。由图可见网络训练只需5步,就能够将它们正确分类,这说明了设计的网络是正确的。,52,1.3 线性神经网络工具箱函数 MATLAB神经网络工具箱中提供了大量的与线性网络相关的的工具箱函数。在MATLAB工作空间的命令行键入“help linnet”,便可得到与线性网络相关的函数,进一步利用help命令又能得到相关函数的详细介绍。表2-3列出了这些函数的名称和基本功能。,53,表2-3 线性网络的重要函数和功能,54,1误差平方和性能函数sse( ) 线性网络学习规则为调整网络的权值和偏值使网络误差平方和性能最小。误差平方和性能函数的调用格式为: perf=sse(E,w,pp),55,2. 线性传输函数purelin( ) 神经元最简单的传输函数是简单地从神经元输入到输出的线性传输函数,输出仅仅被神经元所附加的偏差所修正。线性传输函数常用于Widriw-Hoff或BP准则来训练的神经网络中,该函数调用格式为: a=purelin(N) 或 a=purelin(Z,b) a=purelin(P),56,函数purelin(P)包含传输函数的特性名并返回问题中的特性,如下的特性可从任何传输函数中获得: (1)delta与传输函数相关的delta函数; (2)init传输函数的标准初始化函数; (3)name传输函数的全称; (4)output包含有传输函数最小、最大值的二元矢量。 例利用以下命令可得图2-22。 n=-5:0.1:5;b=0; a=purelin(n,b);plot(n,a),图2-22 线性传输函数,57,3. 线性神经网络的初始化函数initlin( ) 利用initlin( ) 函数可建立一个单层(一个输入层和一个输出层)线性神经网络。其调用格式为: W,b=initlin(R,S) 或 W,b=initlin(X,T) 例 X=0 0 1 1;0 1 0 1; T=0 1 1 1; W,b=initlin(X,T);,58,4. 设计一个线性神经网络函数solvelin( ) 同大多数其它神经网络不同的是,只要已知线性神经网络的输入向量和目标向量,就可以直接对其进行设计。使用函数solvelin( )设计的线性神经网络,可以不经过训练,直接找出网络的权值和偏值,使得网络的误差的平方和最小。该函数的调用格式为: W,b=solvelin(X,T),59,5. 线性神经网络的仿真函数simulin( ) 利用函数solvelin( )建立的线性神经网络的权值和偏值就已经根据网络的输入向量和目标向量训练好了。simulin( ) 函数可以测试一个线性神经网络的性能。其调用格式为: Y=simulin(X,w,b),60,例2-13 利用solvelin( )函数建立一个线性网络,并对其进行测试。 X=1 2 3;T=2.0 4.1 5.9; %给定训练集和目标值 W,b=solvelin(X,T);y=simulin(X,W,b) 结果显示: y= 2.0500 4.0000 5.9500,61,6. 计算线性层的最大学习速率函数maxlinlr( ) 函数maxlinlr( ) 用于计算用Widrow-Hoff准则训练的线性网络的最大稳定学习速率。其调用格式为: lr=maxlinlr(X) 或 lr=maxlinlr(X,b) 例利用以下命令可计算出用Widrow-Hoff准则训练的线性神经元层所用的学习率上限。 X=1 2 -4 7;0.1 3 10 6; lr=maxlinlr(X) 结果显示: lr = 0.0069,62,7线性神经网络学习函数learnwh( ) 线性网络采用Widrow-Hoff学习规则,Widrow-Hoff学习规则只能训练单层的线性神经网络,但这并不影响单层线性神经网络的应用,因为对每一个多层线性神经网络而言,都可以设计出一个性能完全相当的单层线性神经网络。当利用函数solvelin( )设计的线性神经网络不能调整网络的权值和偏值使网络误差平方和性能最小时,可以应用函数learnwh( )和 函数trainwh( )来调整网络的权值和偏值。函数learnwh( )的调用格式为: dW, db=learnwh(X,E,lr),63,8线性神经网络的训练函数trainwh( ) 函数trainwh( )可利用Widrow-Hoff学习规则对线性层的权值进行训练,利用输入矢量,计算该层输出矢量,然后根据产生的误差矢量调整该层的权值和偏差。调用格式为: W,B,epochs,errors= trainwh(w,b,X,T,tp),64,9. 线性神经网络自适应训练函数adaptwh( ) 函数adaptwh( )可以利用Widrow-Hoff学习规则对线性层的权值进行自适应调节,在每一步迭代过程中,修改自适应线性网络层的权值、偏差和输出矢量,从而学习并适应环境的变化。其调用格式为: Y,E,W,B= adaptwh(w,b,X,T,lr),65,10. 设计一个线性层函数newlind( ) 利用函数newlind( )设计出的线性网络已经训练好,可直接使用,该函数调用格式为: net=newlind(X,T),66,例2-14 利用newlind( )函数建立一个线性网络,并对其进行测试。 解 MATLAB程序ex2_14.m如下。 %ex2_14.m X=1 2 3;T=2.0 4.1 5.9; %给定训练集和目标值 net=newlind(X,T); y=sim(net,X) 执行结果: y= 2.0500 4.0000 5.9500,67,11. 新建一个线性层函数newlin( ) 利用函数newlin( )设计的线性网络,还需训练,该函数调用格式为: net=newlin(Xr,S,Id,lr) 例建立一个线性网络。可利用以下命令 X=1 2 3;S=1;net=newlin(minmax(X),S);,68,执行结果可得图2-23和图2-24。 图2-23 系统输入输出曲线 图2-24 网络预测输出与系统输出和误差,例2-15 利用线性网络进行系统辨识。 解 MATLAB程序如下: ex2_15,69,执行结果可得图2-25和图2-26。 图2-25 网络待预测的目标信号 图2-26 网络预测输出与目标值,例2-16 利用线性网络进行自适应预测。 解 方法一: MATLAB程序如下: ex2_16_1,70,执行结果可得图2-27和图2-28。 图2-27 网络待预测的目标信号 图2-28网络预测输出与误差,方法二:MATLAB程序如下: ex2_16_2,71,执行结果可得图2-29和图2-30。 图2-29 网络待预测的目标信号 图2-30 网络预测输出目标信号与误差,例2-17 利用线性网络预测一个时变信号序列。 解 MATLAB程序如下: ex2_17,72,1.4 BP神经网络工具箱函数 MATLAB神经网络工具箱中提供了大量的进行BP网络分析和设计的工具箱函数。在MATLAB工作空间的命令行键入“help backprop”,便可得到与BP神经网络相关的函数,进一步利用help命令又能得到相关函数的详细介绍。表2-4列出了这些函数的名称和基本功能。,73,表2-4 BP网络的重要函数和功能,74,75,1均方误差性能函数mse( ) BP神经网络学习规则为调整网络的权值和偏值,使网络的均方误差和性能最小。均方误差性能函数的调用格式为: perf=mse(E,w,pp),76,2. 双曲正切S型(Sigmoid)传输函数tansig( ) 双曲正切Sigmoid函数把神经元的输入范围从 (-,+)映射到(-1,+1),它是可导函数,适用于BP训练的神经元,函数调用格式为: a=tansig(N) 或 a=tansig(Z,b) tansig (P),77,函数tansig (P)包含传输函数的特性名并返回问题中的特性,如下的特性可从任何传输函数中获得: (1)delta与传输函数相关的delta函数; (2)init传输函数的标准初始化函数; (3)name传输函数的全称; (4)output包含有传输函数最小、最大值的二元矢量。 例利用以下命令可得图2-31。 n=-5:0.1:5;b=0; a=tansig(n,b);plot(n,a),图2-31 双曲正切曲线,78,如果BP网络的最后一层是Sigmoid型神经元,那么整个网络的输出就被限制在一个较小的范围内;如果BP网络的最后一层是Purelin型线性神经元,那么整个网络的输出可以取任意值。,79,3. 正切S型(Tansig)神经元的求导函数dtansig( ) 函数dtansig( )为Tansig神经元的导函数,它根据Y=1-X2的函数来计算,其调用格式为: dY_dX =dtansig(X,Y) Logsig和Purelin神经元的导函数dlogsig( )和dpurelin( )的用法同上。但它们分别根据Y=X*(1-X)和Y=1的函数来计算。例利用以下MATLAB命令 X=0.1 0.8 0.7;Y=tansig(x),dY_dX=dtansig(X,Y) 结果显示: Y= 0.0997 0.6640 0.6044 dY_dX= 0.9901 0.5591 0.6347,80,4. 正切S型(Tansig)神经元的求导函数deltatan ( ) 反向传播误差算法(BP)是利用误差平方和对网络各层输入的导数来调整其权值和偏值的,从而降低误差平方和。从网络误差矢量中可推导出输出层的误差导数或(delta)矢量,隐含层的矢量的导出,这种矢量的反向传播正是BP算法的由来。函数调用格式为: dy=deltatan(y) 或 dy=deltatan(y,e) dy=deltatan(y,d2,w2),Logsig和Purelin神经元的delta函数deltalog( )和deltalin( )的用法同上。,81,5.BP学习规则函数learnbp( ) BP神经网络学习规则为调整网络的权值和偏值使网络误差的平方和为最小。这是通过在最速下降方向上不断地调整网络的权值和偏值来达到的。计算网络输出层的误差矢量导数,然后反馈回网络,直到每个隐含层的误差导数(称为delta)都达到。这可由函数deltatan( )、deltalin( )和deltalog( )计算。根据BP准则,每一层的权值矩阵w利用本层的向量和输入向量x来更新,即w(i,j)=(i)x(j) 。函数调用格式为 dW,dB=learnbp(X,delta,lr),82,6. 含动量规则的BP学习规则函数learnbpm( ) 为了提高BP算法的学习速度并增加算法的可靠性,在BP学习算法中引进了动量因子,它使权值的变化等于上次权值的变化与这次由BP准则引起的变化之和,这样可将动量加到BP学习中,上一次权值变化的影响可由动量常数来调整。动量法降低了网络对于误差曲面局部细节的敏感性,有效地抑制网络陷于局部极小。而自适应学习率,也可以使训练时间大大缩短。当动量常数为0时,说明权值的变化仅由梯度决定。,83,当动量常数为0时,说明权值的变化仅由梯度决定。当动量常数为1时,说明新的权值变化仅等于上次权值变化,而忽略掉梯度项,其数学表达式为w(i,j)=Dw(i,j)+(1-D)(i)x(j)。函数调用格式为 dW,dB=learnbpm(X,delta,lr,D,dw,db),84,7. Levenberg-Marguardt学习规则函数learnlm( ) 函数learnlm( )采用了Levenberg-Marguardt优化方法,从而使得学习时间更短。其缺点是,对于复杂的问题,该方法需要很大的存储空间。LM方法更新参数(如权值和偏值)的数学表达式为w=(JTJ+I)-1JTe。随着的增大,LM方法中的JTJ 项变得无关紧要,因而学习过程由 -1JTe决定,即梯度下降法。函数调用格式为 dW,dB=learnlm(X,delta),85,例2-18 利用三层BP神经网络训练加权系数。两组3输入为1 2;-1 1;1 3,希望的输出均为1,1。隐含层的激活函数取S型传输函数,输出层的激活函数取线性传输函数。 解 根据BP学习算法的计算步骤,利用MATLAB的神经网络工具箱的有关函数编写的程序如下。 ex2_18 结果显示: Ok = 1.0068 0.9971 0.9758 1.0178,86,8. BP神经网络初始化函数initff( ) 在设计一个BP网络时,只要已知网络的输入向量的取值范围、各层的神经元个数及传输函数,就可以利用初始化函数initff( )对BP网络进行初始化。函数initff( )可最多对三层神经网络进行初始化,而得到每层的权值和偏值。其调用格式为: W,b=initff (Xr,S,Tf) 或 W1,b1,W2,b2=initff (Xr,S1,Tf1, S2,Tf2) W1,b1,W2,b2,W3,b3=initff (Xr,S1,Tf1, S2,Tf2, S3,Tf3),87,例如设计一个隐含层有8个神经元,传输函数为tansig,输出层有5个神经元,传输函数为purelin的两层BP神经网络可利用以下命令。 X=sin(0:100);cos(0:100*2); W1,b1,W2,b2=initff(X,8,tansig,5,purelin),88,9. 利用BP算法训练前向网络函数trainbp( ) BP神经网络学习规则为调整网络的权值和偏值使网络误差的平方和为最小。这是通过在最速下降方向上不断地调整网络的权值和偏值来达到的。函数调用格式为: W,B,te,tr=trainbp(w,b,Tf,X,T,tp) 或 W1,B1,W2,B2,te,tr=trainbp(w1,b1,Tf1,w2 ,b2,Tf2 , X,T,tp) W1,B1,W2,B2, W3,B3,te,tr =trainbp(w1,b1,Tf1,w2 ,b2,Tf2 ,w3,b3,Tf3,X,T,tp),89,10. 利用快速BP算法训练前向网络函数trainbpx( ) 使用动量因子时,BP算法可找到更好的解,而自适应学习率,也可以使训练时间大大缩短。函数调用格式为: W,B,te,tr=trainbpx(w,b,Tf,X,T,tp) 或 W1,B1,W2,B2,te,tr=trainbpx(w1,b1,Tf1,w2,b2,Tf2,X,T,tp); W1,B1,W2,B2, W3,B3,te,tr =trainbpx(w1,b1,Tf1,w2 ,b2,Tf2 ,w3,b3,Tf3,X,T,tp),90,11. 利用Levenberg-Marguardt规则训练前向网络函数trainlm( ) 函数trainbp( )和trainbpx( ) 都是基于梯度下降的训练算法,而函数trainblm( )是建立在一种优化方法基础上的训练算法。其调用格式为: W,B,te,tr=trainlm(w,b,Tf,X,T,tp) 或 W1,B1,W2,B2,te,tr =trainlm(w1,b1,Tf1,w2 ,b2,Tf2 , X,T,tp) W1,B1,W2,B2, W3,B3,te,tr = trainlm(w1,b1,Tf1,w2 ,b2,Tf2 ,w3,b3,Tf3,X,T,tp),91,函数trainlm( )的训练速度最快,但它需要更大的存储空间,trainbpx( ) 的训练速度次之,trainbp( )最慢。,92,12. BP神经网络仿真函数simuff( ) BP神经网络由一系列网络层组成,每一层都从前一层得到输入数据,simuff( )函数可仿真最多三层前向网络。其调用格式为: y=simuff (X,W,b,Tf,) 或 y1,y2=simuff (X,w1,b1,Tf1,w2,b2,Tf2) y1,y2,y3 =simuff (X,w1,b1,Tf1,w2,b2,Tf2,w3,b3,Tf3,) 式中 X为的输入向量;w,wi为权值矩阵;b,bi为偏值;Tf,Tfi为传输函数。,93,例2-19 利用两层BP神经网络完成函数逼近。隐含层的激活函数取S型传输函数,输出层的激活函数取线性传输函数。 解 (1)根据神经网络工具箱函数trainbp( )编写的程序如下。 ex2_19_1 利用以上程序可得图2-32和如下结果。 y2 = 0.9887,94,利用以上程序可得如下结果。 y2 = 1.0026,(2)根据神经网络工具箱函数trainbpx( )编写的程序如下。 ex2_19_2,(3)根据神经网络工具箱函数trainlm( )编写的程序如下。 ex2_19_3,结果显示: y2 = 0.9987,95,13. 建立网络函数newff( ) 利用newff( ) 函数可建立一个感知机神经网络。其调用格式为: net=newff(Xr,S1 S2.SNl,TF1 TF2.TFNl,BTF,BLF,PF),96,例2-20 利用newff( )函数建立一个非线性函数的BP网络逼近正弦函数。 解 MATLAB程序ex2_20.m如下。 ex2_20.m 未经训练的网络输出 与目标值(正弦函数)的比 较,如图2-33所示。网络 的权值和偏值是随机的, 所以未将训练的网络输出 效果很差,而且每次运行 结果也不一样。,图2-33 未训练的网络输出与目标值,97,14. 建立网络函数newfftd( ) 利用newfftd( )函数可生成一个前馈输入延时BP网络。其调用格式为: net=newfftd(Xr,ID,S1 S2.SNl,TF1 TF2.TFNl,BTF,BLF,PF) 式中,ID为延迟输入向量;其他参数定义同函数newff( )。,98,例2-21 利用两层BP神经网络训练加权系数。两组3输入为1 2;-1 1;1 3,希望的输出均为1,1。隐含层的激活函数取S型传输函数,输出层的激活函数取线性传输函数。 解 根据神经网络工具箱函数编写的程序如下。 ex2_21 结果显示: Y = 1.0000 1.0000 1.0000 1.0000,99,15. 计算误差曲面函数errsurf( ) 利用误差曲面函数可以计算单输入神经元误差的平方和。其调用格式为: Es= errsurf (X, T, W,b,Tf),100,16. 绘制误差曲面图函数plotes( ) 利用函数plotes ( )可绘制误差曲面图。其调用格式为:plotes(W,b,Es,v) 式中 W为权值矩阵;b为的偏值向量;Es为误差曲面;v为期望的视角,默认为-37.5 30。 例利用以下命令,可得图2-34。 X=3 2;T=0.4 0.8; W=-4:0.4:4;b=W; Es=errsurf (X, T, W,b,logsig); plotes(W,b,Es,60 30),图2-34 误差曲面图,101,17. 在误差曲面图上绘制权值和偏值的位置函数plotep ( ) 函数plotep ( )在已由函数plotes ( )产生的误差性能表面图上画出单输入网络权值w与偏差b所对应的误差e的位置,该函数调用格式为: h=plotep (W,b,e),102,例利用以下命令,可得图2-35。 X=3 2;T=0.4 0.8; W=-4:0.4:4;b=W; Es=errsurf (X,T,W,b,logsig); plotes(W,b,Es,60 30) W=-2;b=0; e=sumsqr(T-simuff(X,W,b,logsig);plotep(W,b,e),图2-35 权值和偏值在误差曲面图上的位置,103,18.绘制误差平方和对训练次数的曲线函数ploterr ( ) 函数ploterr (e) 绘制误差e的行矢量对训练次数的曲线,纵轴为对数形式。总的训练次数比误差e的长度要小1。误差e中的第一个元素是训练前(次数为0)的初始网络误差。函数ploterr (e,g) 绘制误差e的行矢量并用水平点线来标志误差g。 19绘制误差的直方图函数barerr( ) 函数barerr (e) 绘制每对输入/目标矢量误差e平方和的直方图。,104,例2-22 设计一个三层BP神经网络,并训练它来识别0,1,2,9,A,F,这16个十六进制已经被数字成像系统数字化了,其结果是对应每个数字有一个53的布尔量网络。例如0用1 1 1;1 0 1;1 0 1;1 0 1;1 1 1表示;1用0 1 0;0 1 0;0 1 0;0 1 0; 0 1 0表示;2用1 1 1; 0 0 1;0 1 0;1 0 0;1 1 1表示,等等。如图2-36所示。,图2-36 16个十六进制对应的53的布尔量网络,105,解 将这16个含15个布尔量网络元素的输入向量定义成一个1516维的输入矩阵X,X中每一列的15个元素对应一个数字量按列展开的布尔量网络元素,例如X中第一列的15个元素1;1;1;1;0;1;1;0;1;1;0;1;1;1;1表示0。目标向量也被定义成一个416维的目标矩阵T,其每一列的4个元素对应一个数字量,这16个数字量用其所对应的十六进制值表示。例如用0;0;0;0表示0;用0;0;0;1表示1;用0;0;1;0表示2,等等。,106,为了识别这些以53布尔量网络表示的十六进制数,所设计的网络需要有16个输入,在输出层需要有4个神经元来识别它,隐含层(对应于MATLAB工具箱中的第一层)设计了9个神经元。激活函数选择log-Sigmoid型传输函数,因为它的输出范围(0到1)正好适合在学习后输出布尔值。由于十六进制数的表示有时会受到噪声的污染,使布尔量网络元素发生变化,为了能排除噪声的干扰,顺利地识别16个十六进制数,必须设计高性能的神经网络。,107,方法一: ex2_22_1,结果显示: y = 0.0000 0.0000 0.0000 0.0000 0.9999 1.0000 0.9999 1.0000 0.0002 0.0000 1.0000 1.0000 0.0001 0.0236 1.0000 1.0000 0.0008 1.0000 0.0000 1.0000 0.0000 1.0000 0.0000 0.9997 1.0000 0.9995 0.9985 1.0000 1.0000 0.9964 1.0000 1.0000,108,方法二: ex2_22_2,结果显示: y4 = 0.0000 0.0000 0.0004 0.0000 1.0000 1.0000 1.0000 1.0000 0.0001 0.0011 0.9992 0.9994 0.0004 0.0000 1.0000 0.9999 0.0010 0.9993 0.0040 1.0000 0.0000 0.9999 0.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.9997 1.0000 1.0000,109,1.5 径向基神经网络工具箱函数 MATLAB神经网络工具箱中提供了大量的与径向基网络相关的的工具箱函数。在MATLAB工作空间的命令行键入“help radbasis”,便可得到与径向基神经网络相关的函数,进一步利用help命令又能得到相关函数的详细介绍。表2-5列出了这些函数的名称和基本功能。,110,表2-5 径向基网络的重要函数和功能,111,1. 计算矢量间的距离函数dist( ) 大多数神经元网络的输入可通过表达式N=w*X+b来计算,其中w,b分别为权矢量和偏差矢量。但有一些神经元的输入可由函数dist( )来计算,dist( ) 函数是一个欧氏 (Euclidean) 距离权值函数,它对输入进行加权,得到被加权的输入。一般两个向量x和y之间的欧氏 (Euclidean) 距离D定义为:D=sun(x-y).2).0.5。函数dist( )调用格式为: D=dist(W,X) 或 D=dist(pos),112,D=disk(pos) 函数也可以作为一个阶层距离函数,用于查找某一层神经网络中的所有神经元之间的欧氏距离,函数也返回一个距离矩阵。例如 w=rand(4,3);X=ran

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论