Tensorflow中的两种padding方式
tensorflow中进行卷积以及池化操作时会用到padding参数,在tensorflow中有两种方式分别为‘SAME’和‘VALID’。
先不考虑padding方式,输出尺寸计算公式为:
O = ((I - K + P) / S) + 1 (结果可能不是整数,padding参数的作用就是防止结果为非整数)
其中O为输出尺寸,I为输入尺寸,K为kernel尺寸,P为padding的尺寸(padding方式是用来控制P的大小),S为stride尺寸。
VALID方式
此种设置下,P的尺寸为0,经过公式计算后,如果O为非整数,卷积操作将会依次从输入左上角开始进行直至超出输入边界。
即:
O = floor(((I - K + 0) / S) + 1)
SAME方式
VALID比较容易理解,那么SAME的padding方式是怎么确定上下左右边界的尺寸?
首先O的尺寸有另外的计算方式:
O = ceil(I / S)
然后根据O反推出P的大小。
beg_P = P // 2
end_P = P - beg_P
其中beg_P对应左,上,end_P对应右,下。
经过padding后同样满足公式:O = floor(((I - K + 0) / S) + 1)
后记
本文纯属查阅资料以及代码测试后的推测,也许存在错误,望不吝赐教。
参考:
https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t
https://github.com/pjreddie/darknet/issues/950