Tensorflow - 为什么带有卷积的负填充长度?

时间:2018-01-03 19:34:07

标签: python tensorflow machine-learning convolution image-recognition

对于tf.layers.conv2d,我注意到padding="VALID"有时会使用负值填充长度。

This page in the docs表示使用"VALID"填充,填充长度计算如下:

out_height = math.ceil(float(in_height - filter_height + 1) / float(strides[1]))
pad_along_height = ((out_height - 1) * strides[1] +
                    filter_height - in_height)

如果您使用这些值,例如:

in_height = 150
filter_height = 7
strides = (1, 4, 4, 1)

然后你得到pad_along_height == -3。为什么tensorflow有时会默认选择负填充?这对我来说似乎很奇怪。您将丢失有关上一层的信息。不应该"VALID"填充是保留前一层所有信息的最小填充量吗?而不是丢失3行(并且输出高度为36),我认为我会首选填充1行并获得37的输出高度。

为什么 Google会以这种方式实现它?它不是真的"填充"是吗?更喜欢"截断"。它对我来说没有意义。

编辑:注意 - 在这种情况下,"SAME"将生成pad_along_height == 5,输出高度为38。

0 个答案:

没有答案