|
14 | 14 | :label:`fig_correlation`
|
15 | 15 |
|
16 | 16 | 在二维互相关运算中,卷积窗口从输入张量的左上角开始,从左到右、从上到下滑动。
|
17 |
| -当卷积窗口滑动到新一个位置时,包含在该窗口中的部分张量与卷积核张量进行逐元素相乘,得到的张量再求和得到一个单一的标量值,由此我们得出了这一位置的输出张量值。 |
| 17 | +当卷积窗口滑动到新一个位置时,包含在该窗口中的部分张量与卷积核张量进行按元素相乘,得到的张量再求和得到一个单一的标量值,由此我们得出了这一位置的输出张量值。 |
18 | 18 | 在如上例子中,输出张量的四个元素由二维互相关运算得到,这个输出高度为 $2$ 、宽度为 $2$ ,如下所示:
|
19 | 19 |
|
20 | 20 | $$
|
@@ -86,11 +86,11 @@ corr2d(X, K)
|
86 | 86 |
|
87 | 87 | ## 卷积层
|
88 | 88 |
|
89 |
| -卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏差之后产生输出。 |
90 |
| -所以,卷积层中的两个被训练的参数是卷积核权重和标量偏差。 |
| 89 | +卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏置之后产生输出。 |
| 90 | +所以,卷积层中的两个被训练的参数是卷积核权重和标量偏置。 |
91 | 91 | 就像我们之前随机初始化全连接层一样,在训练基于卷积层的模型时,我们也随机初始化卷积核权重
|
92 | 92 |
|
93 |
| -基于上面定义的 `corr2d` 函数实现二维卷积层。在 `__init__` 构造函数中,将 `weight` 和 `bias` 声明为两个模型参数。前向传播函数调用 `corr2d` 函数并添加偏差。 |
| 93 | +基于上面定义的 `corr2d` 函数实现二维卷积层。在 `__init__` 构造函数中,将 `weight` 和 `bias` 声明为两个模型参数。前向传播函数调用 `corr2d` 函数并添加偏置。 |
94 | 94 |
|
95 | 95 | ```{.python .input}
|
96 | 96 | class Conv2D(nn.Block):
|
@@ -185,7 +185,7 @@ corr2d(d2l.transpose(X), K)
|
185 | 185 | 如果我们只需寻找黑白边缘,那么以上 `[1, -1]` 的边缘检测器足以。然而,当有了更复杂数值的卷积核,或者连续的卷积层时,我们不可能手动设计过滤器。那么我们是否可以学习由 `X` 生成 `Y` 的卷积核呢?
|
186 | 186 |
|
187 | 187 | 现在让我们看看是否可以通过仅查看“输入-输出”对来了解由 `X` 生成 `Y` 的卷积核。
|
188 |
| -我们先构造一个卷积层,并将其卷积核初始化为随机张量。接下来,在每次迭代中,我们比较 `Y` 与卷积层输出的平方误差,然后计算梯度来更新卷积核。为了简单起见,我们在此使用内置的二维卷积层,并忽略偏差。 |
| 188 | +我们先构造一个卷积层,并将其卷积核初始化为随机张量。接下来,在每次迭代中,我们比较 `Y` 与卷积层输出的平方误差,然后计算梯度来更新卷积核。为了简单起见,我们在此使用内置的二维卷积层,并忽略偏置。 |
189 | 189 |
|
190 | 190 | ```{.python .input}
|
191 | 191 | # 构造一个二维卷积层,它具有1个输出通道和形状为(1,2)的卷积核
|
@@ -305,7 +305,7 @@ d2l.reshape(conv2d.get_weights()[0], (1, 2))
|
305 | 305 |
|
306 | 306 | ## 小结
|
307 | 307 |
|
308 |
| -* 二维卷积层的核心计算是二维互相关运算。最简单的形式是,对二维输入数据和卷积核执行互相关操作,然后添加一个偏差。 |
| 308 | +* 二维卷积层的核心计算是二维互相关运算。最简单的形式是,对二维输入数据和卷积核执行互相关操作,然后添加一个偏置。 |
309 | 309 | * 我们可以设计一个卷积核来检测图像的边缘。
|
310 | 310 | * 我们可以从数据中学习卷积核的参数。
|
311 | 311 | * 学习卷积核时,无论用严格卷积运算或互相关运算,卷积层的输出不会受太大影响。
|
|
0 commit comments