2

我在閱讀Neural Networks and Deep Learning(前兩章),我試圖按照自己的方式建立自己的ANN來對MNIST數據集中的數字進行分類。MNIST - 培訓卡住

我一直在撓頭,現在已經好幾天了,因爲我的實現在測試集(大約5734/10000)分類數字達到57%的精確度達到峯值之後達到10個紀元(訓練集的精度停滯後第十個時期,並且測試集的準確性可能因過度擬合而惡化)。

我正在使用與本書中幾乎相同的配置:2層前饋ANN(784-30-10),所有層完全連接;標準的sigmoid激活函數;二次成本函數;權重以相同的方式初始化(​​取自均值爲0,標準差爲1的高斯分佈) 唯一的區別是我使用在線培訓而不是批量/小批量培訓,學習率爲1.0而不是3.0(儘管我已經嘗試了小批量訓練+ 3.0的學習速度)

然而,我的實現並沒有在一堆時代之後通過60%的百分點,因爲在本書中ANN超過了90% 第一個時代幾乎完全相同的配置。 起初我搞砸了實現BP算法,但重新實現不同的反向傳播三次,在每個重新實現完全相同的結果後,我難倒...

結果反傳算法的例子產生:

使用上述相同配置(在線訓練+學習率爲1.0)的簡單前饋網絡:3個輸入神經元,2個隱藏神經元和1個輸出神經元。

初始權重初始化爲如下:

Layer #0 (3 neurons) 

Layer #1 (2 neurons) 
    - Neuron #1: weights=[0.1, 0.15, 0.2] bias=0.25 
    - Neuron #2: weights=[0.3, 0.35, 0.4] bias=0.45 

Layer #2 (1 neuron) 
    - Neuron #1: weights=[0.5, 0.55] bias=0.6 

鑑於[0.0,0.5,1.0]的輸入,輸出爲0.78900331。 Backpropagating對於相同的輸入,並用1.0所需的輸出給出了以下的偏導數(DW =衍生物WRT重量,分貝=衍生物WRT偏壓):

Layer #0 (3 neurons) 

Layer #1 (2 neurons) 
    - Neuron #1: dw=[0, 0.0066968054, 0.013393611] db=0.013393611 
    - Neuron #2: dw=[0, 0.0061298212, 0.012259642] db=0.012259642 

Layer #2 (1 neuron) 
    - Neuron #1: dw=[0.072069918, 0.084415339] db=0.11470326 

更新與這些偏導數的網絡產生一個校正的輸出值爲0.74862305。


如果任何人都將是一種足以證實上述結果,這將有助於我極大的,因爲我已經差不多排除了反傳被錯誤作爲問題的原因。

有沒有人處理MNIST問題曾經遇到過這個問題? 即使我應該檢查的東西的建議將有助於,因爲我真的迷失在這裏。

回答

3

衛生署..

事實證明沒有什麼是錯了我的反向傳播執行...

問題是,我讀的圖像轉換成一個符號字符(在C++)陣列,像素值溢出,所以當我除以255.0將輸入矢量歸一化到0.0-1.0的範圍時,我實際上得到了負值......; - ;

所以基本上我花了一些4天調試和重新實現同樣的事情時,問題是其他地方完全。