2015-01-07 17 views
1

我正在嘗試在Python中創建反向傳播網絡。 我有14個輸入功能和1個輸出。我打算使用多層神經網絡。Python後向傳播隱藏層比率

我有以下問題

1)應該是什麼I/P和隱藏層比例是多少?

我對隱藏層數有點困惑。

任何人都可以幫助我。

感謝,

UPDATE:

輸入和我的標籤

[[235, 2, -16.033171734306542, -828.0208534934904, 232965.81361002076, 2000.0, 11182359.053280996, 8565.232332709325, 4000.0, 0.019363246307941673, 1052153, 11313.47311827957, 105.79752842706958, 94],[10]], 
[[-604, -6, 8.086235575302165, 380.8373042348658, 41190.53784866458, 2000.0, 1977145.8167358998, 420.30048579171057, 4000.0, 0.02123278230725872, 3436716, 36953.93548387097, 191.20880866382254, 94],[10]], 
[[1825, 19, 14.022865897726179, -713.1319698367766, 97114.42605383566, 2000.0, 4661492.450584112, 1033.7486227812578, 4000.0, -0.019663774014977573, 3648687, 39233.1935483871, 197.01730672439965, 94],[10]], 
[[-281, -2, -1.5372950205773066, 454.058413755312, 26895.611774858942, 2000.0, 1290989.3651932292, 765.2497914458995, 4000.0, -0.0033856767631790675, 5459685, 58706.290322580644, 241.00156704708152, 94],[10]], 
[[1254, 13, 7.42946537169472, 236.81791472792207, 37351.8426913391, 2000.0, 1792888.4491842769, 923.863841127187, 4000.0, 0.03137205806507656, 5618776, 60416.94623655914, 244.48765360638856, 94],[10]], 
[[55, 0, -6.799835826239174, -297.6057130887548, 7874.250847696101, 2000.0, 377964.04068941285, 66.64091494961357, 4000.0, 0.022848472079604405, 4150489, 44628.913978494624, 210.12886117302483, 94],[10]], 
[[97, 1, 9.01187671470769, -55.32899089341877, 8218.299323445417, 2000.0, 394478.36752538, 127.66669905739745, 4000.0, -0.16287802414592073, 5331935, 57332.63440860215, 238.16530554628952, 94],[10]], 
[[229, 2, 1.9250596458545362, -137.23162431944527, 16672.65593718128, 2000.0, 800287.4849847014, 130.52997477489504, 4000.0, -0.014027813599097374, 6905755, 74255.43010752689, 271.045159933551, 94],[10]], 
[[107, 1, 6.470150940664045, 29.918507467688016, 26956.56324395225, 2000.0, 1293915.035709708, 165.12995290667556, 4000.0, 0.21625914820957587, 5269967, 56666.31182795699, 236.77727661962044, 94],[10]], 
[[500, 5, 8.286114608469786, 122.0075128161886, 35446.863937609196, 2000.0, 1701449.4690052415, 253.11481415842877, 4000.0, 0.06791478997652628, 4669072, 50205.07526881721, 222.86986948307808, 94],[10]], 
[[414, 4, 27.324467984592186, 485.55010485356297, 27500.260236682432, 2000.0, 1320012.4913607568, 214.55557670874316, 4000.0, 0.05627527975271053, 2489806, 26772.107526881722, 162.74918700976798, 94],[10]], 
[[1044, 11, 4.238057309288552, -292.40132784218787, 8680.945668556162, 2000.0, 416685.3920906958, 475.7867593841577, 4000.0, -0.014493974225643315, 7271678, 78190.08602150538, 278.1335589168353, 94],[10]], 
[[-528, -5, -10.252042152315722, 129.48476543188406, 20929.59991855366, 2000.0, 1004620.7960905757, 137.63411934477546, 4000.0, -0.07917566300653991, 7299292, 78487.01075268818, 278.6611608265341, 94],[10]] 

    ] 
+0

什麼是I/P? – zegkljan

+0

@JanŽ[email protected]我已經添加了我的i/p – Backtrack

+0

它對每個任務都不同,但是粗略的指導是每個圖層的節點數量是前一圖層的2/3。 – Hungry

回答

3

所以要重新定義這個問題W/R/T的實際目標是:你只需要拿出一個整數值來表示構成隱藏層的神經元的數量,使得:

  • 您的求解器(梯度下降,共軛梯度等) 在訓練期間收斂;和

  • 總誤差(例如RMSE)低於您認爲可以接受的某個閾值。

幾乎可以肯定有幾個值將滿足這兩個標準;更重要的是,沒有理由在訓練期間無法手動調整此值。

其實這是一種常見的做法,通常被稱爲修剪

哪些節點可修剪?那些與它們有關的最小權重值 (rember,權重適用於節點之間的連接而不是節點本身)。如果它們接近於零,那麼你知道它們對結果影響不大。 (通常使用的技術來 直觀地檢查這些權重是Hinton的圖(有一個在matplotlib 主頁)的庫中的代碼段。

特別是考慮到後者,我建議通過僅選擇一些整數啓動哪些只是稍大於你的輸入圖層 爲什麼?很明顯,這些圖層的大小不可能相等,或者你的網絡不會有非線性,這樣就會留下更多的神經元或更少(相對於輸入層)作爲初始猜測 來進行(即在迭代過程中進行調整)前者是可取的,因爲多餘的容量將幫助你的網絡收斂,你想要什麼。一旦收斂,然後向下調整隱藏層中的節點數量,並查看這樣做對總誤差的影響。

總之,在這種情況下,從16或18個神經元開始,觀察迭代過程並相應地修剪。

如果你喜歡少實證方法(即,一個與它背後的一些數字理由,並試圖確定最佳的網絡規模事前而不是通過迭代&修剪),請參閱accepted answer(礦)至一個類似的問題。