computer-vision - tutorial - max pooling




如何確定卷積神經網絡的圖像分類參數? (2)

簡而言之,您可以決定參數的可能值,並使用這些值運行一系列模型構建,然後進行預測,以選擇最佳參數值,從而獲得最小的預測誤差和更簡單的模型。

在數據分析方面,我們使用堅持,交叉驗證,自舉來決定模型參數的值,因為以無偏見的方式進行預測非常重要。

我正在使用卷積神經網絡 (無監督特徵學習檢測特徵+ Softmax回歸分類器)的圖像分類。 我經歷了安德魯·吳在這方面的所有教程。 ( http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial )。

我開發的網絡有一個:

  • 輸入層 - 大小8x8(64個神經元)
  • 隱藏層 - 大小為400的神經元
  • 輸出層 - 大小3

我已經學習了使用稀疏自編碼器將輸入層連接到隱藏層的權重,因此有400個不同的特徵。

通過從任何輸入圖像(64x64)連續獲取8x8的補丁,並將其輸入到輸入圖層,我可以獲得400個尺寸(57x57)的特徵地圖。

然後,我使用大小為19 x 19的窗口來獲取400個尺寸為3x3的特徵地圖。

我將這個特徵映射到一個softmax圖層,將它分成3個不同的類別。

這些參數(如隱藏層的數量(網絡的深度)以及每層神經元的數量)已經在教程中提出,因為它們已經成功地用於所有圖像大小均為64x64的特定數據集。

我想把它擴展到我自己的數據集,圖像更大(比如400x400)。 我如何決定

  1. 層數。

  2. 每層神經元的數量。

  3. 池窗口的大小(最大池)。


隱藏層的數量所需的隱藏層的數量取決於數據集的固有復雜性,可以通過查看每個層達到什麼來理解:

  • 零隱藏層允許網絡僅建模一個線性函數。 這對於大多數圖像識別任務來說是不夠的。

  • 一個隱藏層允許網絡建模一個任意複雜的功能。 這對於許多圖像識別任務來說是足夠的。

  • 從理論上講,兩個隱藏層比單層提供的好處不大,但實際上一些任務可能會找到一個額外的層。 這應該謹慎對待,因為第二層可能導致過度貼合。 使用兩個以上的隱藏層是 幾乎沒有好處 只對特別複雜的任務有用,或者當有大量的訓練數據可用時(基於Evgeni Sergeev評論更新)。

長話短說,如果你有時間,那麼測試一個和兩個隱藏層,看看哪個達到最滿意的結果。 如果你沒有時間,那麼你應該在單個隱藏層上踢球,而且你不會犯太多錯誤。

卷積層的數量:根據我的經驗,越多的捲積層越好(在合理的範圍內,因為每個卷積層減少輸入特徵到完全連接的層的數量),雖然在大約兩層或三層之後,精度增益變得相當小所以你需要決定你的主要焦點是泛化精度還是訓練時間。 也就是說,所有的圖像識別任務是不同的,所以最好的方法是簡單地嘗試增加一個卷積層的數量,直到你滿意的結果。

每個隱藏層的節點數量: ...再次,沒有用於決定節點數量的神奇公式,每個任務都不相同。 一個粗略的指導是通過使用2/3大小的前一層的數量的節點,其中第一層2/3是最終特徵圖的大小。 然而,這只是一個粗略的指導,取決於數據集。 另一個常用的選項是從過多的節點開始,然後通過修剪刪除不必要的節點。

最大合併窗口大小:我總是在卷積後應用最大合併,所以我可能沒有資格對你應該使用的窗口大小提出建議。 也就是說,19x19的最大池數似乎過於嚴重,因為它實際上將大部分數據丟棄。 也許你應該看看更傳統的LeNet網絡佈局:

http://deeplearning.net/tutorial/lenet.html

https://www.youtube.com/watch?v=n6hpQwq7Inw

在其中重複執行卷積(通常是5x5或3x3),然後是最大池(通常使用2x2合併窗口,儘管4x4對於大型輸入圖像可能是必需的)。

結論最好的方式來找到一個合適的網絡佈局是字面上執行試錯法測試。 大量的測試。 沒有萬能的網絡,只有你知道數據集的內在復雜性。 執行必要測試的最有效方法是通過交叉驗證