人工神经网络简介和单层网络实现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 莫烦教程是一个免费的机器学习(不限于)的学习教程,幽默风俗的语言让我们这些刚刚起步 ...
随机推荐
- Clipboard.js : 移动端浏览器实现网页内容复制
.bl { padding: 5px 10px; border-left: 3px solid #009a61; background: #f6f6f6; color: #555; font-size ...
- mysql 创建数据库使用默认字符集(备忘)
GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; UTF8: CREATE DATABASE ` ...
- yii中常用路径<转>
调用YII框架中jquery:Yii::app()->clientScript->registerCoreScript(‘jquery’); framework/web/js/source ...
- 2015 UESTC Winter Training #6【Regionals 2010 >> North America - Rocky Mountain】
2015 UESTC Winter Training #6 Regionals 2010 >> North America - Rocky Mountain A - Parenthesis ...
- 【网络流#7】POJ 3281 Dining 最大流 - 《挑战程序设计竞赛》例题
不使用二分图匹配,使用最大流即可,设源点S与汇点T,S->食物->牛->牛->饮料->T,每条边流量为1,因为流过牛的最大流量是1,所以将牛拆成两个点. 前向星,Dini ...
- mui实现支付宝支付功能
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>H ...
- SpringMVC04controller中定义多个方法
public class MyController extends MultiActionController { // 新增 方法修饰符要是public public ModelAndView ad ...
- LINQ简明教程:数据排序、分组、过滤
LINQ可以对很多数据源进行查询操作,比如数据库.数组(array).链表(list).XML文件等.在本文中,我将从数组中提取数据,这些数据是10个最受欢迎的国家.有一个类叫Countries,有c ...
- 关于在repeater中的checkbox实行多选和全选
今天项目中用到这一块,是一个b2b商城,业务是别人给客户留言后,客户从会员中心的留言管理中查看,用checkbox实行多选和全选后进行批量审核 首先在checkbox后加个hidden,作用见代码: ...
- iptables 下开放ftp
这两天在给客户安装服务器时也顺便给他们使用iptables,不用不知道,一用才发现iptables还有很多东西可以学的,比如开放ftp.iptables 的filter表的INPUT链的默认策略设为了 ...