tf.nn.conv2d 如何处理偶数大小的过滤器?
How does tf.nn.conv2d behave with an even-sized filter?
我读过 ,接受的答案只提到方形奇数过滤器(1x1、3x3),我对 tf.nn.conv2d()
在使用方形偶数时的表现很感兴趣-大小的过滤器(例如 2x2),因为它的 none 个元素可以被认为是它的中心。
如果 padding='VALID'
那么我假设 tf.nn.conv2d()
将 跨越输入 ,就像过滤器是奇数大小时一样。
但是,如果 padding='SAME'
tf.nn.conv2d()
如何选择将大小均匀的过滤器置于输入的中心?
请参阅此处的说明:
https://www.tensorflow.org/versions/r0.9/api_docs/python/nn.html#convolution
对于 VALID 填充,您完全正确。您只需在没有任何填充的情况下在输入上遍历过滤器,每次都按步幅移动过滤器。
对于 SAME 填充,您执行与 VALID 填充相同的操作,但从概念上讲,您在计算卷积之前在每个维度前后用一些零填充输入。如果必须添加奇数个填充元素,则 right/bottom 侧获得额外的元素。
使用上面 link 中的公式 pad_...
计算出要添加多少填充。例如,为简单起见,让我们考虑一维卷积。对于大小为 7 的输入、大小为 2 的 window 和步幅为 1,您将向右侧添加 1 个填充元素,向左侧添加 0 个填充元素。
希望对您有所帮助!
当你在 conv 层中进行过滤时,你只需获得每个补丁的平均值:
以 1D 尺寸 5 输入 [ 1, 2, 3, 4, 5 ] 为例,
使用大小为 2 的过滤器并进行有效填充,步幅为 1,
你会得到大小为 4 的输出(使用 [1,1] 的权重参数矩阵的内积的平均值) [ (1+2)/2, (2+3)/2, (3+4)/2, ( 4+5)/2 ],
这是 [ 1.5, 2.5, 3.5, 4.5 ],
如果你用步幅 1 做同样的填充,你会得到大小 5 的输出 [ (1+2)/2, (2+3)/2, (3+4)/2, (4+5) /2, (5 + 0)/2 ], 这里最后的0就是padding 0,
这是 [ 1.5, 2.5, 3.5, 4.5, 2.5 ],
反之亦然,如果你有一个 224*224 输入,当你使用有效填充进行 2×2 过滤时,它会输出 223*223 输出
我读过 tf.nn.conv2d()
在使用方形偶数时的表现很感兴趣-大小的过滤器(例如 2x2),因为它的 none 个元素可以被认为是它的中心。
如果 padding='VALID'
那么我假设 tf.nn.conv2d()
将 跨越输入 ,就像过滤器是奇数大小时一样。
但是,如果 padding='SAME'
tf.nn.conv2d()
如何选择将大小均匀的过滤器置于输入的中心?
请参阅此处的说明: https://www.tensorflow.org/versions/r0.9/api_docs/python/nn.html#convolution
对于 VALID 填充,您完全正确。您只需在没有任何填充的情况下在输入上遍历过滤器,每次都按步幅移动过滤器。
对于 SAME 填充,您执行与 VALID 填充相同的操作,但从概念上讲,您在计算卷积之前在每个维度前后用一些零填充输入。如果必须添加奇数个填充元素,则 right/bottom 侧获得额外的元素。
使用上面 link 中的公式 pad_...
计算出要添加多少填充。例如,为简单起见,让我们考虑一维卷积。对于大小为 7 的输入、大小为 2 的 window 和步幅为 1,您将向右侧添加 1 个填充元素,向左侧添加 0 个填充元素。
希望对您有所帮助!
当你在 conv 层中进行过滤时,你只需获得每个补丁的平均值:
以 1D 尺寸 5 输入 [ 1, 2, 3, 4, 5 ] 为例, 使用大小为 2 的过滤器并进行有效填充,步幅为 1, 你会得到大小为 4 的输出(使用 [1,1] 的权重参数矩阵的内积的平均值) [ (1+2)/2, (2+3)/2, (3+4)/2, ( 4+5)/2 ], 这是 [ 1.5, 2.5, 3.5, 4.5 ],
如果你用步幅 1 做同样的填充,你会得到大小 5 的输出 [ (1+2)/2, (2+3)/2, (3+4)/2, (4+5) /2, (5 + 0)/2 ], 这里最后的0就是padding 0, 这是 [ 1.5, 2.5, 3.5, 4.5, 2.5 ],
反之亦然,如果你有一个 224*224 输入,当你使用有效填充进行 2×2 过滤时,它会输出 223*223 输出