CNN中过滤器和特征图之间的连接

机器算法验证 机器学习 神经网络 深度学习 卷积神经网络
2022-03-27 19:13:37

我正在使用 TensorFlow 和 Python 学习 CNN。

我不明白层和层之间的联系。例如,对于输入图像和第一层,这很容易,因为只有一个输入,因此特征图与过滤器一样多,每个过滤器都可以与输入图像“相乘”。生成的特征图大小为+1((input_size - filter_size + 2*padding) / stride) + 1

一个类似的问题和答案清楚地回应了他的特定示例: 卷积神经网络中的过滤器和激活图是如何连接的?

但总的来说我还是不明白。当我们构建一个 CNN 时,例如:

model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) 
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) 

TensorFlow 如何将 32 个特征图与下一个特征图联系起来?通常我会认为,使用前一层的 64 个过滤器和 32 个特征图,我们将在下一层获得 64*32 个特征图(所有特征都连接到每个过滤器)。但我认为上面的代码会产生 64 个特征图。

1个回答

您的困惑源于这样一个事实,即通道(特征图)的处理方式与其他维度有所不同。

假设(3,3)根据您的示例,您有一个灰度图像输入到第一层和 32 个形状内核。但事实上,这些内核是有形状的(3,3,1)——1对于输入中的通道数。对于 RGB 输入图像,它将是3. 通道数在代码中被简单地省略了,因为它是根据层输入的通道数自动推断出来的。

该层的输出有 32 个通道(每个内核 1 个)。在您示例的第二层中,您有 64 个形状内核(3,3)但实际上它们是(3,3,32)这些内核中的每一个都在聚合来自所有输入特征映射的信息。


通常我会认为,使用前一层的 64 个过滤器和 32 个特征图,我们将在下一层获得 64*32 个特征图(所有特征都连接到每个过滤器)。

我希望从上面的解释中可以清楚地看出,您没有将 64 个内核中的每一个单独应用于 32 个特征图的每一个上。相反,这 64 个内核中的每一个都同时查看所有 32 个特征图,每个内核具有不同的权重。