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

版权声明:转载请注明出处 https://blog.csdn.net/The_lastest/article/details/82188187

1.结论

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

符号及术语说明:

[]表示取整,如[0.6]=0
⌈⌉表示向上取整,如⌈0.6⌉=1
这里写图片描述

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

h e i g h t = w d i t h = W F + 1 S

2.当padding = 'SAME'

h e i g h t = w d i t h = W S

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

结论:

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

P = 1 2 ( ( w 1 ) × s + F W )

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

举个例子:

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

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

2.示例

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

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

P = 1 2 ( ( 7 1 ) × 1 + 6 7 ) = 2.5

这里写图片描述

P = 1 2 ( ( 4 1 ) × 2 + 3 8 ) = 0.5

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

猜你喜欢

转载自blog.csdn.net/The_lastest/article/details/82188187