6.4. 多输入多输出通道¶ Open the notebook in SageMaker Studio Lab
虽然我们在 6.1.4.1节中描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。
当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有
6.4.1. 多输入通道¶
当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为
然而,当
在
图6.4.1中,我们演示了一个具有两个输入通道的二维互相关运算的示例。阴影部分是第一个输出元素以及用于计算这个输出的输入和核张量元素:
图6.4.1 两个输入通道的互相关计算。¶
为了加深理解,我们实现一下多输入通道互相关运算。 简而言之,我们所做的就是对每个通道执行互相关操作,然后将结果相加。
我们可以构造与
图6.4.1中的值相对应的输入张量X
和核张量K
,以验证互相关运算的输出。
[07:12:26] ../src/storage/storage.cc:196: Using Pooled (Naive) StorageManager for CPU
array([[ 56., 72.],
[104., 120.]])
tensor([[ 56., 72.],
[104., 120.]])
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[ 56., 72.],
[104., 120.]], dtype=float32)>
Tensor(shape=[2, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[56. , 72. ],
[104., 120.]])
6.4.2. 多输出通道¶
到目前为止,不论有多少输入通道,我们还只有一个输出通道。然而,正如我们在 6.1.4.1节中所讨论的,每一层有多个输出通道是至关重要的。在最流行的神经网络架构中,随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。
用
如下所示,我们实现一个计算多个通道的输出的互相关函数。
通过将核张量K
与K+1
(K
中每个元素加K+2
连接起来,构造了一个具有
下面,我们对输入张量X
与卷积核张量K
执行互相关运算。现在的输出包含X
和多输入单输出通道的结果一致。
array([[[ 56., 72.],
[104., 120.]],
[[ 76., 100.],
[148., 172.]],
[[ 96., 128.],
[192., 224.]]])
tensor([[[ 56., 72.],
[104., 120.]],
[[ 76., 100.],
[148., 172.]],
[[ 96., 128.],
[192., 224.]]])
<tf.Tensor: shape=(3, 2, 2), dtype=float32, numpy=
array([[[ 56., 72.],
[104., 120.]],
[[ 76., 100.],
[148., 172.]],
[[ 96., 128.],
[192., 224.]]], dtype=float32)>
6.4.3. 卷积层¶
因为使用了最小窗口,
图6.4.2展示了使用
图6.4.2 互相关计算使用了具有3个输入通道和2个输出通道的
下面,我们使用全连接层实现
当执行corr2d_multi_in_out
。让我们用一些样本数据来验证这一点。
6.4.4. 小结¶
多输入多输出通道可以用来扩展卷积层的模型。
当以每像素为基础应用时,
卷积层相当于全连接层。 卷积层通常用于调整网络层的通道数量和控制模型复杂性。
6.4.5. 练习¶
假设我们有两个卷积核,大小分别为
和 (中间没有非线性激活函数)。证明运算可以用单次卷积来表示。
这个等效的单个卷积核的维数是多少呢?
反之亦然吗?
假设输入为
,卷积核大小为 ,填充为 ,步幅为 。前向传播的计算成本(乘法和加法)是多少?
内存占用是多少?
反向传播的内存占用是多少?
反向传播的计算成本是多少?
如果我们将输入通道
和输出通道 的数量加倍,计算数量会增加多少?如果我们把填充数量翻一番会怎么样?如果卷积核的高度和宽度是
,前向传播的计算复杂度是多少?本节最后一个示例中的变量
Y1
和Y2
是否完全相同?为什么?当卷积窗口不是
时,如何使用矩阵乘法实现卷积?