如何计算卷积输入 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
如果我有输出形状、滤波器形状、步幅和填充,
过滤器形状:[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