2013-06-12 29 views
0

我是神經網絡的新手,我正在使用Aforge神經網絡庫進行字符識別任務。我想使用反向傳播來訓練我的網絡。以下是AForge文檔中給出的代碼。在Aforge中使用反向傳播學習

// initialize input and output values 
     double[][] input = new double[4][] { 
       new double[] {0, 0}, new double[] {0, 1}, 
       new double[] {1, 0}, new double[] {1, 1} 
      }; 
     double[][] output = new double[4][] { 
       new double[] {0}, new double[] {1}, 
       new double[] {1}, new double[] {0} 
      }; 
     // create neural network 
     ActivationNetwork network = new ActivationNetwork(
      SigmoidFunction(2), 
      2, // two inputs in the network 
      2, // two neurons in the first layer 
      1); // one neuron in the second layer 
     // create teacher 
     BackPropagationLearning teacher = new BackPropagationLearning(network); 
     // loop 

     while (!needToStop) 
     { 
      // run epoch of learning procedure 
      double error = teacher.RunEpoch(input, output); 
      // check error value to see if we need to stop 
      // ... 
     } 

但我不知道如何決定層和神經元的ActivationNetwork的數目。任何幫助,將不勝感激。謝謝。

回答

0

我不知道到底,但在我看來,網絡只能返回兩個答案 - 0和1。所以一個神經元是0和1秒,而第二層選擇最大值。

0

對於XOR你需要一個隱藏層,因爲輸出的真值表是0,1,1,0這意味着你不能用一個幾何線條分隔這些模式。 here is the proof optically。如果你可以用一條線分割模式空間,你可以使用一個感知器,典型的例子是OR,AND。在這些情況下,您不使用隱藏層,因爲它們是線性分隔的。嘗試使相應的圖形清楚地看到並理解它。在所有情況下,您都有類> 2或類不是線性分隔的,您必須使用隱藏層。對於XOR,你需要一個隱藏層(隱藏層是網絡的計算層),因爲一個隱藏層可以分成類。現在由於有兩個類,我們將有一個輸出。這可以通過這個計算:outputNeurons < = 2^NN =的,例如類NUM,如果你有3個班需要2個OutputNeurons監守2^2 = 4 < 3.現在在隱藏層,我們使用的神經元監守我們有兩條線圖片1,兩條線之間的區域稱爲決策區域1,並且位於被稱爲決策區域2的線條之外。因此,我們將有兩個決策函數,因此我們必須具有兩個感知器,因爲感知器將一個決策區域分類並且數學項是func σ(x)=Σw* x + w0,並且在一個感知的情況下,我們通常用於激活階梯函數(如果σ> 0,stepFunc(σ)= 1或者如果s < = 0,則stepFunc(σ)= 0)。隱藏層中的第一個神經元是第一個決策區域,第二個是第二個決策區域。第一個決策區使用第一感知器將模式(1,1)與其他模式分開,第二感知器將模式(0,0)與其他模式分開。 總之,看看評價:
ActivationNetwork網絡=新ActivationNetwork( SigmoidFunction(2),//這裏是激活FUNC在這種情況下乙狀結腸 2,//在網絡 - >一個表兩個輸入每次[0,1] [1,1] [1,0] [1,1] 2,//第一層中的兩個神經元 - >隱藏層 1);在第二層 - //一個神經元>輸出層

背面誤差傳播是一種算法,不能在這裏告訴你它是如何工作的。你可以在這裏看到更多細節。

希望它有助於更​​好地理解簡單神經元網絡的整體思想,但如果您想使用這些類型的Aforge我的意見是你必須閱讀神經網絡背後的理論