zoukankan      html  css  js  c++  java
  • 人工神经网络入门(4) —— AFORGE.NET简介

    范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar
    如果您有疑问,可以先参考 FAQ 
    如果您未找到满意的答案,可以在下面留言:)

    目录
    人工神经网络入门(1) —— 单层人工神经网络应用示
    人工神经网络入门(2) —— 人工神经基本概念介绍
    人工神经网络入门(3) —— 多层人工神经网络应用示例
    人工神经网络入门(4) —— AForge.Net简介

    介绍
    这篇文章中,我们将介绍一个用C#实现的框架AForge,利用这个框架,您可以方便地操作人工网络,计算机视觉,机器学习,图像处理,遗传算法等

     神经网络设计部分框架介绍
    在这里我要强调:这段代码写的非常漂亮,一种代码如诗的美感,让我神往。

    这段代码位于AForge.Neuro名字空间中。

    这个库文件由6个主要部分组成:

    • Neuron - 所有神经元(neurons)的抽象基类, 它封装了所有neuron所共有的一些基本元素:权值, 输出值和输入值. 其他的neuron都是在该基础之上派生出来的.
    • Layer - 代表neurons的集合. 这个抽象基类封装了层(Layer)的共性.
    • Network - 代表一个神经网络, 是neuron's layers的集合. 这个抽象基类提供了Network的共性.其他的Network都是在该基础之上派生出来的.
    • IActivationFunction - 激活函数(activation function)的接口. 所有的激活函数都派生于该接口
    • IUnsupervisedLearning - 无导师学习(unsupervised learning)算法的接口 - 这种类型的学习体系在学习的过程中只提供输入,不提供针对该输入的期望输出. 该体系的目标是不断找出更优的解.
    • ISupervisedLearning - 有导师学习(supervised learning)算法的接口  - 这种类型的学习体系在学习的过程中提供输入和针对该输入的期望输出. 该体系的目标就是通过实际的输出和期望的输出来不断修正网络.

    这些类的关系可以用下图来表示:

     

    这个文件包含下面2中神经网络体系:

    • Activation Network
    • Distance Network

    同时提供以下5种学习算法用于解决不同的问题:

    • Perceptron Learning 
    • Delta Rule Learning
    • Back Propagation Learning 
    • SOM Learning
    • Elastic Network Learning 

    3 代码示例
    范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar

    该程序的使用说明和人工神经网络入门(1) —— 单层人工神经网络应用示例类似,可以参考http://www.cnblogs.com/gpcuster/archive/2008/05/22/1204456.html。但是是使用的AForge.Net中的框架实现。

    拿求AND运算的例子来说,代码如下:

    复制代码
    ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 2, 1);
    PerceptronLearning teacher = new PerceptronLearning(network);

                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 };

                double error = 1.0;

                while (error > 0.001)
                {
                    error = teacher.RunEpoch(input, output);
                }
    复制代码

    4 进一步学习

    您可以查看类库的源代码,同时参考这篇文章《Neural Network On C#

    5 预告
    我们将利用本章介绍的框架解决一个实际的问题:)

    6 总结

    在这一章中,我们介绍了一个ANN库,通过它,你可以非常方便地建立你自己的神经网络,但是前提你得了解解决问题该需要使用哪种类型的网络,同时配合使用什么样的学习算法。

  • 相关阅读:
    Android开发——弹性滑动的两种实现方式
    管理知识和解决信息爆炸问题的4种方法
    京东金融的业务版图
    京东金融的业务版图
    虚幻引擎4艺术大师
    Android开发——View滑动的三种实现方式
    Android开发之Path类使用详解,自绘各种各样的图形!
    C# Dictionary的遍历理解
    我想走全产业链发展路线
    Androd安全——混淆技术完全解析
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/9509561.html
Copyright © 2011-2022 走看看