我正在为我的CNN提供2048x2048的图像尺寸。但是我偶然忘记改变输入的大小:
img_width, img_height = 32, 32
input_shape = (3, img_width, img_height)
我想知道为什么即使输入图像大于32x32像素,训练仍然会运行?或者CNN只能识别部分图像吗?
提前致谢。
答案 0 :(得分:0)
卷积层的大多数实现都可以在任何大小的图像上运行。对于padding="SAME"
的2D卷积,任何卷积层的输出大小都是[batch_size, input_height // stride[0], input_width // stride[1], filters]
(有效填充只意味着每个边界上丢失一些像素,具体取决于内核大小)。
同样,内核中涉及的权重数量为filters_in * filters_out * np.prod(kernel_size)
,与输入大小无关(偏差仅为filters_out
)。
要执行分类等任务,大多数CNN在末尾使用空间池层(例如tf.reduce_mean(features, axis=(1, 2))
),无论输入大小如何,都会将任何输入图像批处理的输出减少到[batch_size, n_filters_out]
,通过一些密集的层来回归到logits。