还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
神经网络讲义
1.自我介绍姓名,E-__il地址
2.登记学生__非__系学生凭选课单上课;有选课单未上课的,老师有权给0分
3.讲授计划第一课绪论第二课介绍__tlab及其神经网络工具包第三课神经元与网络结构第四课感知机(Per__ptron)第五课线性神经网络(Adaline)第六课后向传播网络(Bckpropagation)第七课自学习规则第八课自__网络、Hopfield网络第九课期末考试
4.授课方式讲授与练习相结合授课主要以__tlab为工具,在第
四、
五、
六、八课均有课后作业每次作业占两个课时完成后以____形式将word文档发到信箱;标题写“神经网络作业”,写明如何使用该文件教师通过上机检查
5.考试方式平时作业50%;课后作业,以软件为主;期末考试50%;开卷考试,以概念为主
6.参考书目《人工神经网络》,郑君里,杨行峻主编,1992年9月高教出版社第1版;《神经网络与模糊控制》,张乃尧,阎平凡编著,1998年10月清华大学出版社第1版;《基于__tlab的系统分析与设计——神经网络》,楼顺天,施阳主编,1999年9月西安电子科技大学出版社第1版;英文文献第一讲绪论
1.神经网络的定义神经网络是用非常大量的简单计算处理单元(即神经元)构成的非线性系统,它具有学习能力、记忆能力、计算能力以及各种智能处理能力,它在不同程度和层次上模仿人脑神经系统的信息处理、存储及检索功能利用它完成各项__处理或人工智能任务时在许多方面可以胜过普通的冯·诺依曼计算机
2.本课程的研究内容人工神经网络是一门新兴的交叉学科不同领域的学者对此有着不同的理解,不同的研究内容并且采取不同的研究方法对于从事电路与系统、__处理、通信等领域的研究人员,侧重于利用人工神经网络来解决各项特定的智能处理任务,诸如识别、分类、联想、优化、推理以及发现规律等本课程的研究内容仅限于此
3.本课程的研究途径由于人工神经网络的研究正处于迅速发展阶段,在研究思路、教学方法、处理对象以及结构和硬件构成等方面存在着种种差异很大的学说和流派,相应的文献与资料的数量迅速增加因此,要将这一领域的主要研究内容和方法扼要、完整地整理出来必然有很大地困难按照本课程地需要,主要介绍以下三种重要地研究途径第一种是按照物理模型构成地神经网络,其中包括采用非概率神经元模型地Hopfield神经网络第二种是以自适应__处理理论为基础发展起来地,其中最著名地就是前向多层神经网络及其递推(BP)学习方法第三种是按照自__原则构成地神经网络,其中有代表性的是自适应谐振理论(ART)神经网络和T·Kohonen提出的自__特征映射神经网络这三种途径各有其有缺点从算法的系统性和完整性看,第
一、二种优于第三种而从模仿人的认知过程和智能处理功能看,后者又优于前者从立即导向一种实用系统而言,第二种相对困难较少
4.神经网络的研究热点1)在神经网络研究中采用模糊算法,构成模糊人工神经网络;2)用混沌(____s)理论研究人工神经网络;3)加强与其它有关学科的交叉,特别是心理学、神经生理学、生物化学与生物物理学、以及人工智能科学等等;4)用小波理论研究神经网络,形成小波神经网络;5)人工神经网络的可编程问题;6)利用分子器件实现人工神经网络指硬件实现第二讲__tlab与神经网络工具箱
1.__tlab简介具有Fortran和C高级计算机语言知识的读者可能已经注意到,如果用它们去进行程序设计,尤其当涉及矩阵运算或画图时,编程会很麻烦比如说,若想求解一个线性代数方程组AX=B=X=A-1B,用户得首先编写一个主程序,然后编写一个子程序去读入各个矩阵的元素,之后再编写一个子程序,求解相应的方程,最后输出结果一般说来,求解线性方程组这样一个简单的功能需要100多条源程序__tlab的首创者CleveMoler__在数值分析,特别是在是指线性代数的领域中很有影响1980年前后,他在NewMexico大学讲授线性代数课程时,发现用其它高级语言编程极为不便,便构思并__了__tlab(__trixLaboratory,即矩阵实验室)在__tlab下,矩阵的运算变得异常的容易,后来的版本中又增添了图象处理及多媒体、因特网、数据库等功能__tlab出现以后一直在美国的NewMexico等大学作为教学辅助软件使用,并作为面向公众的免费软件广为流传__tlab于1984年推出了正式版本后来Moler组建了一个名为__thWorks的软件__公司(http//___.__thworks.com)专门扩展并改进__tlab该公司于1992年推出具有划时代意义的__tlab
4.0版可以配合MicrosoftWindows一起使用1998年推出
5.3版2000年11月6日推出最新版本__tlab
6.0__tlab
6.0有30个工具箱包,包括控制系统工具箱(ControlSystemToolbox),__处理工具箱(SignalPro__ssingtoolbox),系统辨识工具箱(SystemIdentificationtoolbox),鲁棒控制工具箱(RobustControltoolbox),μ分析于综合工具箱(μ-____ysisandsynthesistoolbox),定量反馈理论工具箱(QFTtoolbox),神经网络工具箱(NeuralNetworktoolbox),最优化工具箱(Optimisationtoolbox),数据库工具箱(Databasetoolbox),网络工具箱(__tlabWebServer)等现在的__tlab已经不仅仅是一个“矩阵实验室”了,它已经形成了一种具有广泛应用前景的全新的计算机高级语言严格的说,__tlab并不是一种计算机语言,因为用它编写出来的程序并不能脱离__tlab环境而执行,但从功能上说,__tlab已经完全具备了计算机语言的结构和性能,因此我们也习惯的称之为__tlab语言__tlab
5.3以上版本提供了C/C++的接口,通过另外一个工具__tCom,能用VisualC++调用__tlab编写的程序,从而大大减少C++程序的编写难度此工具我已经用过,效果不错
2.__tlab的基本操作1)__tlab的__关键是选择合适的工具箱和相应的帮助文件2)帮助文件(helpdesk)两种
(1)pdf格式系统详细介绍了__tlab的基本结构,各个命令的使用工具包的相关技术、命令,非常详实,简单、易学,共100多M的容量
(2)html格式主要是命令,各种基本命令及工具箱命令的搜索,及相关命令调用等3)演示(demo)详尽演示矩阵运算、图形显示、工具箱的使用等4)退出exit或quit命令
3.__tlab的基本语句结构__tlab实际上可以认为是一种解释性语言,用户可以在__tlab工作环境下键入一个命令,也可以由它定义的语言编写应用程序,这样__tlab软件对此命令或程序中各条命令进行翻译,然后在__tlab环境下对它进行计算,最后返回结果1)基本的赋值语句变量名列表=表达式如A=[1,2,3;4,5,6;7,8,0](列于旁边,以后要用)等号右边的表达式可以用分号结束,也可以用逗号或换行号结束用分号结束表示左边的变量结果将不在屏幕显示出来,否则左边返回矩阵的内容全部显示出来__tlab区分大小写,Abc,ABC,abc表示不同的矩阵名,但实际编程时应尽量避免这样的命名方式在矩阵A中,同一行中的内容用逗号分隔,而采用分号来表示换行按这种格式输入后,矩阵A的内容将按照下面的格式显示出来A=[1,2,3;4,5,6;7,8,0]↘123A=456780如果在上面赋值的式子末尾加一个分号,则矩阵的内容就不在屏幕上显示了所以用户可以通过是否在语句末加分号的方式来决定运算的结果是否显示出来,这样就可以使得不必要的中间结果部分不被显示出来一般情况下,用于同行中分隔的逗号是可以由空格来代替的其实,__tlab的矩阵输入格式并不是很严格,矩阵A还可以由下面的两种方式来输入A=[123;456;A=[123;45…780];6;780];(…)为续行号在一个语句相当长时,可以采用续行号将一条语句分割成几行表示2)__tlab的保留字符串
(1)判断0元素用的误差限eps,其默认值为eps=
2.2204×10-16
(2)pi表示圆周率
(3)Inf表示无穷大__tlab允许的最大数据为
1.797693×10308;一个数据大于此数则认为是Inf1/0产生Inf即使在__tlab中保留了若干字符串,它们还可以重新进行赋值如果用户想将判0的误差限扩大10倍,则可以采用eps=10×eps命令来进行修正
4.矩阵的基本运算矩阵A有n行m列,称A矩阵为n×m矩阵1)矩阵加减法运算C=A+B和C=A-B若A、B的维数相同,则可以执行加减法,得到矩阵C;若A、B的维数不匹配,则__tlab将自动给出错误信息,提示两个矩阵的维数不匹配2)矩阵的转置AT123147实矩阵转置A=
[456]AT=
[258]7803605+i2-i15-i-6i复矩阵转置A=[6i49-i]A*=[2+I4]19+i在__tlab下,矩阵A的转置(包括复矩阵的转置)均可以简单地由A’求出3)矩阵乘法12551921A=
[34]B=
[78]则C=A×B=
[4347]在这里并不需要指定A、B的维数如果A、B的维数相容,则可以准确无误地获得矩阵C如果二者维数不相容,则给出错误信息,通知用户这两个矩阵是不可乘的4)矩阵的点乘123234A=
[456]B=
[567]780890364218若C=A×B,则C=
[819651]5469842612若C=A.×B,则C=
[203042]56720可知,前者是普通矩阵乘积,后者是两个矩阵对应元素之间的乘积5)矩阵的除法__tlab定义了矩阵的除法运算,其意义相当于矩阵的求逆运算如Ax=B式中A和B为相容维数的矩阵,则x亦为矩阵,则x=A-1BA-1可由函数inv(A)直接求出,即x=inv(A)×B,也可简单地写成x=A/B6)单个矩阵元素的赋值与运算__tlab允许用户对一个矩阵地单个元素进行赋值和操作123如A(2,3)=100则A变成
[45100]780表示将矩阵A的第二行第三列的元素赋为100若给出的行数或列数大于原来矩阵的范围,则__tlab将自动扩展原来的矩阵,并将扩展后未赋值的元素置为0-12300如A(4,5)=8则A变成
[4510000]7800000008__tlab还允许对子矩阵进行定义和处理A(,j)表示A矩阵的第j列元素;A(i,)表示A矩阵的第i列全部元素A(,1)=[1,4,7]A(2,)=[4,5,6]下节将讲__tlab的控制语句(循环,条件);__tlab的绘图功能;神经网络工具箱的函数列表先复习上节内容__tlab简介;__tlab基本操作helpdesk,demo,quit,help;__tlab基本语句赋值语句;__tlab的基本运算加、减、乘、点乘、除、转置、单个矩阵元素的运算
5.__tlab的控制语句与其它高级语言一样,__tlab也提供了条件转移语句、循环语句等一些常用的控制语句,从而使得__tlab语言的编程显得十分灵活1)__tlab的循环语句结构__tlab中可以使用两种循环语句for语句和while语句这两种的基本格式和C语言中的循环语句相似
(1)for语句的基本格式for循环变量i=表达式S1表达式S3表达式S2循环语句组end表达式S1为循环变量的循环起始值,表达式S2为循环终止值判断,表达式S3为步长在C语言中,循环体的内容是以大括号{}括起来的,而在__tlab语言中,循环体的内容是以循环语句和end语句括起来的,所以在使用__tlab时应注意这一点for循环体的程序框图例1求mysum=0fori=11100mysum=mysum+i;end在__tlab编程中,如果表达式S3的值为1,则可以省略上句可以简化为fori=1100,对于上一例子,__tlab有更好的编程方法i=1100mysum=sum(i);利用__tlab的内部函数,速度快很多
(2)while语句的结构while(条件式)循环语句组endwhile语句的框图对于上例,如果改用while循环,可写为sum=0;i=1;while(i≤100)sum=sum+ii=i+1;end当然,__tlab提供的for,while允许多层嵌套,而且它们之间也可以相互嵌套,这和C语言是一致的2)__tlab的条件转移语句结构
(1)基本格式if(条件式)条件块语句组end结构框图当给出的条件成立时,则执行该条件块结构中的语句内容,执行完之后,继续向下执行;若条件不成立,则跳出条件块而直接向下执行例2求出满足_____的最小mmysum=0;form=1_____if(mysum_____)break;endmysum=mysum+m;end这里使用了break命令,其作用就是中止上一级的for语句循环过程
(2)绝对转移由于__tlab没有提供绝对转移的指令,所以这样的功能可通过if和while的组合来完成见例3例3如果用户想对一个问题进行回答,而这个问题要求用户键入y或n两个字符之一否则就认为输入的字符有误,要求用户重新输入,直至输入y或n为止程序ikey=0;//首先赋给中间变量ikey一个初值0while(ikey==0)//循环条件为ikey==0S1=input‘Istheanswercorrect[y/n]’‘S’;if(S1=‘y’|S1=‘n’)ikey=1;endend在这一程序段中使用了带有‘S’选项的input()函数,其意义是要求用户输入一个字符串如果不使用附加变量ikey,上面的程序段可修改成while
(1)S1=input(‘Istheanswercorrect[y/n]’‘S’);if(S1==‘y’|S1==‘n’)break;endend在例3中,if条件式内判断两个表达式是否相等时使用的是==符号,而不是=号,这和C语言的写法一致
(3)复杂的条件结构if(条件式)条件块语句组1else条件语句组2endif(条件式1)条件块语句组1elseif(条件式2)条件语句组2…………end第一节课到此
6.__tlab的编程基础1)__tlab允许的文件类型
(1)__tlab编写的程序分为M函数和M文件,其后缀名均为.mM文件可直接执行,M函数必须由其它语句调用M函数由function语句引导,有输入、输出变量列表
(2)__tlab允许用户调用可执行文件.exe其调用方式是在下键入“!”,再接可执行文件的文件名用C或Fortran写出程序,生成可执行文件,可用上面的方式直接调用这种方式直观,但速度慢,不是特别规范
(3)__tlab通过Mex功能可以实现对C或Fortran语言编写的程序的调用利用__tlab指定的格式书写__tlab与Fortran或C的接口程序,然后用它给出的连接程序进行连接,最后获得一个后缀为MEX的可执行文件通过__tlab运行、调用MEX文件即可但这会使程序的可读性大大降低,所以不是特别必要,最好不使用MEX功能2)__tlab变量的管理Size(A)得到A的维数,包括行数和列数,此时A是矩阵;Length(A)得到A的长度,此时A是向量;Who查看当前工作空间有哪些变量名;Whos了解这些变量的具体细节,包括名称(name),大小(size),元素数(element),字节数(bytes),等Clear删除变量;S__e文件名变量列表其它选项将工作空间的变量保存到文件中-assii ASCII码格式Load文件名将s__e命令存储起来的数据再从文件调入工作空间
7.__tlab的绘图功能__tlab提供了非常强大的绘图功能,由于时间所限,不具体介绍,只列出主要的绘图函数1)建立和控制图形窗口figure建立新的图形窗口clf清除当前图形close关闭图形2)基本X-Y图形plot线性图形title图形标题xlabelX轴标记ylableY轴标记text文本注释grid网格线hold保持当前图形subplot在一个图形窗口画多个坐标图例subplot(2,3,2);plot(X)表示在2行3列的大图形中的第2号图中画X的形状
8.神经网络工具箱常用函数列表1)重要的感知器神经网络函数初始化initp训练trainp仿真simup学习规则learnp2)线性神经网络函数初始化initlin设计solvelin仿真simulin离线训练trainwh在线自适应训练adaptwh学习规则learnwh3)BP网络函数Initff初始化不超过3层的前向网络;Simuff仿真不超过3层的前向网络;Trainbp,trainbpx,trainlm训练BP(Trainbp最慢;trainbpx次之;trainlm速度最快,但需要更多的存储空间)Learnbp学习规则4)自__网络初始化init__仿真simuc训练trainc利用竞争规则训练train__利用Kohonen规则训练5)反馈网络(Hopfield网络)仿真simuhop设计solvehopsolvehop设计Hopfield网络solvelin设计线性网络rands产生对称随机数learnbp反向传播学习规则learnhHebb学习规则learnp感知层学习规则learnwhWidrow-Hoff学习规则initlin线性层初始化initp感知层初始化init__自__映射初始化plot__绘制自__映射图trainbp利用反向传播训练前向网络trainp利用感知规则训练感知层trainwh利用Widrow-Hoff规则训练线性层train__利用Kohonen规则训练自__映射
9.__tlab编程举例练习1当矩阵的次数很高时,求解矩阵的逆矩阵一般很困难分块矩阵求逆法A=A11A12A21A22上面的矩阵是一个分块矩阵,这时B=A-1=B11B12B21B22其中,B22=(A22-A21A11-1A12)-1,B12=-A11-1A12B22B21=-B22A21A11-1,B11=A11-1-B12A21A11-1根据上述算法,计算A=214-2-1-430-1-301234-2-3-4的逆矩阵,428631260-290-34686912分块维数n1取3『允许用inv()求A11-1』答案A=input(‘Enter__trixA=’);[nm]=size(A);n1=input(‘Enterthesizeofthepartitionn1=’);if(n1n)disp([‘nshouldbe__allerthan’intzstr(n)])elseif(n1==n),B=inv(A)elseA11=A(1n1,1n1);A12=A(1n1,n1+1,n);A21=A(n1+1n,1n1);A22=A(n1+1n,n1+1n);iA11=inv(A11);B22=inv(A22-A21×iA11×A12);B12=-iA11×A12×B22;B21=-B22×A21×iA11;B11=iA11-B12×A21×iA11;B=[B11B12;B21B22]end讲评答案B=
0.
06430.1714-
0.
02140.
02140.0571-
0.0071-
0.
300.3-
0.
100.
10.1929-
0.0857-
0.
06430.0643-
0.0286-
0.0214-
0.0429-
0.___
30.
01430.
02140.0571-
0.
00710.20000-
0.2-
0.
100.1-
0.
12860.
05710.
04290.0643-
0.0286-
0.0214问题1.__tlab语句的结尾宜多使用;以避免出现不必要的中间结果2.有信件,无内容;3.应将文档改为*.m格式,便于检验;4.输入矩阵有误;5.将m文件写成m函数;6.所有的m文档均以附件形式发送;7.__tlab的参考书最好是__tlab自带的pdf文档,其次是西电出的一套__tlab书籍8.。