1. 程式人生 > >人工神經網絡入門(4) —— AFORGE.NET簡介

人工神經網絡入門(4) —— AFORGE.NET簡介

inpu 源代碼 double 庫文件 ive href 計算 super input

範例程序下載:http://files.cnblogs.com/gpcuster/ANN3.rar
如果您有疑問,可以先參考 FAQ
如果您未找到滿意的答案,可以在下面留言:)

0 目錄
人工神經網絡入門(1) —— 單層人工神經網絡應用示
人工神經網絡入門(2) —— 人工神經基本概念介紹
人工神經網絡入門(3) —— 多層人工神經網絡應用示例
人工神經網絡入門(4) —— AForge.Net簡介

1 介紹
這篇文章中,我們將介紹一個用C#實現的框架AForge,利用這個框架,您可以方便地操作人工網絡,計算機視覺,機器學習,圖像處理,遺傳算法等

2 神經網絡設計部分框架介紹
在這裏我要強調:這段代碼寫的非常漂亮,一種代碼如詩的美感,讓我神往。

這段代碼位於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庫,通過它,你可以非常方便地建立你自己的神經網絡,但是前提你得了解解決問題該需要使用哪種類型的網絡,同時配合使用什麽樣的學習算法。

人工神經網絡入門(4) —— AFORGE.NET簡介