了解卷积神经网络 (CNN) 输入形状和输出形状中的通道

clw*_*wen 3 neural-network conv-neural-network keras

我试图遵循本教程 https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

在基线模型中它有 model.add(Conv2D(32, (3, 3), input_shape=(3, 150, 150)))

我不太了解这里的输出形状。如果输入形状为 3x150x150,内核大小为 3x3,那么输出形状不是 3x148x148 吗?(假设没有填充)。然而,根据 Keras 文档:

输出形状:4D 张量,形状:(b​​atch、filters、new_rows、new_cols)

在我看来,输出形状将是 32x148x148。我的问题是这种理解是否正确?如果是这样,额外的过滤器从哪里来?

Ami*_*mir 8

如果输入形状为(3, 150, 150),则应用 Conv2D 层后输出为(?, 32, 148, 148)。通过以下示例检查一下:

inps = Input(shape=(3, 150, 150))
conv = Conv2D(32, (3, 3), data_format='channels_first')(inps)
print(conv)
>> Tensor("conv2d/BiasAdd:0", shape=(?, 32, 148, 148), dtype=float32)
Run Code Online (Sandbox Code Playgroud)
  • 由符号指定的第一个维度?是批量大小。
  • 第二个维度是过滤器尺寸 ( 32)。
  • 最后两个是图像宽度和高度 ( 148)。

通道如何从 3 变为 32?假设我们有 RGB 图像(3 个通道)并且输出通道大小为 1。会发生以下情况:

在此输入图像描述

当您使用filters=32和时kernel_size=(3,3),您将创建 32 个不同的过滤器,每个过滤器的形状为 (3,3,3)。结果会带来32个不同的卷积。请注意,根据Keras 的glorot_uniform说法,所有内核都在开始时初始化。

图片来自这篇博文