diff --git a/chapter_convolutional-neural-networks/lenet.md b/chapter_convolutional-neural-networks/lenet.md index 591650b924c51356e9372ba0ae7b041a782b1f74..a22b766a64537fd1a0133a69ca31aac3bf3c29ab 100644 --- a/chapter_convolutional-neural-networks/lenet.md +++ b/chapter_convolutional-neural-networks/lenet.md @@ -1,14 +1,14 @@ -# 卷积神经网络之Lenet +# 卷积神经网络之LeNet :label:`sec_lenet` -通过之前几节的学习,我们解析了构建一个完整的卷积神经网络所需成分。 -回顾之前我们将 softmax 回归模型(:numref:`sec_softmax_scratch`)和全连接层模型(:numref:`sec_mlp_scratch`)应用于时装 MNIST 数据集中的服装图片。 -为此,我们首先将每个大小为 $28\times28$ 的图像展平为一个 784 固定长度的一维向量,然后用全连接层对其进行处理。 +通过之前几节,我们学习了构建一个完整卷积神经网络的所需组件。。 +回顾之前我们将 softmax 回归模型(:numref:`sec_softmax_scratch`)和全连接层模型(:numref:`sec_mlp_scratch`)应用于 Fashion-MNIST 数据集中的服装图片。 +为了能够应用 softmax 回归和多层感知机,我们首先将每个大小为 $28\times28$ 的图像展平为一个 784 固定长度的一维向量,然后用全连接层对其进行处理。 而现在,我们已经掌握了卷积层的处理方法,我们可以在图像中保留空间结构。 -同时,用卷积层代替全连接层的另一个好处是前者的更简洁模型需要更少参数的。 +同时,用卷积层代替全连接层的另一个好处是:更简洁的模型所需的参数更少。 -在本节中,我们将介绍 LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的性能而受到广泛关注。 +在本节中,我们将介绍 LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的高效性能而受到广泛关注。 这个模型是由 AT&T 贝尔实验室的研究员 Yann LeCun 在1989年提出的(并以其命名),目的是识别图像 :cite:`LeCun.Bottou.Bengio.ea.1998` 中的手写数字。 当时,Yann LeCun 发表了第一篇通过反向传播成功训练卷积神经网络的研究,这项工作代表了十多年来神经网络研究开发的成果。 @@ -18,21 +18,22 @@ LeNet 被广泛用于自动取款机(ATM)机中,帮助识别处理支票 -## Lenet +## LeNet -总体来看,Lenet (Lenet-5) 由两个部分组成: -- 由两个卷积层组成的卷积编码器; -- 由三个完全连接层组成的全连接层密集块。 -该架构在 :numref:`img_lenet` 中总结。 +总体来看,LeNet (LeNet-5) 由两个部分组成: +- 卷积编码器:由两个卷积层组成; +- 全连接层密集块:由三个全连接层组成。 + +该架构在 :numref:`img_lenet` 中所展示。 ![LeNet中的数据流。输入是手写数字,输出为10种可能结果的概率。](../img/lenet.svg) :label:`img_lenet` -每个卷积块中的基本单元是一个卷积层、一个 sigmoid 激活函数和随后的平均池化层。请注意,虽然 ReLU 和最大池化层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用 $5\times 5$ 内核,这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有 6 个输出通道,而第二个卷积层有 16 个输出通道。每个 $2\times2$ 池操作(步骤2)通过空间下采样将维数减少 4 倍。卷积的输出形状由批大小、通道数、高度、宽度决定。 +每个卷积块中的基本单元是一个卷积层、一个 sigmoid 激活函数和平均池化层。请注意,虽然 ReLU 和最大池化层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用 $5\times 5$ 卷积核,这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有 6 个输出通道,而第二个卷积层有 16 个输出通道。每个 $2\times2$ 池操作(步骤2)通过空间下采样将维数减少 4 倍。卷积的输出形状由批量大小、通道数、高度、宽度决定。 为了将卷积块的输出传递给密集块,我们必须在小批量中展平每个示例。换言之,我们将这个四维输入转换成全连接层所期望的二维输入。这里的二维表示的第一个维度索引小批量中的示例,第二个维度给出每个示例的平面向量表示。LeNet 的密集块有三个全连接层,分别有 120、84 和 10 个输出。因为我们仍在执行分类,所以输出层的 10 维对应于最后输出结果的数量。 -通过下面的 Lenet 代码,您会相信用深度学习框架实现此类模型非常简单。我们只需要实例化一个 `Sequential` 块并将适当的层连接在一起。 +通过下面的 LeNet 代码,你会相信用深度学习框架实现此类模型非常简单。我们只需要实例化一个 `Sequential` 块并将适当的层连接在一起。 ```{.python .input} from d2l import mxnet as d2l @@ -45,8 +46,8 @@ net.add(nn.Conv2D(channels=6, kernel_size=5, padding=2, activation='sigmoid'), nn.AvgPool2D(pool_size=2, strides=2), nn.Conv2D(channels=16, kernel_size=5, activation='sigmoid'), nn.AvgPool2D(pool_size=2, strides=2), - # 默认情况下,“Dense” 会自动将形状为(批大小、通道数、高度、宽度)的输入, - # 转换为形状为(批大小、通道数*高度*宽度)的输入 + # 默认情况下,“Dense” 会自动将形状为(批量大小,通道数,高度,宽度)的输入, + # 转换为形状为(批量大小,通道数*高度*宽度)的输入 nn.Dense(120, activation='sigmoid'), nn.Dense(84, activation='sigmoid'), nn.Dense(10)) @@ -134,7 +135,7 @@ for layer in net().layers: ## 模型训练 -现在我们已经实现了 LeNet ,让我们看看这个模型在 MNIST 数据集上的表现。 +现在我们已经实现了 LeNet ,让我们看看这个模型在 Fashion-MNIST 数据集上的表现。 ```{.python .input} #@tab all @@ -142,12 +143,12 @@ batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size=batch_size) ``` -虽然卷积神经网络的参数较少,但与类似深度的全连接层相比,它们的计算成本仍然更高,因为每个参数都参与更多的乘法。 +虽然卷积神经网络的参数较少,但与深度的多层感知机相比,它们的计算成本仍然很高,因为每个参数都参与更多的乘法。 如果你有机会使用GPU,可以用它加快训练。 :begin_tab:`mxnet, pytorch` 为了进行评估,我们需要对 :numref:`sec_softmax_scratch` 中描述的 `evaluate_accuracy` 函数进行轻微的修改。 -由于完整的数据集位于主内存中,因此在模型使用 GPU 计算数据集之前,我们需要将其复制到 GPU 内存中。 +由于完整的数据集位于主内存中,因此在模型使用 GPU 计算数据集之前,我们需要将其复制到显存中。 :end_tab: ```{.python .input} @@ -315,7 +316,7 @@ def train_ch6(net_fn, train_iter, test_iter, num_epochs, lr, return net ``` -现在,我们训练和评估 Lenet-5 模型。 +现在,我们训练和评估 LeNet-5 模型。 ```{.python .input} #@tab all @@ -323,18 +324,18 @@ lr, num_epochs = 0.9, 10 train_ch6(net, train_iter, test_iter, num_epochs, lr) ``` -## 摘要 +## 小结 * 卷积神经网络(CNN)是一类使用卷积层的网络。 -* 我们将卷积层、非线性激活函数和池化层融会贯通于卷积神经网络中。 -* 在卷积神经网络中,通常对卷积层进行排列,逐渐降低其表示的空间分辨率,同时增加通道数。 -* 传统卷积神经网络由两部分组成:一系列卷积层以及全连接层密集块。 +* 在卷积神经网络中,我们组合使用卷积层、非线性激活函数和池化层。 +* 为了构造高性能的卷积神经网络,我们通常对卷积层进行排列,逐渐降低其表示的空间分辨率,同时增加通道数。 +* 在传统的卷积神经网络中,卷积块编码得到的表示在输出之前需由一个或多个全连接层进行处理。 * Lenet 是最早发布的卷积神经网络之一。 ## 练习 1. 将平均池化层替换为最大池化层,会发生什么? -1. 尝试构建一个基于 Lenet 的更复杂的网络,以提高其准确性。 +1. 尝试构建一个基于 LeNet 的更复杂的网络,以提高其准确性。 1. 调整卷积窗口大小。 1. 调整输出通道的数量。 1. 调整激活函数(如 RELU)。