我无法理解为什么tensorflow maxpooling with my parameters。
使用ksize=2
和strides=2
执行maxpool时,我会同时使用padding SAME
和padding VALID
input : (?, 28, 28, 1)
conv2d_out : (?, 28, 28, 32)
maxpool2d_out : (?, 14, 14, 32)
但是当我尝试使用ksize=3
和strides=1
对maxpool进行灌注时,我得到以下输出:
input : (?, 28, 28, 1)
conv2d_out : (?, 28, 28, 32)
maxpool2d_out : (?, 28, 28, 32) PADDING SAME
maxpool2d_out : (?, 26, 26, 32) PADDING VALID
使用ksize=2
和strides=2
的{{1}}的maxpool应该生成输出padding SAME
我是否错过了有关填充最大池的工作原理?
maxpool2d_out : (?, 28, 28, 32)
python_
答案 0 :(得分:1)
您正在使用padding='SAME'
,这意味着您的输出将使用零填充,以便具有相同的输入大小。
如果您将padding
更改为VALID
,则输出不会用零填充,并且池操作将按预期工作。
答案 1 :(得分:1)
我在您的代码中看到您使用padding=SAME
。使用 SAME paddding和strides=1
时,输入和输出大小相同。为什么你认为tensorflow实现是错误的?
<强>更新强> 根据{{3}}:
使用SAME填充
out_height = ceil(float(in_height) / float(strides[1]))
out_width = ceil(float(in_width) / float(strides[2]))
使用VALID填充
out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))
当k = 3时,它是celing((28-3 + 1)/ 1)= 26,stride = 1
当k = 2,stride = 2
正如您所看到的,由于天花板功能,使用不同的PADDING配置,您的结果恰好相同