⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 人工神经网络实验系统(BP网络) V1.0 Beta
💻 TXT
字号:
		人工神经网络实验系统(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/

--------------------------------------------------------------
~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在~~~~~~我思故我在

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -