我们将在这里讨论的第一件事是过滤器。 可以将滤镜视为由可学习的权重值组成的图像的较小版本。 就像我们在深层前馈网络中从一个神经元到另一个神经元具有权重连接一样,权重也存在于卷积层中,不同之处在于权重是以过滤器的形式将连接器覆盖的空间区域连接到神经元。 让我们考虑一个大小为 5 x 5(宽度和高度)的过滤器的示例。 滤镜也将延伸到图像的第三维(通道)。 对于三通道图像,滤镜尺寸为 5 x 5 x 3,对于单通道图像,滤镜尺寸为 5 x 5 x1。下图显示了 5 x 5 x 1 滤镜:
我们将在这里讨论的第一件事是过滤器。 可以将滤镜视为由可学习的权重值组成的图像的较小版本。 就像我们在深层前馈网络中从一个神经元到另一个神经元具有权重连接一样,权重也存在于卷积层中,不同之处在于权重是以过滤器的形式将连接器覆盖的空间区域连接到神经元。 让我们考虑一个大小为 5 x 5(宽度和高度)的过滤器的示例。 滤镜也将延伸到图像的第三维(通道)。 对于三通道图像,滤镜尺寸为 5 x 5 x 3,对于单通道图像,滤镜尺寸为 5 x 5 x1。下图显示了`5 x 5 x 1`滤镜:
神经元如何通过卷积计算过滤器的输出? 为了理解这一点,让我们考虑在 6 x 6 x 1 图像上放置 3 x 3 x 1 滤镜的第一张幻灯片的场景。 计算过滤器中每个权重值与对应位置的像素值的点积。 对一个位置上所有权重值的点积求和,此计算出的总和就是卷积的输出。 激活功能(例如 ReLU)用于神经元的输出中。
神经元如何通过卷积计算过滤器的输出? 为了理解这一点,让我们考虑在`6 x 6 x 1`图像上放置`3 x 3 x 1`滤镜的第一张幻灯片的场景。 计算过滤器中每个权重值与对应位置的像素值的点积。 对一个位置上所有权重值的点积求和,此计算出的总和就是卷积的输出。 激活功能(例如 ReLU)用于神经元的输出中。
* 通常,CNN 在层中不使用单个过滤器。 我们使用一组过滤器(例如 12 个过滤器)。 这样做是因为具有不同权重集的每个滤镜趋向于捕获图像的不同特征。 来自每个过滤器的响应被一个接一个地堆叠,并且每个响应被称为**激活映射**。 例如,如果我们使用 32 x 32 x 1 的图像和四个大小为 3 x 3 x 1 的滤镜,且步幅为 2,填充为 1,则卷积层的输出尺寸为(16 x 16 x 4)。 在这里,最后一个维度将等于激活图的数量,该数量将等于过滤器的数量。 可以使用以下公式计算输出的宽度和高度:
* 通常,CNN 在层中不使用单个过滤器。 我们使用一组过滤器(例如 12 个过滤器)。 这样做是因为具有不同权重集的每个滤镜趋向于捕获图像的不同特征。 来自每个过滤器的响应被一个接一个地堆叠,并且每个响应被称为**激活映射**。 例如,如果我们使用`32 x 32 x 1`的图像和四个大小为`3 x 3 x 1`的滤镜,且步幅为 2,填充为 1,则卷积层的输出尺寸为(16 x 16 x 4)。 在这里,最后一个维度将等于激活图的数量,该数量将等于过滤器的数量。 可以使用以下公式计算输出的宽度和高度:
1 x 1 卷积在所有 128 个通道中与`5 x 5`输入层执行逐元素乘法–将其在深度维度上求和,并应用 ReLU 激活函数在`5 x 5`中创建单个点 输出表示 128 的输入深度。本质上,通过使用这种机制(卷积+整个深度的和),它会将三维体积折叠为具有相同宽度和高度的二维数组。 然后,它应用 32 个过滤器以创建 5 x 5 x 32 输出,如前所示。 这是有关 CNN 的基本概念,因此请花一些时间来确保您理解这一点。
1 x 1 卷积在所有 128 个通道中与`5 x 5`输入层执行逐元素乘法–将其在深度维度上求和,并应用 ReLU 激活函数在`5 x 5`中创建单个点 输出表示 128 的输入深度。本质上,通过使用这种机制(卷积+整个深度的和),它会将三维体积折叠为具有相同宽度和高度的二维数组。 然后,它应用 32 个过滤器以创建`5 x 5 x 32`输出,如前所示。 这是有关 CNN 的基本概念,因此请花一些时间来确保您理解这一点。
本书将使用`1 x 1`卷积。 稍后,您将了解到池化会减小宽度,而`1 x 1`卷积会保留宽度,但可以根据需要收缩或扩展深度。 例如,您将看到在网络和 Inception 层中使用了`1 x 1`卷积(在“第 5 章”,“神经网络架构和模型”中。具有 1 的 32 过滤器) x 1 的卷积可以在 TensorFlow 中表示为`.tf.keras.layers.Conv2D(32, (1,1))`。