了解Tensorflow maxpooling

时间:2017-09-13 18:01:49

标签: tensorflow deep-learning max-pooling

我无法理解为什么tensorflow maxpooling with my parameters。

使用ksize=2strides=2执行maxpool时,我会同时使用padding SAMEpadding VALID

获得以下输出
input :  (?, 28, 28, 1)
conv2d_out :  (?, 28, 28, 32)
maxpool2d_out :  (?, 14, 14, 32)

但是当我尝试使用ksize=3strides=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=2strides=2的{​​{1}}的maxpool应该生成输出padding SAME

我是否错过了有关填充最大池的工作原理?

maxpool2d_out : (?, 28, 28, 32) python_

2 个答案:

答案 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]))
  • 当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]))
  • 当k = 3时,它是celing((28-3 + 1)/ 1)= 26,stride = 1

  • 当k = 2,stride = 2

  • 时是天花板((28-2 + 1)/ 2)= 14

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