2017-09-13 89 views
0

我無法理解爲什麼tensorflow maxpooling與我的參數。理解Tensorflow maxpooling

ksize=2strides=2我得到既padding SAMEpadding VALID

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

但下面的輸出進行maxpool當我試圖藉此在maxpool與ksize=3strides=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 with ksize=2 and strides=2 using padding SAME should have produced輸出maxpool2d_out : (?, 28, 28, 32)

有沒有什麼我錯過了如何最大池填充工作?

**CODE**==python_

+0

請分享代碼 – nessuno

+0

http://codepad.org/IwxshYr1 –

回答

1

我在您的代碼中看到您使用padding=SAME。當使用SAME paddding和strides=1時,輸入和輸出大小是相同的。你爲什麼認爲tensorflow的實現是錯誤的?

更新: 根據tensorflow documentation

使用SAME填充

out_height = ceil(float(in_height)/float(strides[1])) 
out_width = ceil(float(in_width)/float(strides[2])) 
  • 它是28/1 = 28當k = 3且跨距= 1
  • 它當k = 2且步幅= 2時爲28/2 = 14

使用有效填充

out_height = ceil(float(in_height - filter_height + 1)/float(strides[1])) 
out_width = ceil(float(in_width - filter_width + 1)/float(strides[2])) 
  • 它的天頂((28-3 + 1)/ 1)= 26當k = 3時,跨度= 1

  • 它是天花板((28-2 + 1)/ 2)= 14當k = 2時,步幅= 2

正如你可以看到,因爲上取整函數的,你的結果正好是同一使用不同的PADDING配置

+2

請忽略。似乎有些人在這方面擊敗了我。 :-) – Lan

+0

我試圖弄清楚。這一點確實引起了我的注意,但'VALID'和'SAME'對於'ksize = 2 stride = 2'產生相同的輸出。怎麼樣?? –

+0

剛剛更新了答案。 – Lan

1

您使用padding='SAME',這意味着您的輸出將與零,以便有輸入相同的尺寸來填充。

如果將padding更改爲VALID,則輸出不會填充0,並且池操作將按預期工作。

+0

我試圖弄清楚。這一點確實讓我感到「VALID」,相同的'SAME'對於'ksize = 2 stride = 2'產生相同的輸出。怎麼樣?? –

+0

對不起,我更新了這個問題。謝謝你的答案。猜猜我需要再次仔細閱讀文檔。 –