提交 fd780a84 编写于 作者: R Rachel Hu 提交者: Aston Zhang

3rd polished

上级 73b7a4e8
# 多输入多输出通道
:label:`sec_channels`
虽然在 :numref:`subsec_why-conv-channels` 中,我们描述了构成每个图像的多个通道(例如,彩色图像具有标准的 RGB 通道来指示红、绿和蓝)和多层卷积层,但是到目前为止,我们仅展示了单个输入和单个输出通道的简化示例。这使得我们可以将输入、卷积核和输出看作二维张量。
虽然在 :numref:`subsec_why-conv-channels` 中,我们描述了构成每个图像的多个通道和多层卷积层,例如彩色图像具有标准的 RGB 通道来指示红、绿和蓝。
但是到目前为止,我们仅展示了单个输入和单个输出通道的简化示例。
这使得我们可以将输入、卷积核和输出看作二维张量。
当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有 $3\times h\times w$ 的形状。我们将这个尺寸为 $3$ 的轴称为 *通道* 维度。在本节中,我们将更深入地研究具有多输入和多输出通道的卷积核。
当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有 $3\times h\times w$ 的形状。我们将这个尺寸为 $3$ 的轴称为 *通道*(channel) 维度。在本节中,我们将更深入地研究具有多输入和多输出通道的卷积核。
## 多输入通道
当输入包含多个通道时,需要构造一个与输入数据具有相同数目输入通道的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为 $c_i$,那么卷积核的输入通道数也需要为 $c_i$ 。如果卷积核的窗口形状是 $k_h\times k_w$,那么当 $c_i=1$ 时,我们可以把卷积核看作形状为 $k_h\times k_w$ 的二维张量。
当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数目的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为 $c_i$,那么卷积核的输入通道数也需要为 $c_i$ 。如果卷积核的窗口形状是 $k_h\times k_w$,那么当 $c_i=1$ 时,我们可以把卷积核看作形状为 $k_h\times k_w$ 的二维张量。
然而,当 $c_i>1$ 时,我们内核的每个输入通道将包含形状为 $k_h\times k_w$ 的张量。将这些张量 $c_i$ 连接在一起可以得到形状为 $c_i\times k_h\times k_w$ 的卷积核。由于输入和卷积核都有 $c_i$ 个通道,我们可以对每个通道的输入二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将 $c_i$ 的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。
然而,当 $c_i>1$ 时,我们内核的每个输入通道将包含形状为 $k_h\times k_w$ 的张量。将这些张量 $c_i$ 连结在一起可以得到形状为 $c_i\times k_h\times k_w$ 的卷积核。由于输入和卷积核都有 $c_i$ 个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将 $c_i$ 的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。
在 :numref:`fig_conv_multi_in` 中,我们演示了一个具有两个输入通道的二维互相关运算的示例。阴影部分是第一个输出元素以及用于计算这个输出的输入和核张量元素:$(1\times1+2\times2+4\times3+5\times4)+(0\times0+1\times1+3\times2+4\times3)=56$。
......@@ -18,7 +20,7 @@
:label:`fig_conv_multi_in`
为了加深理解,我们将多输入通道互相关运算实现一下。
简而言之,我们所做的就是对每个通道执行一个互相关运算,然后将结果相加。
简而言之,我们所做的就是对每个通道执行互相关操作,然后将结果相加。
```{.python .input}
from d2l import mxnet as d2l
......@@ -84,7 +86,7 @@ K = d2l.stack((K, K + 1, K + 2), 0)
K.shape
```
下面,我们对输入张量 `X` 与内核张量 `K` 执行互相关运算。现在的输出包含 $3$ 个通道,第一通道的结果与先前输入张量 `X` 和多输入单输出通道的结果一致。
下面,我们对输入张量 `X` 与内核张量 `K` 执行互相关运算。现在的输出包含 $3$ 个通道,第一通道的结果与先前输入张量 `X` 和多输入单输出通道的结果一致。
```{.python .input}
#@tab all
......@@ -96,19 +98,20 @@ corr2d_multi_in_out(X, K)
$1 \times 1$ 卷积,即 $k_h = k_w = 1$,看起来似乎没有多大意义。毕竟,卷积的本质是有效提取相邻像素间的相关特征,而 $1 \times 1$ 卷积显然没有此作用。
尽管如此,$1 \times 1$ 仍然十分流行,时常包含在复杂深层网络的设计中。下面,让我们详细地解读一下它的实际作用。
因为使用了最小窗口,$1\times 1$ 卷积失去了卷积层的特有能力——识别(在高度和宽度维度上)相邻元素之间相互作用的能力。
因为使用了最小窗口,$1\times 1$ 卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。
而 $1\times 1$ 卷积的唯一计算发生在通道上。
:numref:`fig_conv_1x1` 展示了使用 $1\times 1$ 卷积核与 $3$ 个输入通道和 $2$ 个输出通道的互相关计算。
这里输入和输出具有相同的高度和宽度,输出中的每个元素都是从输入图像中同一位置的元素的线性组合。
我们可以将 $1\times 1$ 卷积层看作是在每个像素位置应用的全连接层,以 $c_i$ 个输入值转换为 $c_o$ 个输出值。
因为这仍然是一个卷积层,所以跨像素的权重是一致的。
同时,$1\times 1$ 卷积层需要 $c_o\times c_i$ 权重(以及偏差)。
同时,$1\times 1$ 卷积层需要的权重维度为 $c_o\times c_i$ ,再额外加上一个偏差。
![互相关计算使用了具有3个输入通道和2个输出通道的 $1\times 1$ 卷积内核。其中,输入和输出具有相同的高度和宽度。](../img/conv-1x1.svg)
:label:`fig_conv_1x1`
下面,我们使用全连接层实现 $1 \times 1$ 卷积。
下面,我们使用全连接层实现 $1 \times 1$ 卷积。
请注意,我们需要对输入和输出的数据形状进行微调。
```{.python .input}
......@@ -146,13 +149,13 @@ assert float(d2l.reduce_sum(d2l.abs(Y1 - Y2))) < 1e-6
## 小结
* 多输入多输出通道可以用来扩展卷积层的模型。
* $1\times 1$ 卷积层相当于全连接层。
* 当以每像素为基础应用时,$1\times 1$ 卷积层相当于全连接层。
* $1\times 1$ 卷积层通常用于调整网络层的通道数量和控制模型复杂性。
## 练习
1. 假设我们有两个卷积核,大小分别为 $k_1$ 和 $k_2$(中间没有非线性)。
1. 证明可以用单卷积表示运算结果
1. 假设我们有两个卷积核,大小分别为 $k_1$ 和 $k_2$(中间没有非线性激活函数)。
1. 证明运算可以用单次卷积来表示
1. 这个等效的单卷积的维数是多少呢?
1. 反之亦然吗?
1. 假设输入为 $c_i\times h\times w$,卷积核大小为 $c_o\times c_i\times k_h\times k_w$,填充为 $(p_h, p_w)$,步幅为 $(s_h, s_w)$。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册