TensorFlow中的Padding到底是怎么在填充?

1.结论

在用tf.nn.conv2d()计算卷积的时候突然有一个疑问,当padding=SAME的时候Tensorflow内部到底是这么处理的。网上找了一圈没发现,都是说怎么计算卷积后的尺寸,没办法挨个试了一遍总结了padding的规律。下面先说结论,再说示例。

符号及术语说明:

[]表示取整,如[0.6]=0
⌈⌉表示向上取整,如⌈0.6⌉=1
TensorFlow中的Padding到底是怎么在填充?

Tensorflow中padding后尺寸的计算公式为:
1.当padding = 'VALID'

height=wdith=WF+1S

2.当padding = 'SAME'

height=wdith=WS

其中W表示输入的长宽,F表示过滤器的尺寸,s表示步长

结论:

设输入形状为W×W,卷积核形状为F×F,步长为S;则我们可以算出卷积或者池化后的尺寸为w=WS,则padding的圈数为:

P=12((w1)×s+FW)

以上公式是根据w=[W+2PFS]+1得出

举个例子:

假如输入为7×7,卷积为3×3, S=2;则卷积后的形状为4×4,那么padding的圈数为12((41)×2+37)=1

假如输入为8×8,卷积为3×3, S=2;则卷积后的形状为4×4,那么padding的圈数为12((41)×2+38)=0.5

2.示例

下图均是根据Tensorflow的计算结果画出的,7x7,3*3,1 分别是输入大小,过滤器大小,步长

TensorFlow中的Padding到底是怎么在填充?

TensorFlow中的Padding到底是怎么在填充?

TensorFlow中的Padding到底是怎么在填充?

TensorFlow中的Padding到底是怎么在填充?

P=12((71)×1+67)=2.5

TensorFlow中的Padding到底是怎么在填充?

P=12((41)×2+38)=0.5

注:当P包含0.5圈是,TensorFlow中都是在右下角填充