tensorflow卷積神經網絡中的padding參數最詳細解釋!

tensorflow卷積神經網絡中的padding參數最詳細解釋!

當使用tensorflow創建卷積神經網絡時,肯定要用到卷積層和池化層,tendorflow關於建立卷積層和池化層的API都有padding這個參數,如下所示:

- tf.nn.conv2d(input,filter,strides,padding)

- tf.nn.max_pool(input,ksize,strides,padding)

padding有兩種可選值:‘VALID’‘SAME’

取值爲‘VALID’時padding=0,並不會對輸入(input)做填充;

取值爲‘SAME’時padding>0,將會對輸入(input)做填充,填充值都是0值。

下面我將分別對卷積和池化中padding取值爲‘VALID’‘SAME’的區別做詳細的解釋。

---------------------------------------------------------------------------------------------------------

  • 卷積 tf.nn.conv2d(input,filter,strides,padding)

     

在tf.nn.conv2d中,padding是在圖片周圍做填充

  •  padding='VALID'時不會對圖片做填充;

捕獲1.PNG

  • padding='SAME'時情況比較特殊,注意!,這裏還要分爲兩種情況stride=1stride>1

   1.當且僅當stride=1時,padding='SAME'意味着卷積後的輸出與輸入size保持一致。例如input的size是5×5,kernel(filter)的size是3×3,令padding='SAME'時(此時padding=1,即在input周圍填充了一圈0),output的size將會與input的size保持一致爲5×5。

捕獲2.PNG

當我們使用tensorflow時,取padding='SAME'時,它自動爲我們算出padding的值。既然是詳解,那麼我們來算一下取padding='SAME'時,padding的值應該取幾?先說結論:假如kernel的size是k×k,那麼padding=(k-1)/2。

解釋:o=(i+2p-k+1)

o爲output的size,i爲input的size,k爲kernal的size,p爲padding的取值。以上圖爲例,i=5,padding=1,k=3,kernel還要向右移動4步加上開始總共生成5個像素(即output的第一行),o就等於5。(如果對卷積過程比較熟悉應該不難理解)

  2.當stride>1時,還是直接上公式:

o=((i+2p-k)/s+1)

是不是發現s=1就是上面的公式?當stride>1時,p的取值是能使(i+2p-k)能被s整除的最小值(p>k/2)。

以Alexnet的輸入層(227×227)到第二層(55×55)爲例子,k=11,stride=4,padding='VALID';

假如我們令padding='SAME',我們看一下輸出層size是多少?

能使(227+2p-11)被4整除的最小p值是4,所以o=((227+2×4-11)/4+1)=57,這時第二層的size就變成了57×57。代碼可以在這裏獲取,有興趣的可以看一下。

---------------------------------------------------------------------------------------------------------------------

  • 池化 tf.nn.max_pool(input,ksize,strides,padding)

對於tf.nn.max_pool來說,padding='SAME'和'VALID'的區別我們來舉例說明:

  • 輸入x: 輸入圖像的shape 是 [2,3], 1個channel

  • valid_pad:  kernel的size爲2×2, stride 2 ,padding='VALID'.

  • same_pad:  kernel的size爲2×2, stride 2 ,padding='VALID'

輸出結果:

 

  • valid_pad: 輸出的shape 是 [1, 1]

  • same_pad: 這裏我們將會把x的shape填充爲 shape [2, 4] (with -inf and then apply max pool), 所以最終輸出的 shape 是 [1, 2]

廢話不說,上代碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章