如果我有输出形状,过滤器形状,步幅和填充
过滤器形状:[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]
和如何计算?
你有计算形状的代码吗?因为我觉得我自己不需要写它..
答案 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