卷積后尺寸計算


定義幾個參數

  • 輸入圖片大小 W×W
  • Filter大小 F×F
  • 步長 S
  • padding的像素數 P

 

首先講tensorflow中

 

 

 SAME: ceil(5/2)=3

VAILD

p = 0

(5-3+0)/2+1 = 2

卷積中的參數“SAME”,和‘VALID’決定了輸出尺寸的計算公式:
如果參數是‘’SAME'',那么計算只與步長有關,直接除以步長(除不盡,向上取整)
如果參數是‘VALID’,那么計算公式如上:N = (W − F + 2P )/S+1

 

這里對比max_pooling中的SAME VALID

在我看來,'VALID'意味着做最大池時,邊外沒有零填充。
根據A guide to convolution arithmetic for deep learning,它表示池化操作符中沒有填充,即只使用tensorflow的'VALID'。但是什么是tensorflow中最大池的'SAME'填充?

最佳解決方案
我舉一個例子來說明一點:
x:shape[2,3],1通道的輸入圖像
valid_pad:具有2x2內核,步幅2和VALID填充的最大池化。
same_pad:最大池化,2x2內核,步幅2和SAME填充(這是經典的方法)
輸出形狀為:
valid_pad:這里沒有填充,所以輸出形狀為[1,1]
same_pad:在這里,我們將圖像填充到形狀[2,4](使用-inf,然后應用最大池化),因此輸出形狀為[1,2]

x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

x = tf.reshape(x, [1, 2, 3, 1])  # give a shape accepted by tf.nn.max_pool

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')

valid_pad.get_shape() == [1, 1, 1, 1]  # valid_pad is [5.]
same_pad.get_shape() == [1, 1, 2, 1]   # same_pad is  [5., 6.]

  

其次講pytorch中

 

 

 

最后講理論推導:


N = (W − F + 2P )/S+1
輸出圖片大小為 N×N
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM