如何解读TensorFlow的卷积滤波器和stridding参数?
How to interpret TensorFlow's convolution filter and striding parameters?
我正在尝试理解 TensorFlow 的 convolution,尤其是公式
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,
...]
相反。从 32x32 的图像开始,应用步幅为 [1,3,3,1] 的 5x5 过滤器,然后在我的理解中这应该产生 10x10 的输出,其值是区域
的卷积
(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。我在这里错过了什么?我是不是误解了这里做卷积的方式 and/or 参数是什么意思?如果是这样,我应该使用什么参数来获得上述选择?
你是对的 - 应该是:
ceil(float(in_height - filter_height + 1) / float(strides[1]))
对于 32、5、stride=3,这变成:ceil(9.33) = 10。
已修复并将很快推入 github。感谢您抓住这个!有关详细信息,请参阅 github bug discussion, issue #196
根据issue #196,这部分文档显然是错误的;我认为 dga 的回答仍然存在问题。
应该是:
楼层((in_height+y_padding-filter_height)/y_stride) + 1,
- 当padding=VALID时,y_padding=0.
- 当padding=SAME时,一般来说y_padding应该调整成(in_height+y_padding-filter_height)/y_stride一个整数,这样'floor'变得不必要了。
我正在尝试理解 TensorFlow 的 convolution,尤其是公式
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,
...]
相反。从 32x32 的图像开始,应用步幅为 [1,3,3,1] 的 5x5 过滤器,然后在我的理解中这应该产生 10x10 的输出,其值是区域
的卷积 (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。我在这里错过了什么?我是不是误解了这里做卷积的方式 and/or 参数是什么意思?如果是这样,我应该使用什么参数来获得上述选择?
你是对的 - 应该是:
ceil(float(in_height - filter_height + 1) / float(strides[1]))
对于 32、5、stride=3,这变成:ceil(9.33) = 10。
已修复并将很快推入 github。感谢您抓住这个!有关详细信息,请参阅 github bug discussion, issue #196
根据issue #196,这部分文档显然是错误的;我认为 dga 的回答仍然存在问题。
应该是:
楼层((in_height+y_padding-filter_height)/y_stride) + 1,
- 当padding=VALID时,y_padding=0.
- 当padding=SAME时,一般来说y_padding应该调整成(in_height+y_padding-filter_height)/y_stride一个整数,这样'floor'变得不必要了。