如何计算卷积输入 shape/size?

How do I compute the convolution input shape/size?

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

过滤器形状:[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] 以及如何计算?

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

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

开头的

batch有点明显,结尾的input_depth也是。要理解 height + kernel_height - 1,请考虑如何应用内核。如果您输入的图像是 10 x 10 并且您应用了 3 x 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