对于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。