人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)

原文:人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)

前面4篇文章说的是模糊系统,它不同于传统的值逻辑,理论基础是模糊数学,所以有些朋友看着有点迷糊,如果有兴趣建议参考相关书籍,我推荐《模糊数学教程》,国防工业出版社,讲的很全,而且很便宜(我买成7元钱)。

人工神经网络的简介

人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。它是一种运算模型,由大量神经元和相互的连接组成,每个神经元代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),用于模拟记忆。整个网络的输出则依网络的连接方式、权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。

人工神经网络的优势很明显,主要体现在以下三个方面:

1.具有自学习功能

2.具有联想存储功能

3.具有高速寻找优化解的能力

更多知识请参阅相关资料

AForge.Net单层网络实现AND运算

AForge.Net中有关神经网络的实现主要在AForge.Neuro中,用install-package AForge.Neuro获取。

我们按照一般步骤来:

1.构建模型

AND运算的话不用多讲,整理一下输入输出:

[0,0]  ===>  [0]

[1,0]  ===>  [0]

[0,1]  ===>  [0]

[1,1]  ===>  [1]

可以很容易看出,输入是2个,输出是1个节点,层数单层足矣。

代码:

//整理输入输出数据 double[][] input = new double[4][]; double[][] output = new double[4][]; input[0] = new double[] { 0, 0 }; output[0] = new double[] { 0 }; input[1] = new double[] { 0, 1 }; output[1] = new double[] { 0 }; input[2] = new double[] { 1, 0 }; output[2] = new double[] { 0 }; input[3] = new double[] { 1, 1 }; output[3] = new double[] { 1 }; 

2.选择激励函数和学习规则

AForge.Net中的激励函数需实现IActivationFunction 接口,AForge.Net中实现了3种:

BipolarSigmoidFunction

SigmoidFunction

ThresholdFunction(阈函数)

我们的激励函数(activation function)就选用阈函数了。

接下来考虑学习函数了。

AForge.Net中学习函数要实现ISupervisedLearning或者IUnsupervisedLearning接口,程序库实现了5种:

其中Perceptron Learning(感知学习)可以说是第一个神经网络的学习算法,它出现于1957年,常用于可线性分割的数据的分类。

代码:

//建立网络,层数1,输入2,输出1,激励函数阈函数 ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 2, 1); 
//学习方法为感知器学习算法 PerceptronLearning teacher = new PerceptronLearning(network); 

3.训练网络

teacher.RunEpoch(input, output);

4.获取输出进行处理

因为本来就模拟算法,所以没有什么处理,我们模拟一下看效果就行了。

//模拟 for (int i = 0; i < 4; i++) {     Console.WriteLine("input{0}:  ===>  {1},{2}  sim{0}:  ===>  {3}", i, input[i][0], input[i][1], network.Compute(input[i])[0]); }

完整代码:

//整理输入输出数据 double[][] input = new double[4][]; double[][] output = new double[4][]; input[0] = new double[] { 0, 0 }; output[0] = new double[] { 0 }; input[1] = new double[] { 0, 1 }; output[1] = new double[] { 0 }; input[2] = new double[] { 1, 0 }; output[2] = new double[] { 0 }; input[3] = new double[] { 1, 1 }; output[3] = new double[] { 1 };

for (int i = 0; i < 4; i++) {     Console.WriteLine("input{0}:  ===>  {1},{2}  output{0}:  ===>  {3}",i,input[i][0],input[i][1],output[i][0]); }

//建立网络,层数1,输入2,输出1,激励函数阈函数 ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 2, 1);

//学习方法为感知器学习算法 PerceptronLearning teacher = new PerceptronLearning(network);

//定义绝对误差 double error = 1.0; Console.WriteLine(); Console.WriteLine("learning error  ===>  {0}", error);

//输出学习速率 Console.WriteLine(); Console.WriteLine("learning rate ===>  {0}",teacher.LearningRate);

//迭代次数 int iterations = 0; Console.WriteLine(); while (error > 0.001) {     error = teacher.RunEpoch(input, output);     Console.WriteLine("learning error  ===>  {0}", error);     iterations++; } Console.WriteLine("iterations  ===>  {0}", iterations); Console.WriteLine(); Console.WriteLine("sim:");

//模拟 for (int i = 0; i < 4; i++) {     Console.WriteLine("input{0}:  ===>  {1},{2}  sim{0}:  ===>  {3}", i, input[i][0], input[i][1], network.Compute(input[i])[0]); }

效果:

人工神经网络和模糊系统结合前景

我解释一下为什么说完模糊逻辑以后要说人工神经网络。虽然模糊逻辑和神经网络是两个截然不同的领域,它们的基础理论相差较远,一个是新模型,一个是新集合理论。但从客观实践和理论的溶合上讲是完全可以令它们结合的。把模糊逻辑和神经网络相结合就产生了—种新的技术领域:这就是模糊神经网络。

常见的形式有:

