- 彩色图像具有标准的RBG通道来代表红绿蓝,但是到目前位置我们仅展示了单个输入和单个通道的简化例子。这使得我们可以将输入,卷积核和输出看作二维张量
- 而当我们添加通道时,输入和隐藏表示都变成了三维张量。例如每个RGB输入图像都具有 3 × h × w 3×h×w 3×h×w 的形状,我们将这个大小为 3 的轴称为通道维度
1. 多输入通道
- 当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算
- 我们对不同的通道之间分别进行互相关运算如下所示
- 我们下面尝试用代码来进行实现
- 下面进行验证
2. 多输出通道
-
到目位置,不论有多少输入通道,我们都只有一个输出通道,但是每一层有多个输出通道是很重要的
-
在最流行的神经网络架构中,随着层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度
-
直观解释就是:我们将每个通道看作对不同特征的响应,而现实可能更复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此多输出通道并不仅仅是学习多个单通道的检测器
-
用 c i c_i ci 和 c 0 c_0 c0 分别表示输入和输出的通道数目,并让 k h k_h kh 和 k w k_w kw 为卷积核的高度和宽度。为了获得多通道的输出,我们可以为每一个输出通道创建一个形状为 c i × k h × k w c_i×k_h×k_w ci×kh×kw 的卷积核张量,这样卷积核的形状就变成了 c 0 × c i × k h × k w c_0×c_i×k_h×k_w c0×ci×kh×kw,即每个输出通道都有 c i × k h × k w c_i×k_h×k_w ci×kh×kw 的卷积核
-
每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果
-
下面我们实现一个计算多个通道的输出的互相关函数
-
下面介绍
torch.stack
-
我们对 K 进行堆叠来制造多个输出
-
对输入张量 X 和 卷积核张量 K 进行互相关运算。现在的输出包含三个通道,第一个通道的结果与先前输入张量 X 和多输出单通道结果一致
3. 1 × 1 1×1 1×1 卷积层
- 1 × 1 1×1 1×1 卷积看起来似乎没多大意义。毕竟,卷积的本质是有效提取相邻像素间的相关特征,而 1 × 1 1×1 1×1 卷积显然没有此作用。
- 但是,
1
×
1
1×1
1×1 仍然十分流行,经常包含在复杂深层网络的设计中,下面我们来解读它的实际作用
- 下图展示了使用 1 × 1 1×1 1×1 卷积层与三个输出通道和两个输入通道的互相关计算。这里的输入和输出具有相同的宽度和高度,输出中的每个元素都是从输入图像中同一位置元素的线性组合
- 以
c
i
c_i
ci 个输出值转换为
c
0
c_0
c0 个输出值。因为这仍然是一个卷积层,所以跨像素的权重是一致的。此时卷积层的权重为
c
0
×
c
i
c_0×c_i
c0×ci 再加上一个偏置,这一点有点像MLP
- 我们尝试用全连接层实现
1
×
1
1×1
1×1 卷积
- 当执行
1
×
1
1×1
1×1 运算时,上述函数相当于先前实现的互相关函数
corr2d_multi_in_out
,验证如下