人工神经网络入门(1) —— 单层人工神经网络应用示例

范例程序下载:http://files.cnblogs.com/gpcuster/ANN1.rar
如果您有疑问,可以先参考 FAQ
如果您未找到满意的答案,可以在下面留言:)
1 介绍

还记得在2年前刚刚接触RoboCup的时候,从学长口中听说了ANN(人工神经网络),这个东西可神奇了,他能通过学会从而对一些问题进行足够好处理。就像咱们人一样,可以通过学习,了解新的知识。
但是2年了,一直想学习ANN,但是一直没有成功。原因很多,其中主要的原因是咱们国内的教程中关于这个技术的介绍过于理论化,以至于我们基础差和自学者望而却步。
现在,我希望通过一个简单的示例,让大家先有一个感性的认识,然后再了解一些相应的理论,从而达到更好的学习效果。

2 范例程序的使用和说明

本程序示例2个简单的运算:
1 AND运算: 就是咱们常用的求和运算,如:1 AND 0 = 1 
2 OR运算: 就是咱们常用的求并运算,如:1 OR 0 = 1 

启动程序后,你将会看到如下的界面:

点击“开始训练AND”按钮后,程序就开始训练 AND 运算,并在训练结束后提示咱们。
同时界面变成如下:

你只需要点击“0 0”按钮,就会在“计算结果”下面显示经过训练以后的ANN计算出来的结果。
如下所示:

“计算结果”显示为“1.74E-10”,说明 0 AND 0 = 0.
这个结果就是我们想要的。训练成功

其他的按钮使用方法类似:)

3 计算过程
咱们可以参考一下AND计算的总体运行过程:

            //初始化训练集合
            TrainSet[] sets = new TrainSet[]{new TrainSet(000), new TrainSet(010), 
                                                                
new TrainSet(100), new TrainSet(111)}
;

            
//构造单层神经网络 2 个输入节点 1个输出节点
            NeuralNetwork nn = new NeuralNetwork(21);
            slnn 
= new SingleLayerNeuralNetworks(nn, sets);

            
//训练
            slnn.Train();

            MessageBox.Show(
"AND运算训练结束");
            
this.button2.Enabled = true;
            
this.button3.Enabled = true;
            
this.button4.Enabled = true;
            
this.button1.Enabled = true;
            
this.Text = "AND运算";


OK,通过上面的代码可以看出,咱们的神经网络有2个输入节点,用于输入AND运算的2个参数。1个输出节点,用于输出AND运算的1个结果。
接下来,咱们的单层神经网络通过一个训练集(有一组输入和相应的希望输出数据)开始训练。训练结束后,咱们就可以用相应的数据对训练结果进行测试了(通过“0 0 ”等按钮)。

4 预告
在下一篇文章中,我将进行ANN基本概率的介绍和本示例实现的原理:)

5 总结
在本文中,咱们介绍了1个基于单层神经网络的简单易懂的程序示例,可以让大家先有一个感性的认识。

 

posted @ 2008-05-22 07:10 逖靖寒 阅读(3656) 评论(34)  编辑 收藏 所属分类: .NET 编程算法

  回复  引用  查看    
#1楼 2008-05-22 07:52 | TT.Net      
这里的 训练 一词怎么解释?
学会?

  回复  引用    
#2楼 2008-05-22 08:04 | 我到底做错了甚么 [未注册用户]
貌似很深奥,不知道能够最终达到甚么效果,实现甚么功能,机器人??
  回复  引用  查看    
#3楼 2008-05-22 08:22 | T.Johnny      
interesting , expect ...
  回复  引用  查看    
#4楼 2008-05-22 08:24 | LanYo      
不知道是什么,学习
  回复  引用    
#5楼 2008-05-22 09:03 | dreammaster [未注册用户]
所谓学习,就是利用给出的数据进行权值计算,这个东西实际上在学术上已经用于地震预报。
  回复  引用  查看    
#6楼 2008-05-22 09:09 | 时间太快      
不懂什么意思 。。。
  回复  引用  查看    
#7楼 2008-05-22 09:13 | aspnetx      
神经网络还真的不是很熟悉,楼主能否解释下这里,我看的不是很懂:

“计算结果”显示为“1.74E-10”,说明 0 AND 0 = 0.


谢谢
  回复  引用    
#8楼 2008-05-22 09:22 | Tony.chen [未注册用户]
很多人貌似对这个只是入门阶段,希望LZ能讲的清楚一点
  回复  引用  查看    
#9楼 2008-05-22 09:39 | vainnetwork      
这个一直让我感到神秘.
  回复  引用    
#10楼 2008-05-22 09:52 | Brahms [未注册用户]
你这个学习网络 来运算54 AND 0 结果为什么是1?
  回复  引用  查看    
#11楼 2008-05-22 10:39 | yzlhccdec      
@aspnetx
神经网络实际上是一个黑箱,代表着对输入和输出的一个映射。它只能无限逼近那个映射。1.74E-10表示神经网络逼近的结果和目标值的误差已经达到E-10级别,所以可以认为相等。也即0 AND 0 = 0
  回复  引用  查看    
