《动手学深度学习》是由人民邮电出版社有限公司出版的一本关于深度学习方面的书籍,作者是阿斯顿·张,李沐,扎卡里&,主要介绍了关于深度学习、云服务方面的知识内容,目前在深度学习类书籍综合评分为:9.8分。
书籍介绍
现在市面上相关深度学习详细介绍的书藉大多数分为两大类,一类偏重于方式介绍,另一类偏重于实践活动和深度学习专用工具的详细介绍。这书另外遮盖方式 和实践活动。这书不但从数学课的视角论述深度学习的技术性与运用,还包括可运行的编码,为读者展现怎样在实际上中解决困难。以便给读者提供一种互动式的学习感受,这书不仅提供完全免费的视频教学和讨论区,并且提供可运行的Jupyter记事本文件,灵活运用Jupyter文本文档能将文本、编码、公式计算和图象统一起來的优点。那样不但立即将数学公式相匹配成实际上编码,并且能够改动编码、观查結果并立即获得工作经验,进而带来读者全新升级的、互动式的深度学习的学习感受。 这书朝向期待掌握深度学习,非常是对实际上应用深度学习很感兴趣的在校大学生、技术工程师和科学研究工作人员。这书不规定读者有一切深度学习或是设备学习的背景图专业知识,读者只需具有基础的数学课和编写程序专业知识,如基本的线性代数、微分、几率及Python编写程序专业知识。这书的附则中提供了书中涉及到的关键数学知识,供读者参照。 这书的英文版Dive into Deep Learning是加州大学伯克利分校2019年春学年“Introduction to Deep Learning”(深度学习导论)课程内容的教材内容。截止2019年春学年,这书中的內容已被全世界15 所著名高校用以课堂教学。这书的学习小区、完全免费教育资源(教学课件、视频教学、大量练习题等),及其用以这书学习和课堂教学的完全免费计算资源(只限学生和老师)的申请办理方式 在这书配套设施网址zh.d2l.ai上公布。读者在阅读文章这书的全过程中,假如对书中某节內容有疑虑,还可以扫一扫书中相匹配的二维码求助。这书致力于向读者交货相关深度学习的互动式学习感受。书中不但论述深度学习的优化算法基本原理,还演试他们的保持和运行。与传统式书籍不一样,这书的每一节全是一个能够免费下载并运行的 Jupyter文本文档,它将文本、公式计算、图象、编码和运行結果融合在了一起。除此之外,读者可以浏览并参加书中內容的探讨。 本书的內容分成3个一部分:*一部分详细介绍深度学习的背景图,提供准备专业知识,并包含深度学习*基本的定义和技术性;第二一部分叙述深度学习测算的关键构成,还表述近些年令深度学习在好几个行业大获取得成功的卷积神经网络和循环系统神经元网络;第三一部分点评优化计算方法,检测危害深度学习测算特性的关键要素,并各自例举深度学习在计算机视觉和自然语言理解中的关键运用。 这书另外遮盖深度学习的方式 和实践活动,关键朝向在校学生、专业技术人员和科学研究工作人员。阅读文章这书必须读者掌握基础的Python编写程序或附则中叙述的线性代数、微分和几率基本。
目录
- 对本书的赞誉
- 前言
- 如何使用本书
- 资源与支持
- 主要符号表
- 第 1 章 深度学习简介 1
- 1.1 起源 2
- 1.2 发展 4
- 1.3 成功案例 6
- 1.4 特点 7
- 小结 8
- 练习 8
- 第 2 章 预备知识 9
- 2.1 获取和运行本书的代码 9
- 2.1.1 获取代码并安装运行环境 9
- 2.1.2 更新代码和运行环境 11
- 2.1.3 使用GPU版的MXNet 11
- 小结12
- 练习12
- 2.2 数据操作 12
- 2.2.1 创建NDArray 12
- 2.2.2 运算 14
- 2.2.3 广播机制 16
- 2.2.4 索引 17
- 2.2.5 运算的内存开销 17
- 2.2.6 NDArray和NumPy相互变换18
- 小结19
- 练习19
- 2.3 自动求梯度 19
- 2.3.1 简单例子 19
- 2.3.2 训练模式和预测模式 20
- 2.3.3 对Python控制流求梯度 20
- 小结21
- 练习21
- 2.4 查阅文档 21
- 2.4.1 查找模块里的所有函数和类 21
- 2.4.2 查找特定函数和类的使用 22
- 2.4.3 在MXNet网站上查阅 23
- 小结 24
- 练习 24
- 第3 章 深度学习基础 25
- 3.1 线性回归 25
- 3.1.1 线性回归的基本要素 25
- 3.1.2 线性回归的表示方法 28
- 小结 30
- 练习 30
- 3.2 线性回归的从零开始实现 30
- 3.2.1 生成数据集 30
- 3.2.2 读取数据集 32
- 3.2.3 初始化模型参数 32
- 3.2.4 定义模型 33
- 3.2.5 定义损失函数 33
- 3.2.6 定义优化算法 33
- 3.2.7 训练模型 33
- 小结 34
- 练习 34
- 3.3 线性回归的简洁实现 35
- 3.3.1 生成数据集 35
- 3.3.2 读取数据集 35
- 3.3.3 定义模型 36
- 3.3.4 初始化模型参数 36
- 3.3.5 定义损失函数 37
- 3.3.6 定义优化算法 37
- 3.3.7 训练模型 37
- 小结 38
- 练习 38
- 3.4 softmax回归 38
- 3.4.1 分类问题 38
- 3.4.2 softmax回归模型 39
- 3.4.3 单样本分类的矢量计算表达式 40
- 3.4.4 小批量样本分类的矢量计算表达式 40
- 3.4.5 交叉熵损失函数 41
- 3.4.6 模型预测及评价 42
- 小结 42
- 练习 42
- 3.5 图像分类数据集(Fashion-MNIST) 42
- 3.5.1 获取数据集 42
- 3.5.2 读取小批量 44
- 小结 45
- 练习 45
- 3.6 softmax回归的从零开始实现 45
- 3.6.1 读取数据集 45
- 3.6.2 初始化模型参数 45
- 3.6.3 实现softmax运算 46
- 3.6.4 定义模型 46
- 3.6.5 定义损失函数 47
- 3.6.6 计算分类准确率 47
- 3.6.7 训练模型 48
- 3.6.8 预测 48
- 小结 49
- 练习 49
- 3.7 softmax回归的简洁实现 49
- 3.7.1 读取数据集 49
- 3.7.2 定义和初始化模型 50
- 3.7.3 softmax和交叉熵损失函数 50
- 3.7.4 定义优化算法 50
- 3.7.5 训练模型 50
- 小结 50
- 练习 50
- 3.8 多层感知机 51
- 3.8.1 隐藏层 51
- 3.8.2 激活函数 52
- 3.8.3 多层感知机 55
- 小结 55
- 练习 55
- 3.9 多层感知机的从零开始实现 56
- 3.9.1 读取数据集 56
- 3.9.2 定义模型参数 56
- 3.9.3 定义激活函数 56
- 3.9.4 定义模型 56
- 3.9.5 定义损失函数 57
- 3.9.6 训练模型 57
- 小结 57
- 练习 57
- 3.10 多层感知机的简洁实现 57
- 3.10.1 定义模型 58
- 3.10.2 训练模型 58
- 小结 58
- 练习 58
- 3.11 模型选择、欠拟合和过拟合 58
- 3.11.1 训练误差和泛化误差 59
- 3.11.2 模型选择 59
- 3.11.3 欠拟合和过拟合 60
- 3.11.4 多项式函数拟合实验 61
- 小结 65
- 练习 65
- 3.12 权重衰减 65
- 3.12.1 方法 65
- 3.12.2 高维线性回归实验 66
- 3.12.3 从零开始实现 66
- 3.12.4 简洁实现 68
- 小结 70
- 练习 70
- 3.13 丢弃法 70
- 3.13.1 方法 70
- 3.13.2 从零开始实现 71
- 3.13.3 简洁实现 73
- 小结 74
- 练习 74
- 3.14 正向传播、反向传播和计算图 74
- 3.14.1 正向传播 74
- 3.14.2 正向传播的计算图 75
- 3.14.3 反向传播 75
- 3.14.4 训练深度学习模型 76
- 小结 77
- 练习 77
- 3.15 数值稳定性和模型初始化 77
- 3.15.1 衰减和爆炸 77
- 3.15.2 随机初始化模型参数 78
- 小结 78
- 练习 79
- 3.16 实战Kaggle比赛:房价预测 79
- 3.16.1 Kaggle比赛 79
- 3.16.2 读取数据集 80
- 3.16.3 预处理数据集 81
- 3.16.4 训练模型 82
- 3.16.5 k 折交叉验证 82
- 3.16.6 模型选择 83
- 3.16.7 预测并在Kaggle提交结果 84
- 小结 85
- 练习 85
- 第4 章 深度学习计算 86
- 4.1 模型构造 86
- 4.1.1 继承Block类来构造模型 86
- 4.1.2 Sequential类继承自Block类 87
- 4.1.3 构造复杂的模型 88
- 小结 89
- 练习 90
- 4.2 模型参数的访问、初始化和共享 90
- 4.2.1 访问模型参数 90
- 4.2.2 初始化模型参数 92
- 4.2.3 自定义初始化方法 93
- 4.2.4 共享模型参数 94
- 小结 94
- 练习 94
- 4.3 模型参数的延后初始化 95
- 4.3.1 延后初始化 95
- 4.3.2 避免延后初始化 96
- 小结 96
- 练习 97
- 4.4 自定义层 97
- 4.4.1 不含模型参数的自定义层 97
- 4.4.2 含模型参数的自定义层 98
- 小结 99
- 练习 99
- 4.5 读取和存储 99
- 4.5.1 读写NDArray 99
- 4.5.2 读写Gluon模型的参数 100
- 小结 101
- 练习 101
- 4.6 GPU计算 101
- 4.6.1 计算设备 102
- 4.6.2 NDArray的GPU计算 102
- 4.6.3 Gluon的GPU计算 104
- 小结 105
- 练习 105
- 第5 章 卷积神经网络 106
- 5.1 二维卷积层 106
- 5.1.1 二维互相关运算 106
- 5.1.2 二维卷积层 107
- 5.1.3 图像中物体边缘检测 108
- 5.1.4 通过数据学习核数组 109
- 5.1.5 互相关运算和卷积运算 109
- 5.1.6 特征图和感受野 110
- 小结 110
- 练习 110
- 5.2 填充和步幅 111
- 5.2.1 填充 111
- 5.2.2 步幅 112
- 小结 113
- 练习 113
- 5.3 多输入通道和多输出通道 114
- 5.3.1 多输入通道 114
- 5.3.2 多输出通道 115
- 5.3.3 1×1卷积层 116
- 小结 117
- 练习 117
- 5.4 池化层 117
- 5.4.1 二维最大池化层和平均池化层 117
- 5.4.2 填充和步幅 119
- 5.4.3 多通道 120
- 小结 120
- 练习 121
- 5.5 卷积神经网络(LeNet) 121
- 5.5.1 LeNet模型 121
- 5.5.2 训练模型 122
- 小结 124
- 练习 124
- 5.6 深度卷积神经网络(AlexNet) 124
- 5.6.1 学习特征表示 125
- 5.6.2 AlexNet 126
- 5.6.3 读取数据集 127
- 5.6.4 训练模型 128
- 小结 128
- 练习 129
- 5.7 使用重复元素的网络(VGG) 129
- 5.7.1 VGG块 129
- 5.7.2 VGG网络 129
- 5.7.3 训练模型 130
- 小结 131
- 练习 131
- 5.8 网络中的网络(NiN) 131
- 5.8.1 NiN块 131
- 5.8.2 NiN模型 132
- 5.8.3 训练模型 133
- 小结 134
- 练习 134
- 5.9 含并行连结的网络(GoogLeNet) 134
- 5.9.1 Inception块 134
- 5.9.2 GoogLeNet模型 135
- 5.9.3 训练模型 137
- 小结 137
- 练习 137
- 5.10 批量归一化 138
- 5.10.1 批量归一化层 138
- 5.10.2 从零开始实现 139
- 5.10.3 使用批量归一化层的LeNet 140
- 5.10.4 简洁实现 141
- 小结 142
- 练习 142
- 5.11 残差网络(ResNet) 143
- 5.11.1 残差块 143
- 5.11.2 ResNet模型 145
- 5.11.3 训练模型 146
- 小结 146
- 练习 146
- 5.12 稠密连接网络(DenseNet) 147
- 5.12.1 稠密块 147
- 5.12.2 过渡层 148
- 5.12.3 DenseNet模型 148
- 5.12.4 训练模型 149
- 小结 149
- 练习 149
- 第6 章 循环神经网络 150
- 6.1 语言模型 150
- 6.1.1 语言模型的计算 151
- 6.1.2 n 元语法 151
- 小结 152
- 练习 152
- 6.2 循环神经网络 152
- 6.2.1 不含隐藏状态的神经网络 152
- 6.2.2 含隐藏状态的循环神经网络 152
- 6.2.3 应用:基于字符级循环神经网络的语言模型 154
- 小结 155
- 练习 155
- 6.3 语言模型数据集(歌词) 155
- 6.3.1 读取数据集 155
- 6.3.2 建立字符索引 156
- 6.3.3 时序数据的采样 156
- 小结 158
- 练习 159
- 6.4 循环神经网络的从零开始实现 159
- 6.4.1 one-hot向量 159
- 6.4.2 初始化模型参数 160
- 6.4.3 定义模型 160
- 6.4.4 定义预测函数 161
- 6.4.5 裁剪梯度 161
- 6.4.6 困惑度 162
- 6.4.7 定义模型训练函数 162
- 6.4.8 训练模型并创作歌词 163
- 小结 164
- 练习 164
- 6.5 循环神经网络的简洁实现 165
- 6.5.1 定义模型 165
- 6.5.2 训练模型 166
- 小结 168
- 练习 168
- 6.6 通过时间反向传播 168
- 6.6.1 定义模型 168
- 6.6.2 模型计算图 169
- 6.6.3 方法 169
- 小结 170
- 练习 170
- 6.7 门控循环单元(GRU) 170
- 6.7.1 门控循环单元 171
- 6.7.2 读取数据集 173
- 6.7.3 从零开始实现 173
- 6.7.4 简洁实现 175
- 小结 176
- 练习 176
- 6.8 长短期记忆(LSTM) 176
- 6.8.1 长短期记忆 176
- 6.8.2 读取数据集 179
- 6.8.3 从零开始实现 179
- 6.8.4 简洁实现 181
- 小结 181
- 练习 182
- 6.9 深度循环神经网络 182
- 小结 183
- 练习 183
- 6.10 双向循环神经网络 183
- 小结 184
- 练习 184
- 第7 章 优化算法 185
- 7.1 优化与深度学习 185
- 7.1.1 优化与深度学习的关系 185
- 7.1.2 优化在深度学习中的挑战 186
- 小结 188
- 练习 189
- 7.2 梯度下降和随机梯度下降 189
- 7.2.1 一维梯度下降 189
- 7.2.2 学习率 190
- 7.2.3 多维梯度下降 191
- 7.2.4 随机梯度下降 193
- 小结 194
- 练习 194
- 7.3 小批量随机梯度下降 194
- 7.3.1 读取数据集 195
- 7.3.2 从零开始实现 196
- 7.3.3 简洁实现 198
- 小结 199
- 练习 199
- 7.4 动量法 200
- 7.4.1 梯度下降的问题 200
- 7.4.2 动量法 201
- ·6· 目 录
- 7.4.3 从零开始实现 203
- 7.4.4 简洁实现 205
- 小结 205
- 练习 205
- 7.5 AdaGrad算法206
- 7.5.1 算法 206
- 7.5.2 特点 206
- 7.5.3 从零开始实现 208
- 7.5.4 简洁实现 209
- 小结 209
- 练习 209
- 7.6 RMSProp算法 209
- 7.6.1 算法 210
- 7.6.2 从零开始实现 211
- 7.6.3 简洁实现 212
- 小结 212
- 练习 212
- 7.7 AdaDelta算法 212
- 7.7.1 算法 212
- 7.7.2 从零开始实现 213
- 7.7.3 简洁实现 214
- 小结 214
- 练习 214
- 7.8 Adam算法 215
- 7.8.1 算法 215
- 7.8.2 从零开始实现 216
- 7.8.3 简洁实现 216
- 小结 217
- 练习 217
- 第8 章 计算性能 218
- 8.1 命令式和符号式混合编程 218
- 8.1.1 混合式编程取两者之长 220
- 8.1.2 使用HybridSequential类构造模型 220
- 8.1.3 使用HybridBlock类构造模型 222
- 小结 224
- 练习 224
- 8.2 异步计算 224
- 8.2.1 MXNet中的异步计算 224
- 8.2.2 用同步函数让前端等待计算结果 226
- 8.2.3 使用异步计算提升计算性能 226
- 8.2.4 异步计算对内存的影响 227
- 小结 229
- 练习 229
- 8.3 自动并行计算 229
- 8.3.1 CPU和GPU的并行计算 230
- 8.3.2 计算和通信的并行计算 231
- 小结 231
- 练习 231
- 8.4 多GPU计算 232
- 8.4.1 数据并行 232
- 8.4.2 定义模型 233
- 8.4.3 多GPU之间同步数据 234
- 8.4.4 单个小批量上的多GPU训练 236
- 8.4.5 定义训练函数 236
- 8.4.6 多GPU训练实验 237
- 小结 237
- 练习 237
- 8.5 多GPU计算的简洁实现 237
- 8.5.1 多GPU上初始化模型参数 238
- 8.5.2 多GPU训练模型 239
- 小结 241
- 练习 241
- 第9 章 计算机视觉 242
- 9.1 图像增广242
- 9.1.1 常用的图像增广方法 243
- 9.1.2 使用图像增广训练模型 246
- 小结 250
- 练习 250
- 9.2 微调 250
- 热狗识别 251
- 小结 255
- 练习 255
- 目 录 ·7·
- 9.3 目标检测和边界框 255
- 边界框 256
- 小结 257
- 练习 257
- 9.4 锚框 257
- 9.4.1 生成多个锚框 257
- 9.4.2 交并比 259
- 9.4.3 标注训练集的锚框 260
- 9.4.4 输出预测边界框 263
- 小结 265
- 练习 265
- 9.5 多尺度目标检测 265
- 小结 268
- 练习 268
- 9.6 目标检测数据集(皮卡丘) 268
- 9.6.1 获取数据集 269
- 9.6.2 读取数据集 269
- 9.6.3 图示数据 270
- 小结 270
- 练习 271
- 9.7 单发多框检测(SSD) 271
- 9.7.1 定义模型 271
- 9.7.2 训练模型 275
- 9.7.3 预测目标 277
- 小结 278
- 练习 278
- 9.8 区域卷积神经网络(R-CNN)系列280
- 9.8.1 R-CNN 280
- 9.8.2 Fast R-CNN 281
- 9.8.3 Faster R-CNN 283
- 9.8.4 Mask R-CNN 284
- 小结 285
- 练习 285
- 9.9 语义分割和数据集 285
- 9.9.1 图像分割和实例分割 285
- 9.9.2 Pascal VOC2012语义分割数据集 286
- 小结 290
- 练习 290
- 9.10 全卷积网络(FCN) 290
- 9.10.1 转置卷积层 291
- 9.10.2 构造模型 292
- 9.10.3 初始化转置卷积层 294
- 9.10.4 读取数据集 295
- 9.10.5 训练模型 296
- 9.10.6 预测像素类别 296
- 小结 297
- 练习 297
- 9.11 样式迁移 298
- 9.11.1 方法 298
- 9.11.2 读取内容图像和样式图像 299
- 9.11.3 预处理和后处理图像 300
- 9.11.4 抽取特征 301
- 9.11.5 定义损失函数 302
- 9.11.6 创建和初始化合成图像 303
- 9.11.7 训练模型 304
- 小结 306
- 练习 306
- 9.12 实战Kaggle比赛:图像
- 分类(CIFAR-10)306
- 9.12.1 获取和整理数据集 307
- 9.12.2 图像增广 310
- 9.12.3 读取数据集 310
- 9.12.4 定义模型 311
- 9.12.5 定义训练函数 312
- 9.12.6 训练模型 312
- 9.12.7 对测试集分类并在Kaggle
- 提交结果 313
- 小结 313
- 练习 313
- 9.13 实战Kaggle比赛:狗的品种
- 识别(ImageNet Dogs) 314
- 9.13.1 获取和整理数据集 315
- 9.13.2 图像增广 316
- 9.13.3 读取数据集 317
- 9.13.4 定义模型 318
- 9.13.5 定义训练函数 318
- 9.13.6 训练模型 319
- ·8· 目 录
- 9.13.7 对测试集分类并在Kaggle提交结果 319
- 小结 320
- 练习 320
- 第 10 章 自然语言处理 321
- 10.1 词嵌入(word2vec) 321
- 10.1.1 为何不采用one-hot向量 321
- 10.1.2 跳字模型 322
- 10.1.3 连续词袋模型 323
- 小结 325
- 练习 325
- 10.2 近似训练325
- 10.2.1 负采样 325
- 10.2.2 层序softmax 326
- 小结 327
- 练习 328
- 10.3 word2vec的实现328
- 10.3.1 预处理数据集 328
- 10.3.2 负采样 331
- 10.3.3 读取数据集 331
- 10.3.4 跳字模型 332
- 10.3.5 训练模型 333
- 10.3.6 应用词嵌入模型 335
- 小结 336
- 练习 336
- 10.4 子词嵌入(fastText) 336
- 小结 337
- 练习 337
- 10.5 全局向量的词嵌入(GloVe)337
- 10.5.1 GloVe模型 338
- 10.5.2 从条件概率比值理解GloVe模型 339
- 小结 340
- 练习 340
- 10.6 求近义词和类比词340
- 10.6.1 使用预训练的词向量 340
- 10.6.2 应用预训练词向量 341
- 小结 343
- 练习 343
- 10.7 文本情感分类:使用循环神经网络 343
- 10.7.1 文本情感分类数据集 343
- 10.7.2 使用循环神经网络的模型 345
- 小结 347
- 练习 347
- 10.8 文本情感分类:使用卷积神经网络(textCNN) 347
- 10.8.1 一维卷积层 348
- 10.8.2 时序最大池化层 349
- 10.8.3 读取和预处理IMDb数据集 350
- 10.8.4 textCNN模型 350
- 小结 353
- 练习 353
- 10.9 编码器-解码器(seq2seq)353
- 10.9.1 编码器 354
- 10.9.2 解码器 354
- 10.9.3 训练模型 355
- 小结 355
- 练习 355
- 10.10 束搜索 355
- 10.10.1 贪婪搜索 356
- 10.10.2 穷举搜索 357
- 10.10.3 束搜索 357
- 小结 358
- 练习 358
- 10.11 注意力机制 358
- 10.11.1 计算背景变量 359
- 10.11.2 更新隐藏状态 360
- 10.11.3 发展 361
- 小结 361
- 练习 361
- 10.12 机器翻译 361
- 10.12.1 读取和预处理数据集 361
- 10.12.2 含注意力机制的编码器-解码器 363
- 10.12.3 训练模型 365
- 10.12.4 预测不定长的序列 367
- 10.12.5 评价翻译结果 367
- 小结 369
- 练习 369
- 附录A 数学基础 370
- 附录B 使用 Jupyter 记事本 376
- 附录C 使用 AWS 运行代码 381
- 附录D GPU 购买指南 388
- 附录E 如何为本书做贡献 391
- 附录F d2lzh 包索引 395
- 附录G 中英文术语对照表 397
- 参考文献 402
- 索引 407