原文:人工神经网络简介和单层网络实现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[][]; double[][] output = new double[][];
input[] = new double[] { , }; output[] = new double[] { };
input[] = new double[] { , }; output[] = new double[] { };
input[] = new double[] { , }; output[] = new double[] { };
input[] = new double[] { , }; output[] = new double[] { };

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(), , );
//学习方法为感知器学习算法 
PerceptronLearning teacher = new PerceptronLearning(network);

3.训练网络

teacher.RunEpoch(input, output);

4.获取输出进行处理

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

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

完整代码:

//整理输入输出数据 
double[][] input = new double[][]; double[][] output = new double[][];
input[] = new double[] { , }; output[] = new double[] { };
input[] = new double[] { , }; output[] = new double[] { };
input[] = new double[] { , }; output[] = new double[] { };
input[] = new double[] { , }; output[] = new double[] { };

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

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

//学习方法为感知器学习算法
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 = ;
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 = ; i < ; i++)
{
Console.WriteLine("input{0}: ===> {1},{2} sim{0}: ===> {3}", i, input[i][], input[i][], network.Compute(input[i])[]);
}

效果:

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

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

常见的形式有:

1.逻辑模糊神经网络

2.算术模糊神经网络

3.混合逻辑神经网络

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

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

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

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

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

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

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

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

    范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑问,可以先参考 FAQ 如果您未找到满意的答案,可以在下面留言:) 0 目录人工神经网络入门 ...

  3. 人工神经网络--ANN

    神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方 ...

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

    http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb5 ...

  5. 机器学习笔记之人工神经网络(ANN)

    人工神经网络(ANN)提供了一种普遍而且实际的方法从样例中学习值为实数.离散值或向量函数.人工神经网络由一系列简单的单元相互连接构成,其中每个单元有一定数量的实值输入,并产生单一的实值输出. 上面是一 ...

  6. 人工神经网络(Artificial Neural Networks)

    人工神经网络的产生一定程度上受生物学的启发,因为生物的学习系统是由相互连接的神经元相互连接的神经元组成的复杂网络.而人工神经网络跟这个差不多,它是一系列简单的单元相互密集连接而成的.其中每个单元有一定 ...

  7. 【机器学习】人工神经网络ANN

    神经网络是从生物领域自然的鬼斧神工中学习智慧的一种应用.人工神经网络(ANN)的发展经历的了几次高潮低谷,如今,随着数据爆发.硬件计算能力暴增.深度学习算法的优化,我们迎来了又一次的ANN雄起时代,以 ...

  8. 人工神经网络,支持任意数量隐藏层,多层隐藏层,python代码分享

    http://www.cnblogs.com/bambipai/p/7922981.html------误差逆传播算法讲解 人工神经网络包含多种不同的神经网络,此处的代码建立的是多层感知器网络,代码以 ...

  9. 【莫烦Pytorch】【P1】人工神经网络VS. 生物神经网络

    滴:转载引用请注明哦[握爪] https://www.cnblogs.com/zyrb/p/9700343.html 莫烦教程是一个免费的机器学习(不限于)的学习教程,幽默风俗的语言让我们这些刚刚起步 ...

随机推荐

  1. chrome播放语音时,在chrome 控制台中报 DOMException: The play() request was interrupted by a call to pause(). 的问题.

    $(document).ready(function () { var audioElement = $( '<audio>' + ' <source src="" ...

  2. 我与Ubuntu的5年共成长

    初次接触Ubuntu那还是2010年的初夏,那年大学二年级即将结束,为了增加计算机学院学生的技术能力和就业竞争力,学校组织了很多培训机构.公司企业来学校做技术宣讲.分享等 记得有一个企业是做Mp3 M ...

  3. Bloom Filter概念和原理

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某 ...

  4. android中网络操作使用总结(http)

    Android是作为智能手机的操作系统,我们开发的应用,大多数也都须要连接网络,通过网络发送数据.获取数据,因此作为一个应用开发人员必须熟悉怎么进行网络訪问与连接.通常android中进行网络连接通常 ...

  5. Android -- getSystemService

    Android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardServic ...

  6. linux定时任务2-at命令

    定时执行命令: [root@rheltest1 ~]# at now + 1 minute //一分钟后执行下面的任务 at> date >> /tmp/test_date.log ...

  7. Interpolator 插值器

    简介 Interpolator:撺改者,校对机,分类机,插补器 Interpolator 定义了动画的变化速度,可以实现匀速.正加速.负加速.无规则变加速等,这使得基本的动画得以实现加速.减速等效果. ...

  8. 设计模式之—简单工厂模式<Simple Factory Pattern >

    简单工厂模式结构图: 简单工厂模式以简单的加减乘除运算为例: 运算符类(Operation): namespace CalcTest.Simple_Factory_patterns { class O ...

  9. 修改登录linux之后显示的默认文件夹目录

    命令如下: ll -a vim .bash_profile 最后一行加上cd 需要显示的文件夹

  10. 你确定你是一个合格的.Net开发人员吗?

    做.net开发已有近5年时间,自认掌握的知识比较全面.最近部门需要招人,今天抽空在网上看了一下,发现我了解的还是不够多啊.下面是我大致的罗列了一下作为一名.Net开发人员所需要掌握的只是.看看你是不是 ...