理解Tensorflow最大池

理解Tensorflow最大池,tensorflow,deep-learning,max-pooling,Tensorflow,Deep Learning,Max Pooling,我无法理解为什么tensorflow maxpooling使用我的参数 当执行带有ksize=2和strips=2的maxpool时,我得到以下输出,其中填充相同的和填充有效的 input : (?, 28, 28, 1) conv2d_out : (?, 28, 28, 32) maxpool2d_out : (?, 14, 14, 32) 但是,当我尝试使用ksize=3和strips=1执行maxpool时,我得到以下输出: input : (?, 28, 28, 1) conv

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

当执行带有
ksize=2
strips=2
的maxpool时,我得到以下输出,其中
填充相同的
填充有效的

input :  (?, 28, 28, 1)
conv2d_out :  (?, 28, 28, 32)
maxpool2d_out :  (?, 14, 14, 32)
但是,当我尝试使用
ksize=3
strips=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
strips=2
的maxpool应该产生输出
maxpool2d\u out:(?,28,28,32)

我有没有遗漏了max pooling和padding的工作原理


**code**=

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


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

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


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

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

更新: 根据:

使用相同的填充

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
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,步幅=1时,为28/1=28
  • 当k=2和步幅=2时,为28/2=14
使用有效的填充

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
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,步幅=1时,为赛林((28-3+1)/1)=26

  • 当k=2,步幅=2时,为天花板((28-2+1)/2)=14


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

我在代码中看到您使用了
PADDING=same
。使用相同的填充和
步幅=1
时,输入和输出大小相同。为什么您认为tensorflow实现是错误的

更新: 根据:

使用相同的填充

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
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,步幅=1时,为28/1=28
  • 当k=2和步幅=2时,为28/2=14
使用有效的填充

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
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,步幅=1时,为赛林((28-3+1)/1)=26

  • 当k=2,步幅=2时,为天花板((28-2+1)/2)=14


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

请共享代码请共享代码我正在尝试解决这个问题。这一点确实打动了我,但是
VALID
same
same
ksize=2步幅=2
产生了相同的输出。很抱歉,我更新了问题。谢谢你的回答。我想我需要再仔细阅读一遍这份文件。我正想弄明白。这一点确实打动了我,但是
VALID
same
same
ksize=2步幅=2
产生了相同的输出。很抱歉,我更新了问题。谢谢你的回答。我想我需要再次仔细阅读这份文件。请忽略。似乎有些人在这方面胜过了我。:-)我想弄清楚。这一点确实打动了我,但是
VALID
SAME
ksize=2 stride=2
产生了相同的输出。如何?请忽略。似乎有些人在这方面胜过了我。:-)我想弄清楚。这一点确实打动了我,但是
VALID
SAME
ksize=2 stride=2
产生了相同的输出。怎样??