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/
--------------------------------------------------------------
~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在
近期下载者:
相关文件:
收藏者: