在tf.nn中“SAME”和“VALID”填充之间的区别是什么?tensorflow的Max_pool ?
在我看来,'VALID'意味着当我们做max pool时,边缘外不会有零填充。
根据深度学习卷积算法指南,它说池操作符中不会有填充,即只使用tensorflow的“VALID”。 但什么是'SAME'填充的最大池张量流量?
在tf.nn中“SAME”和“VALID”填充之间的区别是什么?tensorflow的Max_pool ?
在我看来,'VALID'意味着当我们做max pool时,边缘外不会有零填充。
根据深度学习卷积算法指南,它说池操作符中不会有填充,即只使用tensorflow的“VALID”。 但什么是'SAME'填充的最大池张量流量?
当前回答
为了补充YvesgereY的回答,我发现这个可视化非常有用:
填充'valid'是第一个数字。滤镜窗口停留在图像内部。
填充'same'是第三个数字。输出是相同的大小。
在这篇文章里找到的
可视化致谢:vdumoulin@GitHub
其他回答
如果你喜欢ascii艺术:
"VALID" = without padding: inputs: 1 2 3 4 5 6 7 8 9 10 11 (12 13) |________________| dropped |_________________| "SAME" = with zero padding: pad| |pad inputs: 0 |1 2 3 4 5 6 7 8 9 10 11 12 13|0 0 |________________| |_________________| |________________|
在这个例子中:
输入宽度= 13 滤镜宽度= 6 步幅= 5
注:
"VALID"只删除最右边的列(或最底部的行)。 “SAME”尝试均匀地左右填充,但如果要添加的列的数量是奇数,它会将额外的列添加到右侧,就像本例中的情况一样(垂直方向上的逻辑相同:底部可能有额外的一行零)。
编辑:
关于名字:
对于“SAME”填充,如果你使用的步幅为1,该层的输出将具有与其输入相同的空间维度。 使用“VALID”填充,就没有“编造”填充输入。该层只使用有效的输入数据。
Padding on/off. Determines the effective size of your input. VALID: No padding. Convolution etc. ops are only performed at locations that are "valid", i.e. not too close to the borders of your tensor. With a kernel of 3x3 and image of 10x10, you would be performing convolution on the 8x8 area inside the borders. SAME: Padding is provided. Whenever your operation references a neighborhood (no matter how big), zero values are provided when that neighborhood extends outside the original tensor to allow that operation to work also on border values. With a kernel of 3x3 and image of 10x10, you would be performing convolution on the full 10x10 area.
为了补充YvesgereY的回答,我发现这个可视化非常有用:
填充'valid'是第一个数字。滤镜窗口停留在图像内部。
填充'same'是第三个数字。输出是相同的大小。
在这篇文章里找到的
可视化致谢:vdumoulin@GitHub
有效填充是没有填充。 相同的填充在某种程度上是输出与输入大小相同的填充。
快速的解释
VALID:不要应用任何填充,也就是说,假设所有的维度都是有效的,这样输入的图像就会被你指定的过滤器和stride完全覆盖。
SAME:应用填充到输入(如果需要),以便输入图像被过滤器和步幅完全覆盖。对于stride 1,这将确保输出图像大小与输入相同。
笔记
This applies to conv layers as well as max pool layers in same way The term "valid" is bit of a misnomer because things don't become "invalid" if you drop part of the image. Sometime you might even want that. This should have probably be called NO_PADDING instead. The term "same" is a misnomer too because it only makes sense for stride of 1 when output dimension is same as input dimension. For stride of 2, output dimensions will be half, for example. This should have probably be called AUTO_PADDING instead. In SAME (i.e. auto-pad mode), Tensorflow will try to spread padding evenly on both left and right. In VALID (i.e. no padding mode), Tensorflow will drop right and/or bottom cells if your filter and stride doesn't full cover input image.