2016-01-12 53 views
5

我目前正在遵循TensorFlow的Multilayer Convolutional Network教程。卷積網絡中的權重?

在各種層重量被初始化如下:

  • 第一卷積層:

    W_conv1 = weight_variable([5, 5, 1, 32]) 
    
  • 第二卷積層:

    W_conv2 = weight_variable([5, 5, 32, 64]) 
    
  • 密集連接的層:

    W_fc1 = weight_variable([7 * 7 * 64, 1024]) 
    
  • 讀出層:

    W_fc2 = weight_variable([1024, 10]) 
    

所以我有懷疑上述重量變量的形狀是如何知道我們的?

是他們的任何數學用於找到他們的形狀?

回答

8

答案是在同一頁面上解釋說:

卷積將計算32層的功能對每個5x5的補丁。它 重張將有[5,5,1,32]

的形狀沒有涉及數學相提並論的說法,但這些術語需要解釋

  1. 卷積核的大小爲5X5 。這意味着有一個5X5矩陣與輸入圖像通過在圖像周圍移動來卷積。有關5X5矩陣如何在28X28圖像上移動並將圖像矩陣的不同單元格與其自身相乘的說明,請參閱this link。這給了我們前兩個片段[5, 5, 1, 32]
  2. 輸入通道的大小是1。這些是BW圖像,因此是一個輸入通道。大多數彩色圖像都有3個通道,因此在其他一些卷積網絡中處理圖像時需要使用3。實際上,對於第二層,W_conv2,輸入通道的數量是32,與層1的輸出通道的數量相同。
  3. 權重矩陣的最後維度可能難以可視化。想象一下你的5X5矩陣,並複製它32次!這32件事中的每一件都被稱爲channels。爲了完成討論,這些矩陣中的每一個都用隨機權重進行初始化,並在網絡前向/後向傳播期間獨立訓練。更多頻道可以學習圖像的不同方面,從而爲您的網絡提供額外的功能。

如果總結這3個點,則會得到第1層的所需尺寸。後續圖層是擴展 - 在這種情況下,前兩個尺寸是內核尺寸(5X5)。第三維等於輸入通道的大小,等於前一層輸出通道的大小。 (32,因爲我們聲明瞭第1層的32個輸出通道)。最終尺寸是當前圖層輸出通道的大小(64,即使是第二層的更大!)。再次保留大量獨立的5X5內核有幫助!)。

最後,最後兩個層:最終緻密層是涉及一些計算的唯一事情:

  1. 對於每個卷積層,最終尺寸=初始大小
  2. 對於大小KXK的池層,最終尺寸=初始大小/ K

所以,

  1. 對於CONV1,大小保持28 X 28
  2. POOL1減少大小14 X 14
  3. 對於CONV 2,大小保持14 X 14
  4. POOL2減少大小7 X 7

而且ofcourse,我們有64渠道由於CONV2 - 池並不影響他們。因此,我們得到7X7X64的最終密集輸入。然後,我們創建完全連接的1024隱藏層併爲10數字添加10輸出類。

+1

感謝您的精彩解釋。你提到'32件事叫做頻道';我仍然對此有點困惑,我們如何確定它必須是32而不是20(就像這個[例子](http://neuralnetworksanddeeplearning.com/chap6.html#convolutional_neural_networks_in_practice))。 – turtle

+2

決定這個數字沒有固定的公式。每個通道創建一個圖像的抽象中間表示(邊緣之一,其他對比可能) - 通常更好,通道過多會導致學習緩慢並導致過度擬合 –

+0

好吧,在密集連接層? – turtle