Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Laurence001
d2l-zh
提交
73b7a4e8
D
d2l-zh
项目概览
Laurence001
/
d2l-zh
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
73b7a4e8
编写于
12月 28, 2020
作者:
R
Rachel Hu
提交者:
Aston Zhang
2月 17, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2nd polished
上级
a6ba8d3e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
24 deletion
+25
-24
chapter_convolutional-neural-networks/lenet.md
chapter_convolutional-neural-networks/lenet.md
+25
-24
未找到文件。
chapter_convolutional-neural-networks/lenet.md
浏览文件 @
73b7a4e8
# 卷积神经网络之Le
n
et
# 卷积神经网络之Le
N
et
:label:
`sec_lenet`
通过之前几节
的学习,我们解析了构建一个完整的卷积神经网络所需成分
。
回顾之前我们将 softmax 回归模型(:numref:
`sec_softmax_scratch`
)和全连接层模型(:numref:
`sec_mlp_scratch`
)应用于
时装
MNIST 数据集中的服装图片。
为
此
,我们首先将每个大小为 $28
\t
imes28$ 的图像展平为一个 784 固定长度的一维向量,然后用全连接层对其进行处理。
通过之前几节
,我们学习了构建一个完整卷积神经网络的所需组件。
。
回顾之前我们将 softmax 回归模型(:numref:
`sec_softmax_scratch`
)和全连接层模型(:numref:
`sec_mlp_scratch`
)应用于
Fashion-
MNIST 数据集中的服装图片。
为
了能够应用 softmax 回归和多层感知机
,我们首先将每个大小为 $28
\t
imes28$ 的图像展平为一个 784 固定长度的一维向量,然后用全连接层对其进行处理。
而现在,我们已经掌握了卷积层的处理方法,我们可以在图像中保留空间结构。
同时,用卷积层代替全连接层的另一个好处是
前者的更简洁模型需要更少参数的
。
同时,用卷积层代替全连接层的另一个好处是
:更简洁的模型所需的参数更少
。
在本节中,我们将介绍 LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的性能而受到广泛关注。
在本节中,我们将介绍 LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的
高效
性能而受到广泛关注。
这个模型是由 AT&T 贝尔实验室的研究员 Yann LeCun 在1989年提出的(并以其命名),目的是识别图像 :cite:
`LeCun.Bottou.Bengio.ea.1998`
中的手写数字。
当时,Yann LeCun 发表了第一篇通过反向传播成功训练卷积神经网络的研究,这项工作代表了十多年来神经网络研究开发的成果。
...
...
@@ -18,21 +18,22 @@ LeNet 被广泛用于自动取款机(ATM)机中,帮助识别处理支票
## Le
n
et
## Le
N
et
总体来看,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
\t
imes 5$ 内核,这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有 6 个输出通道,而第二个卷积层有 16 个输出通道。每个 $2
\t
imes2$ 池操作(步骤2)通过空间下采样将维数减少 4 倍。卷积的输出形状由批
大小、通道数、高度、宽度决定。
每个卷积块中的基本单元是一个卷积层、一个 sigmoid 激活函数和
平均池化层。请注意,虽然 ReLU 和最大池化层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用 $5
\t
imes 5$ 卷积核,这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有 6 个输出通道,而第二个卷积层有 16 个输出通道。每个 $2
\t
imes2$ 池操作(步骤2)通过空间下采样将维数减少 4 倍。卷积的输出形状由批量
大小、通道数、高度、宽度决定。
为了将卷积块的输出传递给密集块,我们必须在小批量中展平每个示例。换言之,我们将这个四维输入转换成全连接层所期望的二维输入。这里的二维表示的第一个维度索引小批量中的示例,第二个维度给出每个示例的平面向量表示。LeNet 的密集块有三个全连接层,分别有 120、84 和 10 个输出。因为我们仍在执行分类,所以输出层的 10 维对应于最后输出结果的数量。
通过下面的 Le
net 代码,您
会相信用深度学习框架实现此类模型非常简单。我们只需要实例化一个
`Sequential`
块并将适当的层连接在一起。
通过下面的 Le
Net 代码,你
会相信用深度学习框架实现此类模型非常简单。我们只需要实例化一个
`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
```
现在,我们训练和评估 Le
n
et-5 模型。
现在,我们训练和评估 Le
N
et-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.
尝试构建一个基于 Le
n
et 的更复杂的网络,以提高其准确性。
1.
尝试构建一个基于 Le
N
et 的更复杂的网络,以提高其准确性。
1.
调整卷积窗口大小。
1.
调整输出通道的数量。
1.
调整激活函数(如 RELU)。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录