2015-11-16 84 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