我正在尝试了解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。我在这里错过了什么?我是否误解了卷积在这里完成的方式和/或参数的含义?如果是这样,我应该使用哪些参数来获得上述选择?
答案 0 :(得分:3)
根据issue #196,这部分文件显然是错误的;我认为dga的答案仍有问题。
应该是:
floor((in_height + y_padding-filter_height)/ y_stride)+ 1,
答案 1 :(得分:2)
你是正确的 - 它应该是:
ceil(float(in_height - filter_height + 1)/ float(strides [1]))
对于32,5,stride = 3,这变为:ceil(9.33)= 10.
已修复并将很快推入github。谢谢你抓住这个!有关详细信息,请参阅github bug discussion, issue #196