人工神经网络简介和单层网络实现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[][]; 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框架的使用(五)的更多相关文章
- C#中调用Matlab人工神经网络算法实现手写数字识别
手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化 投影 矩阵 目标定位 Matlab 手写数字图像识别简介: 手写 ...
- 人工神经网络入门(4) —— AFORGE.NET简介
范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑问,可以先参考 FAQ 如果您未找到满意的答案,可以在下面留言:) 0 目录人工神经网络入门 ...
- 人工神经网络--ANN
神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方 ...
- 用BP人工神经网络识别手写数字
http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb5 ...
- 机器学习笔记之人工神经网络(ANN)
人工神经网络(ANN)提供了一种普遍而且实际的方法从样例中学习值为实数.离散值或向量函数.人工神经网络由一系列简单的单元相互连接构成,其中每个单元有一定数量的实值输入,并产生单一的实值输出. 上面是一 ...
- 人工神经网络(Artificial Neural Networks)
人工神经网络的产生一定程度上受生物学的启发,因为生物的学习系统是由相互连接的神经元相互连接的神经元组成的复杂网络.而人工神经网络跟这个差不多,它是一系列简单的单元相互密集连接而成的.其中每个单元有一定 ...
- 【机器学习】人工神经网络ANN
神经网络是从生物领域自然的鬼斧神工中学习智慧的一种应用.人工神经网络(ANN)的发展经历的了几次高潮低谷,如今,随着数据爆发.硬件计算能力暴增.深度学习算法的优化,我们迎来了又一次的ANN雄起时代,以 ...
- 人工神经网络,支持任意数量隐藏层,多层隐藏层,python代码分享
http://www.cnblogs.com/bambipai/p/7922981.html------误差逆传播算法讲解 人工神经网络包含多种不同的神经网络,此处的代码建立的是多层感知器网络,代码以 ...
- 【莫烦Pytorch】【P1】人工神经网络VS. 生物神经网络
滴:转载引用请注明哦[握爪] https://www.cnblogs.com/zyrb/p/9700343.html 莫烦教程是一个免费的机器学习(不限于)的学习教程,幽默风俗的语言让我们这些刚刚起步 ...
随机推荐
- 判断一个js对象,是否具有某个属性
一个对象,想必我们关注的最多的应该是它上面的属性有哪些吧.那么,怎么判断一个对象是否具有某个属性呢? /*下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同.*/ / ...
- C# 读取 Access 数据库表的例子
using System;using System.Data;using System.Data.OleDb;using System.Collections.Generic;using System ...
- RMAN-00554: initialization of internal recovery manager package failed RMAN-04005
[oracle@rac11g1 ~]$ rman target haha/haha@rac11g Recovery Manager: Release 11.2.0.3.0 - Production o ...
- Oralce新建数据库、新建远程登录用户全过程
Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来说,为了避免麻烦,可以用'Database Configuration Assi ...
- SKCropNode类
继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode) NSCopying(SKNode) NSObject(NSObject) 框架 /System/ ...
- LeetCode Maximum Product Subarray 解题报告
LeetCode 新题又更新了.求:最大子数组乘积. https://oj.leetcode.com/problems/maximum-product-subarray/ 题目分析:求一个数组,连续子 ...
- android不自动弹出虚拟键盘
如果是Activity的话 在 Manifest.xml 相应的 Activity 里添加 android:windowSoftInputMode="adjustPan|stateHidde ...
- Java基础知识强化89:Date类之Data类概述及其方法
1. Date类概述 类Date表示特定的瞬间,精确到毫秒 2. 构造方法 public Date():根据当前默认毫秒值创建日期对象 public Date(long date):根据给定的毫秒值创 ...
- Js实现简单的联动,无数据库版本
<html> <head> <title></title> <script language="javascript" typ ...
- 使用linux操作系统的公司服务器有哪些品牌
服务器硬件是什么牌子的? 操心系统有哪些?cpu是哪些?