[轉]tensorflow 中的卷積conv2d的padding 到底要padding多少


轉自博文: 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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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