理解Tensorflow最大池
我无法理解为什么tensorflow maxpooling使用我的参数 当执行带有理解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
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
samesame
为ksize=2步幅=2
产生了相同的输出。很抱歉,我更新了问题。谢谢你的回答。我想我需要再仔细阅读一遍这份文件。我正想弄明白。这一点确实打动了我,但是VALID
samesame
为ksize=2步幅=2
产生了相同的输出。很抱歉,我更新了问题。谢谢你的回答。我想我需要再次仔细阅读这份文件。请忽略。似乎有些人在这方面胜过了我。:-)我想弄清楚。这一点确实打动了我,但是VALID
和SAME
为ksize=2 stride=2
产生了相同的输出。如何?请忽略。似乎有些人在这方面胜过了我。:-)我想弄清楚。这一点确实打动了我,但是VALID
和SAME
为ksize=2 stride=2
产生了相同的输出。怎样??