(应用数学专业论文)神经网络的虚拟实现及oop编程.pdf_第1页
(应用数学专业论文)神经网络的虚拟实现及oop编程.pdf_第2页
(应用数学专业论文)神经网络的虚拟实现及oop编程.pdf_第3页
(应用数学专业论文)神经网络的虚拟实现及oop编程.pdf_第4页
(应用数学专业论文)神经网络的虚拟实现及oop编程.pdf_第5页
已阅读5页,还剩51页未读 继续免费阅读

(应用数学专业论文)神经网络的虚拟实现及oop编程.pdf.pdf 免费下载

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

文档简介

摘要 驴3 5 0 1 人工神经网络的研究主要分三个方面:神经网络理论研究、神经网络应用研究和 神经网络实现技术研究。神经网络的虚拟实现是在传统计算机上通过编写支持软件 来模拟神经网络计算。这种软件模拟环境可以支持用户进行新的神经网络模型和学 习算法研究以解决多种用户问题。神经网络的全硬件实现是不需要软件编程的,而 目前广泛采用的虚拟实现方案却必须通过软件编程。虚拟实现是用较少数目的物理 处理机模拟实现神经网络的种重要方法。如何实现物理处理单元与虚拟处理单元 ( 即神经元) 之间的映射,以完成一定功能的神经网络信息处理,这是神经网络软 件开发所要解决的。在不同的硬件支持下,如微型计算机p c 、神经网络协处理机工 作站、神经网络并行计算机阵列等,神经网络软件开发较传统的计算机软件开发, 对开发人员的要求更高。悃为开发人员不仅要有熟练的高级语言编程技术,而且要 对神经网络模型的结构和学习算法有较深刻的理解。 o e yr o g e r s 在其著作 o h j e t t - o r i e n t e dn e u r a ln e t w o r k si n ( 、十十中对神经网络的c + + 实现做了大量的研 究工作并定义了几中常用的网络模型,依此减轻研究开发人员负担。但遗憾的是, 使用他的模型只能根据需要由用户自己编写相应的d o s 程序。这不但要求研究人员 熟练掌握c + + 语言,而且编写的d o s 程序不易控制。 本文在其工作的基础上做了大量 的改进工作: 1 增加了对h f c 的内在支持,使研究人员便于开发基于w i n d o w s 的应用程序: 2 引入了异常处理与诊断机制。使程序便于调试,开发的软件更为健壮; 3 引入了多线程技术,使得多个程序可以同时运行且更易于响应用户的需求: 4 使用系统w i n d o w s 控件,为用户提供更现代化的用户接口,如树视图、制表 页、进度条等使程序具有更友好的交互性。 5 优化了输入输出,程序所需要的数据或产生的数据都以文件的形式存放,以 便于用户的修改与重用。 【关t 诃l 面向对象编程4 ;类;继承;派生;虚函数:多态性:对象 a b s t r a e t r e s e a r c h w l i f i e i a l n e u r a l 饿t 咄s t a n n ) i s m 蜘b e o m i s t e d t o f 妇b i 锄d 妫: t h et h o o r i c so fn n t h en p p l i e a t i o r bo fn na n d 恤r e a l i z a b l et h n i q u eo f a n nn n b a s e d0 1 3v i r u l a li m l i z a t i o ni s8m e t h o dd j a tu s e st t a ea s s i s t a n ts o f l w a t os i m u l a t et h e a n n 忸删【t i l 唱c o a v q m t i o r t a lp c m s s o i ls i m u l a t i v ee n v i n m m ti sa b l et oh e i p v a l i e t l 酞o f u s c fw i t ha n nm o d e l sl e a m i n g a n na l g o r i t h ml t n i n 8a n di n , , c s t i 鲫o a n nb a s e do t lh l l i d w l en e e dt l o p f 口掣孤m n i n 舀b u tt h e a n nb j l s e do i lv i r t u a l r e a l i z a t i o ni sw i ( i o l ya d o p 砌a n dm u s tb ee a r r i o do i 吐b yp r o g r a m m i n g a sk n o w n v i m “r e a l i z a t i o ni sg 血i m p o t t l m tr a e t h o dt h a tu s e saf e wp h y s i c a lp r o c e s s o t st os i m u l a t e t h ea e t u a l i a t i o no fa n n ,i ti sp r o b l e mf o rt h ea n ns o n md e v e l o p l n gt h a th o w t o a c t u a l i z em e m 珥币迅gb 醴w np h y s i c a lp r o e e a s o r s 鲥v 讪a 1m i l t s ( i cn e t u 加) s o 船 t oi m p l e m a l tg i v e , a n ni n f o r m a d o np r o c e s s i n gb a s e do nd i f f e r e n th l l l d w s l l e , s u d aa s m i e r o e o m p t 衄a n n a s s i s t a n tp r o t e i n 8w o l k s t l i t 诅a n da n n p a r a l l e le o m p 血a r r a y 咖,a n ns o f t w 鼬d “e 1 0 p 击gi sm o l ed i t 五c u l tf o rp q 驴帅m 贯t i l 鼬e a l s t o ms o t t w a r e d e v e l o p i n g $ i 1 1 1 c en 鹭p r o s r n n m l 日s h o u l dn o to n l yb eg o o da th i 8 t i l e v e ll a q 酐l b 萨 p r o l g r m m i n g b u t a l s o s h o u l d l m v e t h ea d v a n c e d k n o w l e d g e o f a n ns t l a l c t l n 目咀s t u d y a l g o r i t hj o e yl t o 醇r sd i dm u c hr e l r e h0 1 1t h er e a l i z a t i o no fn nu s i n gc h a n d c o n 醴m 咖ds e v e t l m lc o 皿田均咀q 塔e dn nm o d c l si nh i sw o r ko b j e c t - o r i e n t e dn e u r a l n e t w o r k s 加c + + 幻l i g t l 血n l h eb u r d e n0 1 1d e v c l o l r s u n f o m m 疵l y 世妯gh i sm o d c l s t h en 辩锄e h e 幅w i l lt i 晰协m 蜘雠c o l l t l p u l e r1 a | 呜l 嶝c - h - a d dd e v e l o l dd o s - b a s e d a l 】p l i e a t i o n sw h i c h 瓣n o t e o t l t r o l l c df r o e t y mt l a i s 珥p 1w i l lb 出她辩啊c h d o nb yj o e yr o 窖啦a sf o l l o w s : 1 m f ci ss u m o a o ds ot h a tr e s e a r c h e r sc a l ld e v e l o pm i e r o s o t tw m d o w s - b s s e d a p p l i c a t i o n s ; 2 e x o 印6 - h 柚d l i gi i 啦1 m i q u oi sa d o p t e dt om b k ca p p l i c a t i o nd c l x 璎i n g 钿苜a n d m & k e 珥 p l i 咖o l 培r o b u s t ; 3 m u l t i - t l m 碰协曲面年i sa d o l 棚s oa l a p l i c a t i o m e o 1 t ca tt h e 湖e t i m ea n d r e s p , , dt ol l s 口l q i l y ; 4 w i n d o w sc o l m n o nc o n t r o l s 哦u s e dt o p r o v i d e m o d e - l ni n t e r f a c e l dm l k e a l ,p l i e a t i o m 衔曲t ou s e r s ; 5 d os y s u m li so o t i m i 捌t om a k et h ed a t an 奠d 。do rp r , x 1 栅b ,a t ,p i i e a l i o t a s 的b e s t o r e di nf i l 髂t h a t b er e v p e do tr e u s 4 f k 哆w o r a s l0 0 1 ) ;e l m s ;i n h 础;d e r i l , , e ;v i r t u a lf l h l c t i o n ;m u l t i f o l 3 e n ;曲j t 西南交通大学研究生学位论文第1 页 第一章绪论 1 1 引言 人工神经网络的研究主要分三个方面:神经网络理论研究、神 经网络应用研究和神经网络实现技术研究。神经网络实现技术可以 分为全硬件实现和虚拟实现两个方面。所谓全硬件实现是指物理上 的处理单元及处理单元之间通讯与个具体问题的神经网络模型中 的神经元及连结一一对应,每一个神经元及每一个连结都有与之对 应的物理器件。全硬件实现的最大优点是处理速度快,且易于满足 实时性要求,但缺乏通用性、灵活性和可编程性。神经网络实现的 另一种方法是在传统计算机上通过编写支持软件来模拟神经网络计 算。这种软件模拟环境可以称之为软件模拟神经计算机,这种软件 模拟环境可以支持用户进行新的神经网络模型和学习算法算法研究 以解决多种用户问题。客观地讲,神经网络的全硬件实现是不需要 软件编程的,而目前广泛采用的虚拟实现方案却必须通过软件编 程。我们知道,虚拟实现是用较少数目的物理处理机模拟实现神经 网络的一种重要方法。如何实现物理处理单元与虚拟处理单元( 即 神经元) 之间的映射,以完成一定功能的神经网络信息处理,这是 神经网络软件开发所要解决的。在不同的硬件支持下,如微型计算 机p c 、神经网络协处理机工作站、神经网络并行计算机阵列等, 神经网络软件开发较传统的计算机软件开发,对开发人员的要求更 高。因为开发人员不仅要有熟练的高级语言编程技术,而且要对神 经网络模型的结构和学习算法有较深刻的理解。 对于神经网络的应用研究,研究人员希望利用某些神经网络模 型,解决一些实际问题,如模式匹配、分类、联想记忆等。为此, 首先要将选用的神经网络模型编程实现;然后,调用已编好的模块。 当然,如果能够有一个很好的软件开发环境,提供高效的神经网络 西南交通大学研究生学位论文 第2 页 模型库及一套实用的软件开发工具,支持神经网络的应用软件开发 或研究,那么,就会大大减轻研究开发人员的编程负担,加速研究 开发进度。 1 2 基于p c 机的神经网络实现 p c 机是研究人员广泛使用的一类微型计算机工具,如何在p c 机环境下进行神经网络的软件开发,这是本节要讨论的主要内容。 1 2 1 神经网络计算的特点 从神经网络的基本结构和学习算法中,可看出神经网络计算具 有以下特点: 计算量大 存储空间大 结果具有敛散性 1 计算量大 在神经网络学习过程中,要不断地逐个结点计算传递函数值、 更新结点输出、调整网络权值,一直到学习结果满足一定要求。神 经网络由大量处理单元构成,而且学习过程中迭代次数往往成千上 万次,计算量之大就可想而知了。 2 存储容量大 神经网络计算是模拟脑神经元的活动,采用分布式存储与计 算,一般需要大量的处理单元,因此,对计算机存储空间提出了要 求。 例如,用于分类的一个三层网络,输入单元1 9 2 个,隐单元1 6 个,输出单元2 个。假设有1 0 0 个训练模式,那么这样一个网络要 求的存储空间有多大呢? 现估算如下: 激活值数目= 1 0 0 ( 1 9 2 + 1 6 + 2 ) = 2 1 0 0 0 西南交遥大学研究生学位论文第3 页 连接储量= 2 + ( 1 6 + 1 ) + 1 6 + ( 1 9 2 + 1 ) = 3 1 2 2 总存储量= 4 + 2 + ( 2 1 0 0 0 + 3 1 2 2 ) = 1 3 9 2 0 0 字节 这里,在计算连接数目时,考虑到将闽值作为每个神经元的 输入,给每个单元增加了一个连接数。假如是b p 网络,还要存储 每个单元的误差项6 和权修正量w 。每个单元对应有一个误差项 6 ,每个权值对应有一个aw 。因此,加倍了所需存储容量。在计 算总存储容量时,要将激活值数目和连接权数目分别乘以2 。当用 浮点数表示每个值,每个浮点数占4 个字节,则存储容量还要乘以 4 。 3 结果的敛散性 神经网络运行过程中,当学习参数选取不当,可能会引起网络 震荡或发散,从而得不到一个正确的运行结果。正因为这样,往往 期望能动态观察网络的运行情况,如学习参数的变化、误差学习曲 线的变化等,以便研究人员能及时作出决策,调整参数或终止运行。 这就要求神经网络软件具有可视化的功能,即使研究人员通过计算 机显示屏看到的不是一堆枯燥、抽象的数据,而是直观的图形。 1 2 2 神经网络软件开发 针对神经网络计算的特点和要求,在神经网络开发时,要考虑 以下几方面的问题: 选用什么样的编程语言 怎样提高程序的执行效率 如何使计算问题可视化 1 编程语言 在微机上广泛使用的高级编程语言有c 、c + + 、p a s c a l 、 f o r t r a n 等。c 语言是功能强、使用最为广泛的一种。它既有接 近汇编语言的底层功能。又具有高级语言的共同特性。此外,提供 了在线汇编功能,允许对字节和地址直接操作。它的编译程序效率 高,可移植性强,可以产生紧凑高效的目标代码。因此,神经网络 堕查銮塑查堂堡塞生堂鱼堡塞 墨! 里 软件的编程采用c 语言的居多。 2 提高处理速度 在p c 机环境下运行神经网络软件,其突出问题之一是处理速 度慢。造成这种缺陷的原因是多方面的,主要包括:p c 机的处理 速度和容量限制;计算精度的要求;软件编程代码的优化程度,等 等。这里,我们介绍提高p c 机环境下神经网络软件运行速度的几 种常用方法。 方法之一是提高循环体的迭代执行速度。神经网络软件中核心 处理部分是一个迭代的学习过程,这部分的程序往往要执行成百上 千次,占整个程序的绝大部分,其执行速度基本上决定了整个程序 运行所需的时间。因此,必须千方百计优化循环体内迭代处理。 方法之二是选取短字节的数据类型。这种方法在能够满足精度 要求的情况下,也是很有效的。表1 1 对浮点数和整数的存储空间 和处理速度做了一个比较,可见,如果选取整数,将大大提高处理 速度,但这是以牺牲一定精度换取的。 表1 1 整数与浮点数的比较 项目整数浮点数 字节数24 加法( t )28 5 乘法( t )2 l9 7 除法( t )2 51 9 8 存储器读写 36 注:t 表示时钟月捆 方法之三是利用编译器提供的优化功能对程序进行优化一般 来讲,编译器在寄存器分配、循环操作等方面可以很好地进行优化, 而在程序的整体结构、算法的选择上,还要依赖编程人员来决定。 神经网络软件的一个突出特点是,代码只占用很小内存空间,因此, 为提高执行速度,可以不考虑代码占用的存储空间。 方法之四是减少磁盘读写次数。由于神经网络处理的模式要 西南交通大学研究生学位论文 第5 页 从磁盘文件或其它输入设备读入。为了加快软件运行,可将输入模 式分批或全部读入内存,这样,减少了程序执行过程中访问磁盘等 外设的次数,便可有效提高程序的执行速度。 在神经网络的训练过程中,训练模式会反复地被使用,或许几 千次。即使训练模式都在内存中,训练都可能需要进行几个小时或 几天的时间。可想而知,如果把训练模式放在磁盘上,每次迭代都 从磁盘上读数据,那么训练可能要几天或几周。 3 神经网络软件可视化 为了使神经网络的定义直观,网络结构可以用图形屏幕来显示, 每一个神经元及连接均可图示。在网络训练过程中,可以选择输出 设备、显示不同形式的输出结果,如条形图、直方图;还可以动态 观察网络权值、单元输出值的变化。 软件模拟神经计算机与神经网络的硬件实现相比,缺点是运行 速度较慢。但这种软件模拟神经计算机通用性好,因而在神经网络 计算机研究初期很快成为迅速推广、达到商用水平的产品。具有代 表性的是:19 8 3 年r o b e r th e c h t - - n i e l s e n 和t 0 d dc u t s c h o w 在t r w 的a i 中心所推出的m a r k i 及改进型m a r k i i :1 9 8 6 年z i p s e r 和r a b i n 所推出的p 3 系统;1 9 8 7 年r o c h e s t e r 大学推出的r c s :1 9 8 8 年 m a r y l a n d 大学推出的m i r r o r s 系统;国防科技大学于1 9 9 0 年推 出了性能可与上述系统媲美的g k d n n s s 软件模拟神经计算机。 当然,用现有的一些软件工具来进行神经网络的模拟和研究, 可以减轻神经网络研究者编写计算机程序的负担。但是在计算机上 用通用的编程语言实现各种神经网络模型,仍然是当前许多神经网 络研究者所采用的主要模拟实现神经网络的技术手段。用这种方法 来实现神经网络模型有很多优点。对当前已有的神经网络模型,甚 至人们经常使用的b p 神经网络模型,仍然有许多值得深入研究的 地方。如果用通用的编程语言来描述这些网络模型,并在传统计算 机上实现,就可以通过程序对神经计算过程进行深入细致的描述, 西南交通大学研究生学位论文第6 页 并实施灵活的控制,可以获得比神经网络软件模拟环境所能提供的 更多信息,为全面了解和分析神经计算特性提供更多的依据,这样 就可以避免触及不到神经网络软件模拟环境的“内核”而神经网络 软件模拟环境输出信息量又不足的烦恼。本文采用面向对象的方 法,使用c + + 语言,构造了神经网络模型的基本框架,并在此基 础上实现了几个常用的网络模型。研究人员可以此框架为基础,构 造出更为通用的模型来。 西南交逯大学研究生学位论文 第7 页 第二章o o p 编程及神经网络基本模型 2 1 面向对象编程( o o p ) “面向对象”是软件程序设计中的一种新思想,由于这种新思 想的引入,使我们的程序设计能更加贴近现实,并且花费更小的精 力。 2 1 1 思想由来 “对象”表示现实世界的某个具体事物。 社会的不断进步和计算机科学的不断发展是相互促进的,一方 面计算机科学的发展推动了社会的发展,计算机的广泛应用给整个 社会生产力带来了勃勃生机;另一方面社会的发展又给计算机科学 提出了新的要求,计算机科学只有不断进行自身提高和自身完善, 才能适应不断进步的社会生产力的需要。随着计算机的普及应用, 人们越来越希望能更直接与计算机进行交互,而不需要经过专门学 习和长时间训练后才能使用它。这一愿望使软件设计人员的负担越 来越重,也为计算机领域的自身发展提出了新的要求。利用传统的 程序设计思想无法满足这一要求,人们开始寻求一种更能反映人类 解决问题的自然方法,“面向对象”技术就是在这种情况下产生的。 现实世界中的事物可分为两大部分,即物质和意识,物质表达 的是具体事物;意识描述的是某一个抽象的概念。现实世界中的事 物可直接映射到面向对象系统的解空间,现实世界中的物质可对应 于面向对象系统中的“对象”,现实世界中的意识可对应于面向对 象系统中的抽象概念类。 2 1 2 基本概念 夺类: 类是面向对象系统中的最重要的概念,面向对象程序设计中的 所有操作都归结为对类的操作。在面向对象程序设计中正因为引入 西南交通大学研究生学位论文 第8 页 了类的概念,使得它与传统的结构化程序设计明显区分开来。 类:类是对一组客观对象的抽象,它将该组对象所具有的共同 特征集中起来,以说明该组对象的能力和性质。可以定义为一个五 元组: c l a s s = 其中:i d 是类的标志符或名字;i n h 是类的继承描述;d d 是 类的数据结构描述:o p 是类的操作集合的具体体现;i t f 是类的 对外接口或协议。 在神经计算系统的描述中,一个神经网络计算系统可以定义一 个类,一个神经元也可以定义一个类,定义为类的目的是实现由类 生成的实例对象间的代码共享,进行数据的封装,同时也可以简化 神经计算系统的描述。神经元之间的连接描述与两个值有关,即源 神经元到目的神经元的输出值和它们之间的连接权值。 例如“人类”这个词就抽象着所有人的共同之处。 在计算机世界的系统构成上,类形成了一个具有特定功能的模 块和一种代码共享的手段。它为程序员提供了一种工具,使得他们 可以方便地建立所需要的任何类型,并可以象一般类型那样方便地 使用。 c + + 中关于类的说明形式如下: c l a s s标志符 p r i v a t e : 私有数据和私有函数; p r o t e c t e d : 保护数据和保护函数; p u b l i c : 公有数据和公有函数: l ; 西南交通大学研究生学位论文第9 页 标志符给类定义了一个名称,称为类名。类的私有数据和私有 函数在类的外部是不可见的,即它们不能被类外部的变量、函数和 对象访问( 但友元函数除外) ;p u b l i c 后的部分定义了类的公有成 员,包括公有数据和公有函数。公有成员在类的外部是可见的; 类的属性,用来表达类的状态,它体现在类的私有数据、保护 数据和公有数据上;类的行为体现在私有函数、保护函数和上公有 函数。 呤实例: 实例为组成类的对象。 类与实例的关系可以看成是抽象与具体的关系,类是多个实例 的抽象综合,而实例又是类的个体实物。 通过类的实例化,就可以创建出神经计算系统中所包含的神经 元对象。这些神经元共享在相应类中所定义的数据结构类型和计算 过程,例如一个类通过实例化所生成的所有神经元对象都具有相同 的输入函数、传递函数、输出函数和权值修改函数等。 对于同一类的不同实例之间,必定具有如下特点: 相同的操作集合; 相同的属性集合; 不同的对象名。 令继承: 继承是面向对象系统中的另一个重要概念。前面所讲的类都是 孤立的,相互之间还没有建立关系。继承所表达的是一种对象类之 间的相互关系。它使得某类对象可以继承另外一类对象的特征和能 力。 若类之间具有继承关系,则它们之间具有下列几个特性: 类间具有共享特征( 包括数据和程序代码的共享) : 类间具有细微的差别或新增部分( 包括数据和程序代码的 共享) : 西南交通大学研究生学位论文 第l o 页 类间具有层次结构。 具体讲,若类b 继承类a 时,则属于b 中的对象便具有类a 的一切性质( 数据属性) 和功能( 操作) 。称被继承类a 为基类或 父类,或超类;而称继承类b 为a 的派生类或予类 夺多态性和虚函数: o o p 另一重要特征是不同类的对象对同一函数调用反应不同。 例如,设想两个类,一个类继承另一个类,两者均含有d r a w ( ) 方 法,根据类应该画什么,每个类执行d r a w ( ) 方法产生的结果是不 同的。在层次中对同一函数不同的响应称之为多态性。 在o o p 领域多态和继承一样重要,它是通过虚函数实现的。 基类中的虚函数允许派生类改变实现方法。 例如,有一类c a i r v e h i c l e ,其包含简单地画盒子的d r a w ( ) 方法。 从c a i r v e h i c l e 类派生了c j e t 和c h e l i c o p t e r 两个类,它们继承d r a w ( ) 方法,知道如何画盒子。但由于这两个派生类各具特点,它们可以 使父类的方法无效而画出各自较适合的东西( 如喷气式飞机和直升 机) 。 多态性可归结为下列四个步骤进行: 创建基类,它至少有一个虚函数。 从基类派生一个或多个类。 使基类的虚函数无效。 每个派生类以不同的方式实现从基类中继承的虚函数 简而言之,父类将它全部的数据和方法传给其派生类,而派生 类可改变基类中的虚函数的实现。 夺友元函数 个类的私有成员是不能为类的外部所访问的。这种情况 有时又给我们带来了麻烦,也不能达到对现实世界的模仿。为 使一个类外部的对象能够对其私有成员进行访问,c + + 引入了 友元函数。友元函数简称友元。 堕塑奎里奎堂堡塞生堂垡笙茎 蔓! ! 蔓 一个类的友元是在该类中说明的函数,它不是该类的成员,但 可以访问该类的所有成员,包括私有成员和保护成员。说明一 个友元的方法是使用关键字f r i e n d 。 2 2 神经网络基本模型 从宏观上看,神经计算系统的功能由神经元的计算和它们之间 信息的传递来体现,一个神经计算系统中的神经元数目虽然很多, 它们之间的连接也非常复杂,但神经元的计算方式是一样的,不同 的可能只是它们的输入函数、传递函数、输出函数和学习规则。从 神经元在神经网络中的功能来看,有很多神经元是输入神经元,也 有很多是隐层神经元及输出神经元。对于这样一大批具有相同或相 似功能或计算特性的神经元,根据它们的功能或计算特性进行聚 类,这是一个归纳过程,也是面向对象中进行类的构造的过程。 2 2 1 数学模型 一个神经网络( n n ) 可被下面的三元组描述: n n = ( s ,p ,t ) s 代表模式集合,用来训练、测试或运行神经网络,p 代表神 经网络需要的参数,t 代表神经网络的拓扑结构。 1 模式集合 模式集合s = i ,o i 代表输入模式集合,o 代表输出模式集合。 输入集合 i = ( p “) k 代表输入模式集合分量,j 代表输入集合分量下标。 输出集合 o = o k j ) k 代表输出模式集合分量,j 代表输出集合分量下标。 2 神经网络参散 西南交通大学研究生学位论文第1 2 页 在n n = ( s ,p ,t ) 中参数集合p 包括各种参数,这些参数在 测试、训练或运行神经网络时将用到。 3 神经网络的拓扑结构 神经网络的拓扑结构( t ) 定义了框架结构( f ) 及各神经员 之间的连接( l ) ,它可被下面的两元组定义: t = ( f ,l ) 框架结构f 定义了神经网络的各层神经元的集合: f 2 c l ,c 2 ,c 。 神经网络的每一层包含了若干神经元( n ) ,每一神经元被其所在 的层( i ) 及其在该层中的位置0 ) 所确定: c 。2 n i , j 框架结构( f ) 只是定义了神经元的集合,而各神经元间的关系是 由神经网络的拓扑结构的第二个成员内部连接( l ) 来建立: l 2 w j k ,1 ) 一个连接w 被起始神经元的位置( i j ) 及终点神经元的位置( k ,1 ) 所确定。 一个简单的神经网络如下图所示: 2 2 2 拓扑结构的类实现 图2 1 西南交通大学研究生学位论文 第1 3 页 神经网络的拓扑结构t 定义了其内部框架,现从中抽象出两 个基类c b a s e n o d e 和c b a s e l i n k ,这两个类是今后所建的类的基 础。 1 结点类 c b a s e n o d e 说明:本文中给出的类的定义只是实现了网络功能,而与编程 技巧及界面相关的属性与函数并没有给出。 下图给出了基本类的实现中神经元与连接之间的关系: n o d e l o 代表神经元, 口代表连接 图2 2 n o d e 2 在神经网络中,一个连接对应两个神经元( 可以是同一个神经 元) ,为了记住这两个神经元,在类c b a s e l i n k 中定添加了两个数 据成员m _ p l n n o d e 和m _ p o u t n o d e ,分别表示连入该连接的神经元 的地址和该连接所指向的神经元的地址。而在网络中,一个神经元 可能对应着多个连接,不仅有与后层网络各神经元的连接,而且 有与前一层网络各神经元的连接,为此,在类c b a s e n o d e 中添加 了两个链表( 链表是种数据结构,详细信息请参阅附录2 ) m i n l i n k s l i s t 和m o u t l i n k s l i s t ,m i n l i n k s l i s t 用来存放与前 层网络各神经元的连接的地址,m o u t l i n k s l i s t 用来存放与后一层 要塞銮塑盔堂堡塞生堂垡堡塞 苎! ! 墨 网络各神经元的连接的地址。如图2 2 中的i n l i s t 与o u t l i s t 。 在一个网络中,每个神经元的状态都与同该神经元相连的其它 神经元的状态相关的,当相连的其它神经元的状态改变时,该神经 元的状态也要作相应的调整,这个功能是通过函数r u n 来实现的。 由于不同的神经元实现的方法可能不同,所以在类c b a s e n o d e 中 只是给出了r u n 的声明,具体的实现由其子类给出。 c b a s e n o d e 定义了所有神经元的基类。 c l a s sc b a s e n o d e :p u b l i cc o b j e c t p r o t e c t e d : c o b l i s t m i n l i n k s l i s t ; c o b l i s t m 翼u t l i n k s l i s t ; d o u b l e mp v a l u e ; i n tm _ n v a l a r r a y s i z e ; p u b l i c : c b a s e n o d e ( i n tv s i z e = 1 ) ; v i r t u a l c b a s e n o d e ( ) ; i n l i n ev i r t u a ld o u b l eg e t v a l u e ( i n ti d = n o d e ) k l u e ) ; v i r t u a lv o i ds e t v a l u e ( d o u b l ev a l ,i n ti d = n o d e v a l u e ) ; c 0 b l i s t + g e t o u t l i n k l i s t p t r ( ) ; c o b l i s t g e t i n l i n k l i s t p t r ( ) ; p u b l i c : v i r t u a lv o i dr u n ( ) ; v i r t u a lv o i dl e a r n ( i n tm o d e = 0 ,d o u b l el e a r n i n g r a t e = o ) ; v o i dl i n k t o ( c b a s e n o d e & t o n o d e ,c b a s e l i n k + l i n k ) ; f r i e n dv o i dc o n n e c t ( c b a s e n o d e & f r o m ,c b a s e n o d e & t o ,c b a s e l i n k + l i n k ) ; f r i e n dv o i dc o n n e c t ( c b a s e n o d e & f r o m ,c b a s e n o d e & 堕塑奎堕查堂堕塞皇堂壁垒塞 墨! ! 亘 t o ,c b a s e l i n k & l i n k ) ; f r i e n dv o i dc o n n e c t f c b a s e n o d e + f r o m ,c b a s e n o d e + t o ,c b a s e l i n k + l i n k ) ; f r i e n db o o ld i s c o n n e c t ( c b a s e n o d e + f r o m ,c b a s e n o d e + t o ) ; ; 在类c b a s e n o d e 中,成员m a ) v a l u e 为浮点数组指针,用来存 放神经元的结点值及可能用到的参数如阂值等,它的长度由 m _ n v a l a r r a y s i z e 确定。由于m _ p v a l u e 为私有成员,所以提供了公 有成员函数g e t v a l u e 与s e t v a l u e 对它的访问,由于它们都为虚函 数,所以c b a s e n o d e 的子类都可以重新定义它们以完成特定的功 能。 成员m o u t l i n k s l i s t 与m i n l i n k s l i s t 如前所述,它们的地址 可由成员函数g e t o u t l i n k l i s t p t r ( ) 与g e t i n l i n k l i s t p t r ( ) 得到。 为了与某一个结点达到功能上的连接,提供了成员函数 l i n k t o ( c b a s e n o d e & t o n o d e ,c b a s e l i n k * l i n k ) ,该函数把本结点通 过l i n k 与t o n o d e 连接起来,具体实现如下: v o i dc b a s e n o d e :l i n k t o ( c b a s e n o d e & t o n o d e ,c b a s e l i n k l i n k ) ( mo u t l i n k s l i s t a d d t a i l ( 1 i n k ) ; t o n o d e g e t i n l i n k l i s t p t r ( ) 一 a d d t a i l ( 1 i n k ) ; l i n k 一 s e t l n n o d e ( t h i s ) ; l i n k 一 s e t o u t n o d e ( & t o n o d e ) ; ) 如图2 2 ,如果是n o d e l 连接n o d e 2 ,则当前结点为n o d e l ( t h i s ) , t o n o d e 为n o d e 2 ,l i n k 为l i n k 的地址。n o d e l 要与一个新结点相 连,它需要做的唯一事情就是把新连接的地址记住: m _ o u t l i n k s l i s t a d d t a i l ( 1 i n k ) ; n o d e 2 也是如此,但因为是新连接连向它,所以应如下连入: 西南交通大学研究生学位论文 t o n o d e g e t i n l i n k l i s t p t r ( ) - a d d t a i l ( 1 i n k ) ; 而对于连接对象l i n k ,它不但要记住前面的结点 住后面的结点: l i n k s e t l n n o d e ( t h i s ) ; 第1 6 页 而且还要记 l i n k 一 s e t o u t n o d e ( & t o n o d e ) ; t h i s 指当前结点,l i n k 把m _ p l n n o d e 设置为当前结点,而把 mp o u t n o d e 设置为t o n o d e 。 下面三个友元 f r i e n dv o i dc o n n e c t ( c b a s e n o d e & f r o m c b a s e n o d e & t o c b a s e l i n k + l i n k ) ; f r i e n dv o i dc o n n e c t ( c b a s e n o d e & f r o m ,c b a s e n o d e & t o , c b a s e l i n k & l i n k ) ; f r i e n dv o i dc o n n e c t ( c b a s e n o d e + f r o m ,c b a s e n o d e + t o , c b a s e l i n k + l i n k ) ; 它们都是通过调用函数l i n k t 0 达到连接神经元的目的,唯一 不同的是参数类型。 而友元d i s c o n n e c t ( c b a s e n o d e + f r o m ,c b a s e n o d e + t o ) 则是断开 结点f r o m 与t o 的连接。 函数l e a r n ( d o u b l el e a r n i n g r a t e ,i n tm o d e ) 与r u n ( ) l r u n 的作用是计算结点的状态,具体地说,它从所有连向它的 结点中获得加权信息,通过激励函数求的结点值并存放在成员 m _ p v a l u e 中。 l e a r n 并不改变结点的状态,它只是通过参数调用连接类的特 定函数完成相关连接权的更新。 2 连接类c b a s e l i n k c l a s sc b a s e l i n k :p u b l i cc o b j e c t p r o t e c t e d : 西南交通大学研究生学位论文 第1 7 页 i n tm n v a l a r r a y s i z e ; d o u b l e + m o v a l u e ; c n e u o b j e c t + m r f l n n o d e ; c n e u o b j e c t + m _ _ p o u t n o d e ; p u b l i c : c b a s e l i n k ( i n ts i z e = 1 ) ; v i r t u a l c b a s e l i n k ( ) ; v i r t u a lc n e u o b j e c t + g e t o u t n o d e p t r o ; v i r t u a lc n e u o b j e c t + g e t l n n o d e p t r ( ) ; v i r t u a lv o i ds e t o u t n o d e ( c n e u o b j e c t + n o d e ) ; v i r t u a lv o i ds e t l n n o d e ( c n e u o b j e c t + n o d e ) ; v i r t u a lv o i ds e t v a l u e ( d o u b l en e u v a l ,i n ti d = w e i g h t ) ; v i r t u a ld o u b l eg e t v a l u e ( i n ti d = w e i g h t ) ; v i r t u a ld o u b l eg e t w e i g h t e d l n v a l ( i n tm o d e = n o d e v a l u e ) ; i n l i n ev i r t u a ld o u b l eg e t o u t n o d e v a l ( i n tm o d e = n o d e ) k l u e ) ; i n l i n ev i r t u a ld o u b l eg e t l n n o d e v a l ( i n tm o d e = n o d e ,k l u e ) ; p u b l i c : v i r t u a ld o u b l er a n d o m ( ) ; v i r t u a lv o i du p d a t e w e i g h t ( i n tm o d e ,d o u b l el e a r n i n g r a t e ) ; v i r t u a lv o i dr u n ( d o u b l e e x c e p t o u t ) ; ) ; 正如在类c b a s e n o d e 中一样,c b a s e l i n k 的数据成员 m _ n v a l a r r a y s i z e 与 m _ p v a l u e 具有相同的功能,m _ p v a l u e 可以存放连接权值或者 它的改变等t m n v a l a r r a y s i z e 则记录了m _ p v a l u e 的长度,同样提 供了函数s e t v a l u e ( d o u b l e n e u v a l i n ti d = w e i g h t ) - 与g e t v a l u e ( i n t i d = w e i g h t ) 来对m _ p v a l u e 进行访问, 网络在学习过程中,

温馨提示

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

评论

0/150

提交评论