轉自博文: https://www.jianshu.com/p/05c4f1621c7e
之前一直對tensorflow的padding一知半解,直到查閱了tensorflow/core/kernels/ops_util.cc中的Get2dOutputSizeVerbose函數,才恍然大悟,下面是具體的介紹
實際上tensorflow官方API里有介紹!!不科學上網貌似打不開
根據tensorflow中的conv2d函數,我們先定義幾個基本符號
1、輸入矩陣 W×W,這里只考慮輸入寬高相等的情況,如果不相等,推導方法一樣,不多解釋。
2、filter矩陣 F×F,卷積核
3、stride值 S,步長
4、輸出寬高為 new_height、new_width
當然還有其他的一些具體的參數,這里就不再說明了。
我們知道,padding的方式在tensorflow里分兩種,一種是VALID,一種是SAME,下面分別介紹這兩種方式的實際操作方法。
1、如果padding = ‘VALID’
new_height = new_width = (W – F + 1) / S (結果向上取整)
也就是說,conv2d的VALID方式不會在原有輸入的基礎上添加新的像素(假定我們的輸入是圖片數據,因為只有圖片才有像素),輸出矩陣的大小直接按照公式計算即可。
2、如果padding = ‘SAME’
new_height = new_width = W / S (結果向上取整)
在高度上需要pad的像素數為
pad_needed_height = (new_height – 1) × S + F - W
根據上式,輸入矩陣上方添加的像素數為
pad_top = pad_needed_height / 2 (結果取整)
下方添加的像素數為
pad_down = pad_needed_height - pad_top
以此類推,在寬度上需要pad的像素數和左右分別添加的像素數為
pad_needed_width = (new_width – 1) × S + F - W
pad_left = pad_needed_width / 2 (結果取整)
pad_right = pad_needed_width – pad_left
至此,關於tensorflow的卷積padding操作介紹完畢,下面是關於此操作的源碼(Get2dOutputSizeVerbose函數的部分節選),我也不會用MarkDown,索性直接截圖了,以供參考

作者:Traphix
鏈接:https://www.jianshu.com/p/05c4f1621c7e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。