#12楼 2008-05-22 10:39 | yzlhccdec      
@Brahms
。。。那肯定是因为样本不够,泛化能力不好。呵呵
  回复  引用  查看    
#13楼 2008-05-22 10:48 | yzlhccdec      
楼主,你要介绍哪种神经网络?我没看出来。。囧。。。
  回复  引用  查看    
#14楼 2008-05-22 10:54 | 海洋      
呃~很神奇,可以做个机器人吗
  回复  引用    
#15楼 2008-05-22 10:55 | abinchen [未注册用户]
ANN一般用于非线性拟合。建议楼主通过一个非线性函数如y=sqr(x) + x生成训练集,而且至少提供10组训练数据,如x=1~10,最后再代入x=11才验证ANN成果。这样更能体现ANN的优点。
  回复  引用  查看    
#16楼 2008-05-22 11:05 | 赵俊      
人工神经这个名字貌似很深奥,不是自己研究的范围,不知道这个东西对日常应用有什么价值,不过我很佩服楼主的毅力!
  回复  引用  查看    
#17楼 2008-05-22 12:19 | Zhuang miao      
喜欢,我这有一套相关电子书。。可是都没看过。。呵呵
  回复  引用  查看    
#18楼 2008-05-22 12:58 | yzlhccdec      
@abinchen
恩,一般用sigmoid函数或者它的变种
  回复  引用  查看    
#19楼 [楼主]2008-05-22 13:41 | 逖靖寒      
@yzlhccdec
我的示例就是用的sigmoid函数
  回复  引用    
#20楼 2008-05-22 15:13 | asp.net cms [未注册用户]
完全看不懂,学习了
  回复  引用  查看    
#21楼 2008-05-22 16:29 | 簡簡單單..      
Mark
  回复  引用  查看    
#22楼 2008-05-22 23:53 | 香蕉皮      
我觉得没实质内容...
  回复  引用  查看    
#23楼 2008-05-23 09:32 | Rivers Zhao      
看不懂,一直有兴趣,收藏.
  回复  引用  查看    
#24楼 2008-05-24 10:39 | 水煮 鱼      
呵呵
這個確實很不錯
以前做信號的盲源分離,里面也用到了一些神經網絡
其實就是拿一個簡單的權值模型,來模擬運算,并且形成一個反饋系統,通過一定的規則修正權值,最終達到期望的結果,建立正確的黑盒模型。
樓主,還要好好研究哈!這個確實有些意思,可惜自己學藝也不精!呵呵!
  回复  引用  查看    
#25楼 2008-05-29 02:05 | Flouse      
学习参考
  回复  引用    
#26楼 2008-06-04 12:32 | goldanycom [未注册用户]
好东西,应该顶!加强国内对神经网络的认识!
  回复  引用  查看    
#27楼 2008-06-19 22:15 | Indigo Dai      
你好。
你主修专业是人工智能吗?
  回复  引用  查看    
#28楼 [楼主]2008-06-20 11:36 | 逖靖寒      
@Indigo Dai
不是的,AI是我的业余爱好。
  回复  引用  查看    
#29楼 2008-07-10 23:28 | ▄︻┳═一      
Mark...有空研究
  回复  引用  查看    
#30楼 2008-07-11 19:59 | 金金      
请问楼主:
NeuralNetwork nn = new NeuralNetwork(2, 1);
slnn.Train();
这两个语句中的NeuralNetwork();和Train();是自己写的?还是调用神经网络工具箱中的呢?

  回复  引用    
#31楼 2008-07-11 20:13 | Aaron.Guo [未注册用户]
@金金
是自己实现的,具体的实现您可以参看程序的源代码。
  回复  引用  查看    
#32楼 2008-07-12 12:01 | 金金      
Aaron.Guo [未注册用户]
谢谢,看到了。
  回复  引用  查看    
#33楼 2008-08-23 01:25 | 斯克迪亚      
这篇文章看了好多遍,又看了看代码,还是没法搞明白~~
按开始训练后,它训练那么多次,在训练中谁告诉它什么是正确什么是错误的?
是程序内建的逻辑算出结果,然后再告诉它的么?
这种神经网络在应用时,是不是基本都是靠人来指导训练的?
  回复  引用  查看    
#34楼 [楼主]2008-08-23 08:35 | 逖靖寒      
@斯克迪亚
--在训练中谁告诉它什么是正确什么是错误的?
我给一个输入(1,1)和一个输出(1)
ANN自己会通过(1,1)计算出一个结果,比如说是(0.5),这是时候,(0.5)和实际的输出(1)就会有差值,这个差值越大,说明错误越大。

--是程序内建的逻辑算出结果,然后再告诉它的么?
我们通过这个差值来调节ANN内部的权值。

--这种神经网络在应用时,是不是基本都是靠人来指导训练的?
不同的训练类型不同。
本例是靠数据。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-22 12:55 编辑过


相关链接: