动手学深度学习-21

敖炜 Lv5

卷积层的多输入多输出通道

当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有的形状。我们将这个大小为的轴称为通道(channel)维度。

多输入通道

当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为,那么卷积核的输入通道数也需要为。如果卷积核的窗口形状是,那么当时,我们可以把卷积核看作形状为的二维张量。

然而,当时,我们卷积核的每个输入通道将包含形状为的张量。将这些张量连结在一起可以得到形状为的卷积核。由于输入和卷积核都有个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。

下面实现一下多输入通道互相关运算,简而言之,我们所做的就是对每个通道执行互相关操作,然后将结果相加

1
2
3
4
5
6
import torch
from d2l import torch as d2l

def corr2d_multi_in(X, K):
# 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起
return sum(d2l.corr2d(x, k) for x, k in zip((X, K)))

构造输入张量与核张量,验证互相关运算的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
X = torch.tensor([[[0.0, 1.0, 2.0],
[3.0, 4.0, 5.0],
[6.0, 7.0, 8.0]],
[[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]]])

K = torch.tensor([[[0.0, 1.0],
[2.0, 3.0]],
[[1.0, 2.0],
[3.0, 4.0]]])

corr2d_multi_in(X, K)

多输出通道

每一层有多个输出通道是至关重要的。在最流行的神经网络架构中,随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。

分别表示输入和输出通道的数目,并让为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为的卷积核张量,这样卷积核的形状是。在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

我们实现一个计算多个通道的输出的互相关函数

1
2
3
4
def corr2d_multi_in_out(X, K):
# 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
# 最后将所有结果都叠加在一起
return torch.stack([corr2d_multi_in(X, k) for k in K], 0) # 使用 torch.stack 函数将之前计算得到的所有互相关结果的列表叠加在一起,生成一个新的张量。参数 0 表示在新张量的第0个维度上叠加。

卷积层

卷积,即,看起来似乎没有多大意义。
毕竟,卷积的本质是有效提取相邻像素间的相关特征,而卷积显然没有此作用。
尽管如此,仍然十分流行,经常包含在复杂深层网络的设计中。

因为使用了最小窗口,卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。
其实卷积的唯一计算发生在通道上。

我们可以将卷积层看作在每个像素位置应用的全连接层,以个输入值转换为个输出值。
因为这仍然是一个卷积层,所以跨像素的权重是一致的。
同时,卷积层需要的权重维度为,再额外加上一个偏置。

我们使用全连接层实现卷积。请注意,我们需要对输入和输出的数据形状进行调整。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def corr2d_multi_in_out_1x1(X, k):
c_i, h, w = X.shape
c_o = K.shape[0]

#
X = X.reshape((c_i, h * w))

# 将卷积核集合 K 重塑为一个矩阵,其中每一行代表一个卷积核的权重。
K = k.reshape((c_o, c_i))

# 全连接层中的矩阵乘法
Y = torch.matmul(K, X)

return Y.reshape((c_o, h, w))

小结

  • 多输入多输出通道可以用来扩展卷积层的模型。
  • 当以每像素为基础应用时,卷积层相当于全连接层。
  • 卷积层通常用于调整网络层的通道数量和控制模型复杂性。

QA

卷积后的输出就是特征图(feature map)

  • 标题: 动手学深度学习-21
  • 作者: 敖炜
  • 创建于 : 2023-08-19 14:04:30
  • 更新于 : 2024-04-19 09:28:42
  • 链接: https://ao-wei.github.io/2023/08/19/动手学深度学习-21/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
动手学深度学习-21