123BRAIN

所属分类:人工智能/神经网络/深度学习
开发工具:Visual C++
文件大小:47KB
下载次数:10
上传日期:2006-03-11 11:39:57
上 传 者lambitionx666
说明:  是一个应用软件,基于神经网络的应用,神经网络模式识别及其实现
(is a software application, based on the application of neural networks, neural networks and pattern recognition to achieve)

文件列表:
brain.exe (67695, 2001-07-08)
EGAVGA.BGI (5363, 1988-08-29)
TEST1.BP (140, 2001-07-07)
TEST2.BP (140, 2001-07-07)
TEST3.BP (200, 2001-07-08)
TEST4.BP (140, 2001-07-07)

人工神经网络实验系统(BP网络) V1.0 Beta 零.说在前面的一番话 大家好,这个程序是我自己做的,为了学习的方便和用于研究目的。 其运用了人工神经网络中的前向网终的BP网络的理论,还结合了Hebb学 习规则,使其具有一定的学习、自适应和分辩能力。 本来,只做了个感知器的模型,后将多个感知器用BP网络连结, 做成一个"人工大脑"。对这个"大脑"的操作,有两种,一种是学习功能, 一种是处理功能。但在神经网络"学习"过程中要输入很多的样本来测试数 据。为了方便,我为这个神经网络做了套指令系统。也就是说,将要学习 的样本数据做成"指令",把神经网络当作"CPU"让它来处理,就方便了许多。 当然,这些学习样本还可以存成文件的,以便以后再研究时用。 现在,我把这个程序拿出来和大家分享,大家可以任意"训练"这个 "人工大脑",说不定有奇迹发生哦! 一.一些基本常识和原理 [什么叫神经网络?] 人的思维有逻辑性和直观性两种不同的基本方式。逻辑性的思维是 指根据逻辑规则进行推理的过程;它先将信息化成概念,并用符号表 示,然后,根据符号运算按串行模式进行逻辑推理;这一过程可以写成 串行的指令,让计算机执行。然而,直观性的思维是将分布式存储的 信息综合起来,结果是忽然间产生想法或解决问题的办法。这种思维 方式的根本之点在于以下两点:1.信息是通过神经元上的兴奋模式分布 储在网络上;2.信息处理是通过神经元之间同时相互作用的动态过程 来完成的。 人工神经网络就是模拟人思维的第二种方式。这是一个非线性动力 学系统,其特色在于信息的分布式存储和并行协同处理。虽然单个神经 元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现 的行为却是极其丰富多彩的。 [人工神经网络的工作原理] 人工神经网络首先要以一定的学习准则进行学习,然后才能工作。现以 人工神经网络对手写“A”、“B”两个字母的识别为例进行说明,规定 当“A”输入网络时,应该输出“1”,而当输入为“B”时,输出为“0”。 所以网络学习的准则应该是:如果网络作出错误的的判决,则通过网络 的学习,应使得网络减少下次犯同样错误的可能性。首先,给网络的各 连接权值赋予(0,1)区间内的随机值,将“A”所对应的图象模式输入给 网络,网络将输入模式加权求和、与门限比较、再进行非线性运算,得到 网络的输出。在此情况下,网络输出为“1”和“0”的概率各为50%,也 就是说是完全随机的。这时如果输出为“1”(结果正确),则使连接权值 增大,以便使网络再次遇到“A”模式输入时,仍然能作出正确的判断。 如果输出为“0”(即结果错误),则把网络连接权值朝着减小综合输入加 权值的方向调整,其目的在于使网络下次再遇到“A”模式输入时,减小 犯同样错误的可能性。如此操作调整,当给网络轮番输入若干个手写字 母“A”、“B”后,经过网络按以上学习方法进行若干次学习后,网络 判断的正确率将大大提高。这说明网络对这两个模式的学习已经获得了 成功,它已将这两个模式分布地记忆在网络的各个连接权值上。当网络 再次遇到其中任何一个模式时,能够作出迅速、准确的判断和识别。一 般说来,网络中所含的神经元个数越多,则它能记忆、识别的模式也就 越多。 ================= 二.指令系统的使用 ================= 本"人工神经网络"共有13个神经元构成,4个为输入神经元,1个为输 出神经元。也就是说,这个程序最多能处理一个四元关系(包含了二元, 三元)。 指令简表 ========================== cls 清屏 clearbp 清空"大脑",也就是说让它回到初始状态。 因为一般"学习"和"处理"后往往会产生"惯性思维" 的哦。呵呵,和人脑很像的。 clearcom 清空所有指令(学习/处理 指令) list 显示所有指令 add 添加一条指令 delete 删除一条指令 edit 修改其中一条指令 run 让"大脑"处理所有指令 at 让"大脑"处理其中一条指令 show 显示当前神经网络状态!是张图,很有趣! 神经元会受刺激程度变大变小,之间的神经连结也会 随耦合程度变化。 save 将内存中的指令存入一个文件,扩展名为*.bp load 从一文件中读入指令到内存 dir 显示当前目录下的指令文件(Dos命令) about 显示版本作者信息 exit 退出系统 好了,总共只有这些命令。很简单吧。下面来看一看,其中几条重要指令 的使用说明。 (说明: 1.所有指令都是不带参数的,也就是说,只要打<指令>加回车就OK了, 系统会一步步提示你如何做的。 2.所有指令都就小写字母打,系统只认小写) [几条最有用的指令] 1.help指令 这就不用多说了吧!可以列出所有的指令的简要说明。 虽然简单,但help很重要,对不对? 2.add指令 其功能是添加一条指令进指令系统(CS)。指令分两类:"学习"和"处理" "学习"嘛,就是刺激"输入端神经元"的过程。"处理"当然就是 在大脑"学习"成功后,就能看到的效果啦。 ----------------------------------- 打了add后,系统问: Mode 0.Learning 1.Process Choose: 0 (回车) (0 是学习 1是处理) Learning time(Default 1):3 (问你"学习"次数,也就是说要 刺激它几次,一般是3次最好 如果你刚才选了"处理",就 不会问你了) Data 1: (依次输入要它学习或处理的数据样本就 Data 2: 可以了,共4个,如果没有输入0) Data 3: Data 4: (现在你只要看懂指令的使用方法就行了,具体地,见后面的"综合举例") 3.list指令 显示所有的指令。这条指令很重要哦! 其显示格式例如: No. Status Freq. Data 1 Data 2 Data 3 Data 4 ============================================================= 1 Learn 3 4 2 0 0 2 Process 1 3 3 0 0 No.是指令序号,Status是指令功能Learn(学习)或Process(处理) Freq是刺激次数,Data 1,2,3,4分别是对输入神经元的赋初值 怎么样?一目了然吧. 4.run指令 处理所有"学习"及"处理"指令。 其输出值一般为这样的形式: L: *Out1:xxxxxx Out2:xxxxxx Out3:xxxxxx P: *Out1:xxxxxx <1>每一行,表示一条指令的执行输出。输出值只有一个,因为此神经网络 只有一个输出神经元。 <2>out1表示第一次"刺激"后的输出,out2表示第二次...... <3>最前面的'L' 表示是"学习"指令,那'P'就表示是'处理'指令 好了,指令就学到这吧。如果忘了的话,打help看看吧! ================================================================= 三.综合举例 例1:自动分辩两类"数和"的关系 本例让"大脑学习"分辩两类关系, 第一类:如3和7,4和6....它们的和为10 第二类:如5和15,3和12....它们的和为15 用add不断添加指令(指令如下表) (此例数据样本在test1.bp文件中,可用 load命令读取) 例如添加第一条: Mode 0.Learning 1.Process Choose: 0 (回车) Learning time(Default 1):3 (学习3次) Data 1: 2 (用2和8刺激它) Data 2: 8 Data 3: 0 Data 4: 0 ...................(依次类推,看下表) 最后打list显示如下 list No. Status Freq. Data 1 Data 2 Data 3 Data 4 ================================================================ 1 Learn 3 2.00 8.00 0.00 0.00 2 Learn 3 3.00 7.00 0.00 0.00 3 Learn 3 9.00 1.00 0.00 0.00 4 Learn 3 3.00 12.00 0.00 0.00 5 Learn 3 10.00 5.00 0.00 0.00 6 Learn 3 9.00 6.00 0.00 0.00 7 Process 1 4.00 11.00 0.00 0.00 用2和8,3和7,9和1分别刺激"大脑"3次(Freq=3) (第一类) 再用10和5,9和6,4和11,分别刺激"大脑"3次 (第二类) 最后,有一条Process(处理)指令,要"大脑"分辨4和11属"第一类" 还是第二类? 看看结果吧!执行run语句。 L *Out1: 0.515654 Out2: 0.515974 Out3: 0.515974 L *Out1: 0.515974 Out2: 0.515974 Out3: 0.515974 L *Out1: 0.515974 Out2: 0.515974 Out3: 0.515974 L *Out1: 0.519718 Out2: 0.520050 Out3: 0.520051 L *Out1: 0.520051 Out2: 0.520051 Out3: 0.520051 L *Out1: 0.520051 Out2: 0.520051 Out3: 0.520051 P *Out1: 0.520051 从输出结果可以看到,前3条"学习"指令,使"输出"神经元收 敛到了值 0.515974。 而后3条"学习"指令,其收敛到了值0.520051。 再看看处理4和11的指令结果 P *Out1: 0.520051 看到了吗? "大脑"识别出了4和11是属于第二类的! 怎么样?很神奇吧? 再打show指令看看吧!"神经网络"已经形成了! 你可以自己任意的设"模式"让这个"大脑"学习分辩哦!只要样本数据量 充分(可含有误差的样本),如果能够在out数据上收敛地话,那它就能 分辨地很准哦! 有时不是绝对精确,因为它具有"模糊处理"的特性.看Process输出的值 接近哪个Learning的值就是"大脑"作出的"模糊性"判别! ============================================================ 四.后 记 这个程序是我连续几天"奋战"做出来的,只是一个"人工神经网络" 的入门级模型,它包含了BP网络有最简单的Hebb自学习函数。虽然它能 体现出一部分功能,但还非常地不完善。 其原因是基于我个人的学识水平限制(我才读大学一年级)和当前此 领域的发展程度限制的。 当我更深刻地学习研究的时候,我愈觉得自已知道的太少。这个程 序只是我做的第一个尝试性的模型,我还准备作下一个,当然,会比这 个好的!最后,感谢您的支持! 沈琦 2001.7 与我的联系方式,欢迎有兴趣的朋友或对此有所研究的前辈不吝赐教 E-mail: shenqi@shenqisoft.com 我开设的<人工智能>主题的网站地址 http://www.shenqisoft.com/ai/ -------------------------------------------------------------- ~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在

近期下载者

相关文件


收藏者