张量流 - 相同的填充计算

时间:2017-07-22 12:27:35

标签: tensorflow padding

我有以下参数:

in_height = 28
in_width = 28
stride (s) = 2
padding (p) = 'SAME'

'SAME'填充的想法是当s = 1时输入地图和输出地图尺寸(高度,宽度)应该保持相同

因此,如果我能够使用以下内容获得填充大小:

(28 + 2*p - 5) + 1 = 28
Solving gives p = 2

这意味着2的每一边都应该有一个填充

使用p=2输出地图大小为:

(28 + 4 -5)/2 + 1 = 14

来自Tensorflow文档,Same Padding

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))

pad_along_height = max((out_height - 1) * strides[1] +
                    filter_height - in_height, 0)
pad_along_width = max((out_width - 1) * strides[2] +
                   filter_width - in_width, 0)
pad_top = pad_along_height // 2
pad_bottom = pad_along_height - pad_top
pad_left = pad_along_width // 2
pad_right = pad_along_width - pad_left

要遵循以上原则:

out_height = ceil(28.0/2.0) = 14.0
out_width = ceil(28.0/2.0) = 14.0

因此

pad_along_height = max((14.0 -1)*2 + 5 - 28,0) = 3
pad_along_width = max((14.0 -1)*2 + 5 - 28,0) = 3

pad_top = 3 // 2 = 1
pad_bottom = 3//2 - pad_top = 2
pad_left = pad_along_width // 2 = 1
pad_right = pad_along_width - pad_left = 2

这是否意味着图像应该在左上方和右上方填充1在顶部,2在底部填充?

1 个答案:

答案 0 :(得分:0)

我正在查看他们实际验证过的Tensorflow文档:

  

请注意,除以2表示可能存在时的情况   两侧的填充(顶部与底部,右侧与左侧)相互关闭。   在这种情况下,底部和右侧总是得到一个额外的   填充像素。例如,当pad_along_height为5时,我们填充2个像素   顶部和底部3个像素。请注意,这是不同的   来自现有的库,如cuDNN和Caffe,它们是明确的   指定填充像素的数量并始终填充相同的数量   两侧的像素。