开发者社区> 杰克.陈> 正文

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

简介: 原文:人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五) 前面4篇文章说的是模糊系统,它不同于传统的值逻辑,理论基础是模糊数学,所以有些朋友看着有点迷糊,如果有兴趣建议参考相关书籍,我推荐《模糊数学教程》,国防工业出版社,讲的很全,而且很便宜(我买成7元钱)。
+关注继续查看
原文:人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)

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

人工神经网络的简介

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

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

1.具有自学习功能

2.具有联想存储功能

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

更多知识请参阅相关资料

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

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

ann1-1

我们按照一般步骤来:

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

ann1-2

SigmoidFunction

ann1-3

ThresholdFunction(阈函数)

ann1-4

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

接下来考虑学习函数了。

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

ann1-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]);
}

效果:

ann1-6

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

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

常见的形式有:

1.逻辑模糊神经网络

2.算术模糊神经网络

3.混合逻辑神经网络

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

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

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

 

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
CVPR2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」
这项工作对神经网络推理逻辑的可解释性进行了探究:区分于大多数现有 xAI 方法通过可视化输入图像和输出结果之间的相关性对网络进行解释,该研究提出用结构化的视觉概念 (Structural Visual Concept) 对神经网络决策背后的推理逻辑和因果关系进行解释,通过解答网络决策中「为什么是 A?为什么不是 B?」 的问题,用人们更容易理解的 high-level 视觉概念和视觉概念之间的结构和空间关系解释神经网络的推理逻辑,并将其作为一种直接指导来提升被解释网络的性能。
63296 0
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
34 0
gin框架函数语法以及网络状态码
gin框架函数用法以及网络状态码
100 0
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
60 0
云原生网络代理-MOSN 路由框架详解
从 2018 年学习 SOFAStack 的一些开源项目,到如今深入使用 MOSN,伴随着 SOFA 走到四周年。 因为兴趣也接触了不少的开源社区,唯独对 SOFA 社区的组件体验颇多, 例如 SOFAArk、SOFARPC、MOSN。长年混迹在钉钉群里提问题,都能得到及时回复,这对我们研究 MOSN 有很大的帮助。也因此通过 MOSN 的代码设计,学习到了很多关于 Sidecar 的设计理念。
300 0
CVPR2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」
本文提出了一个视觉推理解释框架 (VRX: Visual Reasoning eXplanation), 将人们容易理解的、high-level 的结构化的视觉概念作为「语言」,通过回答为什么是 A,为什么不是 B 解释神经网络的推理逻辑。VRX 还可以利用解释对网络进行诊断,进一步提升原网络的性能。
64 0
高效开源的网络扫描框架 —— NINJA-PingU
这个扫描框架有着一个很萌的名字(企鹅忍者),同时它还有其他优秀的特性,开源,支持插件,高效。 NINJA-PingU作为一个扫描框架,可不仅仅只有ping这样简单的功能,他是一个专门为大型网络扫描所设计的框架,兼顾效率的同时,支持插件的开发。
255 0
DL之DCGAN:基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成
DL之DCGAN:基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成
57 0
TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模
TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模
114 0
flutter网络dio框架公共请求参数、请求header使用总结
> 本文章将讲述 > 1.get请求中配置公共参数 > 2.post请求配置公共参数 > 3.请求header配置
1290 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
可预期数据中心网络
立即下载
可编程网络视角的网络创新研究
立即下载
思科软件定义访问:实现基于业务意图的园区网络
立即下载