2015-11-16 82 views
3

我想了解TensorFlow的convolution,特別是式如何解釋TensorFlow的卷積濾波器和步進參數?

shape(output) = [batch, 
      (in_height - filter_height + 1)/strides[1], 
      (in_width - filter_width + 1)/strides[2], 
      ...] 

我本來期望公式是

shape(output) = [batch, 
      (in_height - filter_height)/strides[1] + 1, 
      (in_width - filter_width)/strides[2] + 1, 
      ...] 

代替。從32×32的圖像開始,並應用與進展5x5的過濾器[1,3,3,1],然後在我的理解這應該產生一個10×10輸出,其值的區域

(0:4,0:4) , (0:4,3:7) , (0:4,6:10) , ..., (0:4,27:31), 
(3:7,0:4) , (3:7,3:7) , (3:7,6:10) , ..., (3:7,27:31), 
... 
(27:31,0:4), (27:31,3:7), (27:31,6:10), ..., (27:31,27:31) 

這樣的卷積兩個尺寸應該是floor((32-5)/ 3)+ 1 = 10而不是floor((32-5 + 1)/ 3)= 9。我在這裏錯過了什麼?我誤解了卷積在這裏完成的方式和/或參數是什麼意思?如果是這樣,我應該使用什麼參數來獲得上述選擇?

回答

3

根據issue #196,這部分文檔顯然是錯誤的;我認爲dga的答案仍然存在問題。

它應該是:

地板((in_height + y_padding-filter_height)/ y_stride)+ 1,

  • 當填充= VALID,y_padding = 0。
  • 當padding = SAME時,通常應調整y_padding以使(in_height + y_padding-filter_height)/ y_stride爲整數,以便'floor'變爲不必要的。
2

你正確 - 它應該是:

小區(浮子(in_height - filter_height + 1)/浮子(步幅[1]))

對於32,如圖5所示,步幅= 3,這變成:ceil(9.33)= 10.

固定並將很快推入github。感謝您抓住這個!欲瞭解更多信息,請參閱github bug discussion, issue #196