1

我想問以下問題: 我想訓練帶反向傳播的人工神經網絡。我有一個前饋神經網絡,有6個輸入層7隱藏和1個輸出。 我會給這個神經網絡提供一個由6個特徵組成的特徵向量並訓練它,我的學習速率是0.7,我的動量是0.9。我想根據我的6個特徵分爲兩類。問題是這個網絡的整體錯誤沒有改變......我嘗試了不同的學習速率和動量值,但問題仍然是一樣的......我不明白爲什麼它會這樣做。當我嘗試學習安裝以學習執行xor問題時,我嘗試了相同的代碼(我的意思是主要類),並且它在那裏完美地工作。 有誰知道爲什麼會發生這種情況? 感謝您的時間:)具有6個特徵的人工神經網絡訓練

FeedforwardNetwork network = new FeedforwardNetwork(); 
Train train; 

network.AddLayer(new FeedforwardLayer(6)); 
     network.AddLayer(new FeedforwardLayer(7)); 
     network.AddLayer(new FeedforwardLayer(1)); 

     train = new Backpropagation(network, Input_vector, Ideal_vector, 0.7, 0.8); 

     int epoch = 1; 
     textBox7.Text = " It has begun\r\n"; 
     do 
     { 
      train.Iteration(); 
      textBox7.Text += "\r\n Epoch " + epoch + " Error " + train.Error + " \r\n "; 

      epoch++; 
     } 
     while ((epoch < 500) && (train.Error > 0.001)); 

     network = train.Network; 

     textBox7.Text += "Neural Network Results"; 

     for (int i = 0; i < Ideal_vector.Length; i++) 
     { 
      double[] actual = network.ComputeOutputs(Input_vector[i]); 

      textBox7.Text += "\r\n" + Input_vector[i][0] + "," + Input_vector[i][1] +  "," + 
       Input_vector[i][2] + "," + Input_vector[i][3] + Input_vector[i][4] + 
       Input_vector[i][5] + " actual= " + 
       actual[0] + ", ideal " + Ideal_vector[i][0] + " \r\n"; 
     } 
+0

你是誰開發了他們的神經網絡?可以發佈代碼? –

+0

我已經開發出來了,但是它有很多代碼需要發佈,我開發了ann,就像下面這本關於c#的人工神經網絡的熱門研究一樣。我會發布的主要功能,做的培訓,因爲那不是那麼大 –

+0

如果你想盧卡斯我可以給你的代碼,但正如我說這是有點太后發佈 –

回答

1

嘗試用增加一個額外的隱藏層試驗和也嘗試增加隱藏節點的數量。我不能給你一個技術解釋,但如果你的節點太少,ann可能無法收斂。

+0

首先感謝您的答案,我會嘗試加入更多隱藏層,但是我恐怕就會過度擬合我會隨時向你通報我所得到的 –

+0

這是我得到的輸出:它已經開始 大紀元1錯誤0,678317780941479 大紀元2錯誤0,678466894680783 曆元3錯誤0,67846699264523 曆元4錯誤0,678466992798299 曆元5錯誤0,678466992798807 曆元6錯誤0, 67846699279881 曆元7錯誤0,67846699279881 曆元8錯誤0,67846699279881 曆元9錯誤0,67846699279881 曆元10錯誤0,67846699279881 曆元11錯誤0,67846699279881 曆元12的錯誤0,67846699279881 Epoch 13錯誤0,67846699279881 錯誤會持續整個培訓會話 –

2

您是使用批量學習還是在線學習?如果答案是批處理,那麼你的學習率可能太高。您可以嘗試按照訓練模式的數量進行縮放。正如@Marcom所說,如果你的神經元太少,你的網絡容量太低,這有點難以解釋,但基本上你沒有使用神經元的非線性區域,並且你的網絡有偏差。

檢查here以獲得更好的解釋。

先嚐試大量的神經元,然後只要錯誤持續下降,就可以減少數量。

+0

你其實是對的......我已將自己的學習率改爲0.001,你知道它實際上開始對某些事物進行分類。我一開始並沒有考慮你的答案,因爲我從來沒有低於0.1的學習速度。我會做一些實驗,然後發佈問題的最終結論 –

+0

劃分培訓模式的數量對於批量學習很有用,因爲你獲取重量更新的平均梯度。否則,你會得到一個很大的梯度(每個訓練模式獲得梯度的總和),並且有時會「破壞」所有的重量配置。 – mp85

0

您的主要功能很好。然而,無論是你的訓練矢量還是你的反向傳播代碼都不是(假設你的網絡足夠大,可以學習這一點)。因此,這將是一堆問題而不是答案,但您可能會得到正確的想法:

  • 您的培訓向量包含多少個樣本?
  • 這些樣品大致分爲半/半還是有偏差?
  • 是否有相同的訓練樣本被模糊分類?
  • 錯誤是如何計算的?平均Abs/Sqr?
  • 你是否隨機初始網絡權重?
  • 之前的初始錯誤是什麼培訓?
  • 錯誤是否在第一次迭代中改變?
  • 你可以在pastebin上發佈代碼嗎?
+0

有441個訓練樣本,它們大致相等 –

+0

不,沒有相同的訓練樣本(當然,圖片的形態學可能與另一個圖片相似 - 我有不同類型的人)。錯誤是:理想 - 實際結果,是的,錯誤在第一次迭代中被最小化,但是它稍後增長。不過,我認爲我觀察到了一些問題 –

+1

問題出在學習率上......我習慣於選擇0.1到0.9之間的最大值。然而,在這種情況下,當我從這個時間間隔中挑選利率時,問題不會收斂。我降低了比率,直到0.002,一切正常。 –

0

在MLP開始階段不會演變的損失函數通常是因爲網絡無法推導出適合您的培訓數據的任何規則(您的backprop的畢業生找不到任何有意義的局部最小值)。這可能是由於您嘗試解決的問題缺少數據或受限制的體系結構。

增加您的圖層數量和/或它們的大小應該改變這一點。儘管如果你的架構太複雜,你容易過度使用。你將不得不尋找適合你的問題的平衡點。

不要猶豫,首先從低學習率開始,將其設置得太高會導致您的漸變「反彈」而不會收斂。