如何计算卷积输入形状/大小?

时间:2016-10-31 04:51:39

标签: neural-network tensorflow deep-learning caffe conv-neural-network

如果我有输出形状,过滤器形状,步幅和填充

过滤器形状:[kernel_height, kernel_width, output_depth, input_depth]

输出形状:[batch, height, width, depth]

strides=[1,1,1,1]

padding='VALID'

我可以获得输入形状吗?

例如,

过滤器形状:[3, 3, 1, 1]

输出形状:[1, 1, 1, 1]

我可以计算固定输入形状[1,3,3,1]和如何计算?

你有计算形状的代码吗?因为我觉得我自己不需要写它..

1 个答案:

答案 0 :(得分:1)

它是batch, height + kernel_height - 1, width + kernel_width - 1, input_depth

开头的

batch有点明显,最后是input_depth。要了解height + kernel_height - 1,请考虑如何应用内核。如果您输入的图像是10乘10并且您应用了3乘3内核,则水平地将其应用于位置0,1,...,7,总共8个不同的位置,类似的思维适用于内核如何垂直移动,这将导致大小为8x8的输出映射。如果你总结一下这个想法,你会发现输出映射的大小是width + kernel - 1, height + kernel - 1,这意味着如果你有输出映射的大小,要获得输入的大小,你需要反转操作,这将导致width - kernel + 1, height - kernel + 1

这仅适用于填充类型" VALID"。如果类型为" SAME",则输出将被填充以匹配输入的维度,因此输入形状将为batch, height, width, input_depht