2015-06-06 33 views
0

我使用完全連接的神經網絡進行圖像識別「mnist」。輸出神經元的錯誤值是不正確的?

我的網絡有784個輸入神經元,神經元的一個隱藏層1569個由神經元,輸出層由10分的。

我有兩個問題:

  1. 我使用乙狀結腸和式爲錯誤錯誤=輸出*(1 - 輸出)*(靶 - 輸出)。問題是,如果輸出神經元爲1,並且所需值爲0,那麼錯誤= 0,但它是錯誤的,不是嗎?

  2. 是,如果在隱藏層神經元的加權和過大的結果是1使用權乙狀結腸?什麼值來初始化權重?

回答

0

通常情況下,我在0.01到0.5之間的隨機範圍內初始化權重時經歷了很好的結果。

爲1:據我所知,輸出層的局部誤差通常是expectedOutput - currentOutput,因爲這個簡化的說法從來沒有失敗,並且有足夠的精度。在此之後,對於完全連接的圖層,您可以使用反向傳播來調整隱藏圖層的權重。請參見Yann Lecuns的高效工作:Efficient Backprop

要2:爲了防止輸入1到輸出圖層,因爲隱藏圖層的總和太大,並且sigmoid爲大量時代提供1,您可以執行一個簡單,容易,高效的攻擊:總是將每個輸出層神經元的輸入與父層(隱藏層)中的神經元數量相除,因此在sigmoid傳遞函數之前,輸入始終在區間[-1.0,1.0]用過的。在大多數情況下,這個技巧會大幅減少訓練網絡所需的時代數量。

0

確定其建議您隨機初始化的權重。通常它建議您從範圍((-1 /√d),(1√d))中選擇神經網絡的初始權重,其中d是給定神經元的輸入數量。

和錯誤總是實際輸出電流輸出。您提到的公式與隱含層權重調整中BPN算法的其中一個步驟有關。我建議減少模型中隱藏節點的數量。它的一般建議是讓隱藏節點的數量少於輸入數量。

和乙狀結腸功能是罰款你的任務。

+0

你能否擴展一下'error = output *(1 - output)*(target - output)'的理由。何時適用?在我看來,擁有sigmoid激活功能是必要的,但我一直無法找到解釋如何或爲什麼。 – vsnyc