【问题标题】:Understanding Tensorflow maxpooling了解 TensorFlow 最大池化
【发布时间】:2018-02-22 13:16:19
【问题描述】:

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

当使用 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 的maxpool 使用padding SAME 应该产生输出maxpool2d_out : (?, 28, 28, 32)

关于使用填充的最大池的工作原理,我是否遗漏了什么?

**CODE**==python_

【问题讨论】:

标签: tensorflow deep-learning max-pooling


【解决方案1】:

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

更新: 根据tensorflow documentation:

使用相同的填充

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时,ceiling((28-2+1)/2)=14

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

【讨论】:

  • 请忽略。似乎有些人在这方面击败了我。 :-)
  • 我试图弄清楚这一点。这一点确实让我印象深刻,但VALID 和SAME 为ksize=2 stride=2 产生了相同的输出。怎么样??
【解决方案2】:

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

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

【讨论】:

  • 我试图弄清楚这一点。这一点确实让我印象深刻,但VALID 相同的SAME 为ksize=2 stride=2 产生相同的输出。怎么样??
  • 抱歉,我更新了问题。谢谢你的回答。我想我需要再次仔细阅读文档。
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多