0

我无法理解为什么使用我的参数进行 tensorflow maxpooling。

当使用and执行 maxpool 时ksize=2strides=2我得到以下输出padding SAMEpadding VALID

input :  (?, 28, 28, 1)
conv2d_out :  (?, 28, 28, 32)
maxpool2d_out :  (?, 14, 14, 32)

ksize=3但是当我尝试使用and执行 maxpool 时strides=1,我得到以下输出:

input :  (?, 28, 28, 1)
conv2d_out :  (?, 28, 28, 32)
maxpool2d_out :  (?, 28, 28, 32) PADDING SAME
maxpool2d_out :  (?, 26, 26, 32) PADDING VALID

maxpool withksize=2strides=2usingpadding SAME应该已经产生了输出maxpool2d_out : (?, 28, 28, 32)

关于使用填充的最大池化是如何工作的,我错过了什么吗?

**CODE**==Python_

4

2 回答 2

1

您正在使用padding='SAME',这意味着您的输出将用零填充,以便具有相同的输入大小。

如果您更改padding为,VALID则输出不会用零填充,并且池化操作将按您的预期工作。

于 2017-09-13T19:50:34.400 回答
1

我在您使用的代码中看到了padding=SAME. 当使用SAME padding 和strides=1时,输入和输出大小是相同的。为什么你认为 tensorflow 的实现是错误的?

更新: 根据tensorflow 文档

使用相同的填充

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
  • 当 k=3 且 stride=1 时为 28/1=28
  • 当 k=2 且 stride =2 时为 28/2= 14

使用 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]))
  • celing((28-3+1)/1)= 26 当 k=3, stride =1

  • 当 k=2, stride=2 时,上限 ((28-2+1)/2)= 14

如您所见,由于天花板功能,使用不同的 PADDING 配置您的结果恰好是相同的

于 2017-09-13T20:12:22.330 回答