1.逻辑模糊神经网络

2.算术模糊神经网络

3.混合逻辑神经网络

我个人感觉二者的结合其实就是一个学习和优化权系数的问题。

对于逻辑模糊神经网络采用基于误差的学习算法,对于算术模糊神经系统一般用模糊BP算法,遗传算法。这两块的相关技术都比较成熟了。而对于混合逻辑神经网络,一般没有特定算法,而且多用于计算而非学习。

可能有朋友觉得前两种也是比较新的,我起初也是这样想的,但我检索了近十年的相关论文(从万方下的),大部分思想和方法都可以从诸如Cybernetics等杂志的早期数据中(1980年上下)找到。

 

最后附上3篇有关Perceptron Learning的资料:http://www.ctdisk.com/file/4525564

时间: 2024-10-23 10:48:00

人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)的相关文章

人工神经网络简介

机器人2025本期导读 第一版: 人工神经网络简介 第二版: 受变色甲壳虫的启发,MIT研发可用于3D打印的机器人皮肤 第三版: 智享家 | 六年蛰伏,只为做一款好的机器人--大陆智源科技 高源 第四版: 数学专业经典读物 作者:fengbingchun 原文:http://blog.csdn.net/fengbingchun/article/details/50274471 一.人工神经网络的概念 人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),

C#中调用Matlab人工神经网络算法实现手写数字识别

手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab                                                               手写数字图像识别简介: 手写阿拉伯数字识别是图像内容识别中较为简单的一个应用领域,原因有被识别的模式数较少(只有0到9,10个阿拉伯数字).阿拉伯数字笔画少并且简单等.手写阿拉伯数字的识别采用的方法相对于

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

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

人工网络-基于人工神经网络的人脸识别算法

问题描述 基于人工神经网络的人脸识别算法 本人初次接触机器学习,0基础,现不得已需要学习BP和RBF算法,求高手指导(注:以前从未接触过这两种算法,所以最好能提供些具体讲解此两种算法的资料) 解决方案 Andrew Ng stanford 机器学习课程视频,网站学习:http://ufldl.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B 解决方案二: 我正在做这个,非常非常好

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

1 介绍 求异或(XOR)操作是计算机中常用到的一种计算: 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 我们可以使用第一篇文章中的代码来计算这个结果http://files.cnblogs.com/gpcuster/ANN1.rar( 需要修改其中的训练集),可以发现学习后的结果不能让我们满意,原因是单层神经网络学习能力有限 ,需要使用更加复杂的网络来学习. 在这一篇文章中,我们将使用一个新的多层神经网络来学习. 2 范例程序的使用和说明 该程

人工神经网络(Artificial Neural Netwroks)笔记-基本的非确定性统计训练算法

在上一篇文章 <人工神经网络(Artificial Neural Netwroks)笔记-消除样本顺序的BP算法 >中 修 改权重的方法被称为"最速下降法".每一次权重的修改都是确定的,权重都会被修改.甚至到最简单的 单层感知器也是如此. 但是我们有一个疑问,是否每一次的权重修改都是好的呢? 虽然"最速下降法"能在数学上被证明是每一次都比前一次越来越逼近最优解,但是这个逼近可是一个 无休止的过程.而且面对局部最小点的问题,"最速下降法"

人工神经网络(Artificial Neural Netwroks)笔记-基本BP算法

单层的感知器并不能解决XOR问题 人工神经网络(Artificial Neural Netwroks)也因为这个问题而陷入了低潮,但是后来提出的多层感 知器却让人工神经网络(Artificial Neural Netwroks)再一次high起来 BP网络是最为广泛的一种.具体的原理介绍可以通过网络得到这里只描述算法流程 基本的BP算法 1 for k=1 toL do 初始化W^(k) 2初始化精度控制参数ε 3 E=ε+1 4 while E>ε do 4.1 E=0 4.2 对S中的每个样

【机器学习】人工神经网络(ANN)浅讲

神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方式讲解神经网络.适合对神经网络了解不多的同学.本文对阅读没有一定的前提要求,但是懂一些机器学习基础会更好地帮助理解本文. 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术.人脑中的神经网络是一个非常复杂的组织.成人的大脑中估计有1000亿个神经元之多. 图1 人脑神经网络   那

人工神经网络(Artificial Neural Netwroks)笔记-离散单输出感知器算法

最近在重新学习人工神经网络(Artificial Neural Netwroks),做做笔记,整理思路 离散单输出感知器算法,传说中的MP 二值网络:自变量及其函数的值.向量分量的值只取0和1函数.向量 权向量:W=(w1,w2,w3.....wn) 输入向量:X=(x1,x2,x3.....xn) 训练样本集 {(X,Y)|Y为输入向量X的输出} 训练过程比较简单 如下: 1,初始化权向量W 2,重复下列过程,直到训练完成: 2.1对每个样本(X,Y),重复如下过程: 2.1.1输入X 2.1