人工神经网络简介和单层网络实现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-07 19:50:36

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

【转】人工神经网络简介

下载地址:人工神经网络.pdf [转]人工神经网络简介

人工神经网络简介

本文主要对人工神经网络基础进行了描述,主要包括人工神经网络的概念.发展.特点.结构.模型. 本文是个科普文,来自网络资料的整理. 一.             人工神经网络的概念 人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型.该模型以并行分布的处理能力.高容错性.智能化和自学习等能力为特征,

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

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

人工神经网络入门(4) —— AFORGE.NET简介

范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑问,可以先参考 FAQ 如果您未找到满意的答案,可以在下面留言:) 0 目录人工神经网络入门(1) -- 单层人工神经网络应用示人工神经网络入门(2) -- 人工神经基本概念介绍人工神经网络入门(3) -- 多层人工神经网络应用示例人工神经网络入门(4) -- AForge.Net简介 1 介绍这篇文章中,我们将介绍一个用C#实现的框架AForge,利用这个框架,您可以方便地操作人工网络,

深度学习——人工神经网络再掀研究热潮

深度学习——人工神经网络再掀研究热潮 胡晓林 人工神经网络起源于上世纪40年代,到今天已经70年历史了.就像人的一生,经历了起起落落,有过辉煌,有过黯淡,有过嘈杂,有过冷清.总体说来,过去的20年中人工神经网络的研究不温不火,直到最近三五年,随着深度学习概念的提出,人工神经网络才又重新焕发生机,甚至再度掀起研究热潮.本文简述一下人工神经网络的“前世今生”,并简单展望一下它的未来. 第一个神经元模型是1943年McCulloch和Pitts提出的,称为threshold logic,它可以实现一些

用BP人工神经网络识别手写数字

http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb50ZcKor41PEikwv5TfTqwrsQ4-9wmH06L7bYD04u 用BP人工神经网络识别手写数字 yzw20091201上传于2013-01-31|暂无评价|356人阅读|13次下载|暂无简介|举报文档 在手机打开 赖勇浩( http://laiyonghao.com ) 这是我读工

人工神经网络--ANN

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

开源的人工神经网络计算库 FANN 学习笔记 1

开源的人工神经网络计算库 FANN 学习笔记 1 这年头机器学习非常的火,神经网络算是机器学习算法中的比较重要的一种.这段时间我也花了些功夫,学了点皮毛,顺便做点学习笔记. 介绍人工神经网络的基本理论的教科书很多.我正在看的是蒋宗礼教授写的<人工神经网络导论>,之所以选这本书,主要是这本比较薄,太厚的书实在是啃不动.这本书写的也比较浅显,用来入门正合适. 看书的同时也在网上找了找人工神经网络的库代码.感觉 FANN 这个库还不错,就顺道学了学这个库的使用方法. FANN 是个开源的 C 语言实

人工神经网络基础概念、原理知识(补)

一提到人工神经网络应当想到三个基础的知识点:一是神经元模型:二是神经网络结构:三是学习算法.神经网络的种类多种多样,但其分类依据逃不出上面上个基础知识点.所以在学习中如果能够仅仅把握住以上三个线索,就能触类旁通,拥有一个非常好的视角看待神经网络.今天就对这三个基础知识点进行总结,达到指导神经网络学习以及深化对神经网络的理解的目的. 一.神经元模型 人工神经网络是在现代神经生物学研究基础上提出的模拟生物过程 ,反映人脑某些特性的一种计算结构.它不是人脑神经系统的真实描写,而只是它的某种抽象.简化和