本书首先从深度学习的原理出发,介绍如何把深度学习的理论转换为PyTorch代码,然后介绍如何在计算机上运行这些代码。作为一本面向初中级读者的技术类图书,本书在前面所述内容的基础上,还介绍了学术界前沿的一系列实例,以及PyTorch的源代码结构,以期读者能够融会贯通深度学习框架的设计和应用的思想。
张校捷,英伟达(NVIDIA)资深深度学习架构工程师,负责基于CUDA的深度学习框架的优化。目前主要使用的技术栈是作为深度学习框架后端的C/C++/CUDA,以及深度学习框架前端的Python,对主流的深度学习框架如PyTorch和TensorFlow比较熟悉,并精通其在计算机视觉(CV)和自然语言处理(NLP)方面的具体应用。作者多次作为专题演讲嘉宾,受邀参加CSDN主办的技术大会。
第1章 深度学习概念简介 1
1.1 深度学习的历史 1
1.1.1 深度学习的发展过程 1
1.1.2 深度学习在计算机视觉领域的发展 3
1.1.3 深度学习在自然语言处理和其他领域的发展 6
1.2 机器学习基本概念 7
1.2.1 机器学习的主要任务 8
1.2.2 机器模型的类型 9
1.2.3 损失函数以及模型的拟合 11
1.3 深度学习基本概念 14
1.3.1 向量、矩阵和张量及其运算 15
1.3.2 张量的存储 19
1.3.3 神经元的概念 19
1.4 输入数据的表示方式 20
1.4.1 图像数据的表示方式 20
1.4.2 文本数据的表示方式 22
1.4.3 音频数据的表示方式 23
1.5 线性变换和激活函数 26
1.5.1 全连接线性变换 26
1.5.2 卷积线性变换 28
1.5.3 激活函数 29
1.6 链式求导法则和反向传播 32
1.6.1 基于链式求导的梯度计算 32
1.6.2 激活函数的导数 34
1.6.3 数值梯度 36
1.7 损失函数和优化器 37
1.7.1 常用的损失函数 37
1.7.2 基于梯度的优化器 38
1.7.3 学习率衰减和权重衰减 42
1.8 本章总结 43
第2章 PyTorch深度学习框架简介 44
2.1 深度学习框架简介 44
2.1.1 深度学习框架中的张量 44
2.1.2 深度学习框架中的计算图 45
2.1.3 深度学习框架中的自动求导和反向传播 46
2.2 PyTorch框架历史和特性更迭 47
2.3 PyTorch的安装过程 49
2.4 PyTorch包的结构 52
2.4.1 PyTorch的主要模块 52
2.4.2 PyTorch的辅助工具模块 57
2.5 PyTorch中张量的创建和维度的操作 59
2.5.1 张量的数据类型 59
2.5.2 张量的创建方式 61
2.5.3 张量的存储设备 65
2.5.4 和张量维度相关的方法 66
2.5.5 张量的索引和切片 69
2.6 PyTorch中张量的运算 70
2.6.1 涉及单个张量的函数运算 70
2.6.2 涉及多个张量的函数运算 72
2.6.3 张量的极值和排序 73
2.6.4 矩阵的乘法和张量的缩并 75
2.6.5 张量的拼接和分割 77
2.6.6 张量维度的扩增和压缩 79
2.6.7 张量的广播 80
2.7 PyTorch中的模块简介 82
2.7.1 PyTorch中的模块类 82
2.7.2 基于模块类的简单线性回归类 82
2.7.3 线性回归类的实例化和方法调用 84
2.8 PyTorch的计算图和自动求导机制 87
2.8.1 自动求导机制简介 87
2.8.2 自动求导机制实例 88
2.8.3 梯度函数的使用 89
2.8.4 计算图生成的控制 89
2.9 PyTorch的损失函数和优化器 90
2.9.1 损失函数 90
2.9.2 优化器 92
2.10 PyTorch中数据的输入和预处理 96
2.10.1 数据载入类 96
2.10.2 映射类型的数据集 97
2.10.3 torchvision工具包的使用 97
2.10.4 可迭代类型的数据集 100
2.11 PyTorch模型的保存和加载 101
2.11.1 模块和张量的序列化及反序列化 101
2.11.2 模块状态字典的保存和载入 104
2.12 PyTorch数据的可视化 105
2.12.1 TensorBoard的安装和使用 105
2.12.2 TensorBoard常用的可视化数据类型 108
2.13 PyTorch模型的并行化 110
2.13.1 PyTorch的数据并行化 111
2.13.1 PyTorch的分布式数据并行化 112
2.14 本章总结 116
第3章 PyTorch计算机视觉模块 119
3.1 计算机视觉基本概念 119
3.1.1 计算机视觉任务简介 119
3.1.2 基础图像变换操作 120
3.1.3 图像特征提取 123
3.1.4 滤波器的概念 125
3.2 线性层 126
3.3 卷积层 128
3.4 归一化层 137
3.5 池化层 144
3.6 丢弃层 149
3.7 模块的组合 151
3.8 特征提取 153
3.9 模型初始化 157
3.10 常见模型结构 160
3.10.1 InceptionNet的结构 161
3.10.2 ResNet的结构 164
3.11 本章总结 167
第4章 PyTorch机器视觉案例 169
4.1 常见计算机视觉任务和数据集 169
4.1.1 图像分类任务简介 169
4.1.2 目标检测任务简介 170
4.1.3 图像分割任务简介 171
4.1.4 图像生成任务简介 172
4.1.5 常用深度学习公开数据集 173
4.2 手写数字识别:LeNet 176
4.2.1 深度学习工程的结构 176
4.2.2 MNIST数据集的准备 177
4.2.3 LeNet网络的搭建 179
4.2.4 LeNet网络的训练和测试 182
4.2.5 超参数的修改和argparse库的使用 185
4.3 图像分类:ResNet和InceptionNet 187
4.3.1 ImageNet数据集的使用 187
4.3.2 ResNet网络的搭建 189
4.3.3 InceptionNet网络的搭建 194
4.4 目标检测:SSD 204
4.4.1 SSD的骨架网络结构 204
4.4.2 SSD的特征提取网络结构 205
4.4.3 锚点框和选框预测 210
4.4.4 输入数据的预处理 214
4.4.5 损失函数的计算 216
4.4.6 模型的预测和非极大抑制算法 218
4.5 图像分割:FCN和U-Net 219
4.5.1 FCN网络结构 220
4.5.2 U-Net网络结构 225
4.6 图像风格迁移 229
4.6.1 图像风格迁移算法介绍 229
4.6.2 输入图像的特征提取 231
4.6.3 输入图像的优化 234
4.7 生成模型:VAE和GAN 236
4.7.1 变分自编码器介绍 237
4.7.2 变分自编码器的实现 239
4.7.3 生成对抗网络介绍 242
4.7.4 生成对抗网络的实现 244
4.8 本章总结 249
第5章 PyTorch自然语言处理模块 251
5.1 自然语言处理基本概念 251
5.1.1 机器翻译相关的自然语言处理研究 251
5.1.2 其他领域的自然语言处理研究 253
5.1.3 自然语言处理中特征提取的预处理 254
5.1.4 自然语言处理中词频特征的计算方法 256
5.1.5 自然语言处理中TF-IDF特征的计算方法 258
5.2 词嵌入层 261
5.3 循环神经网络层:GRU和LSTM 267
5.3.1 简单循环神经网络 267
5.3.2 长短时记忆网络(LSTM) 269
5.3.3 门控循环单元(GRU) 272
5.4 注意力机制 280
5.5 自注意力机制 284
5.5.1 循环神经网络的问题 284
5.5.2 自注意力机制的基础结构 285
5.5.3 使用自注意力机制来构建Seq2Seq模型 288
5.5.4 PyTorch中自注意力机制的模块 290
5.5.5 Pytorch中的Transformer模块 292
5.6 本章总结 293
第6章 PyTorch自然语言处理案例 295
6.1 word2vec算法训练词向量 295
6.1.1 单词表的创建 295
6.1.2 word2vec算法的实现 299
6.1.3 word2vec算法的特性 301
6.2 基于循环神经网络的情感分析 302
6.3 基于循环神经网络的语言模型 305
6.3.1 语言模型简介 305
6.3.2 语言模型的代码 308
6.4 Seq2Seq模型及其应用 311
6.4.1 Seq2Seq模型的结构 311
6.4.2 Seq2Seq模型编码器的代码 312
6.4.3 Seq2Seq模型注意力机制的代码 315
6.4.4 Seq2Seq模型解码器的代码 317
6.5 BERT模型及其应用 321
6.5.1 BERT模型的结构 321
6.5.2 BERT模型的训练方法 325
6.5.3 BERT模型的微调 327
6.6 本章总结 329
第7章 其他重要模型 330
7.1 基于宽深模型的推荐系统 330
7.1.1 推荐系统介绍 330
7.1.2 宽深模型介绍 331
7.2 DeepSpeech模型和CTC损失函数 335
7.2.1 语音识别模型介绍 335
7.2.2 CTC损失函数 337
7.3 使用Tacotron和WaveNet进行语音合成 342
7.3.1 Tacotron模型中基于Seq2Seq的梅尔过滤器特征合成 343
7.3.2 Tacotron模型的代码 344
7.3.3 WaveNet模型介绍 352
7.3.4 因果卷积模块介绍 355
7.3.5 因果卷积模块的代码 357
7.3.6 WaveNet模型的代码 358
7.4 基于DQN的强化学习算法 360
7.4.1 强化学习的基础概念 361
7.4.2 强化学习的环境 362
7.4.3 DQN模型的原理 363
7.4.4 DQN模型及其训练过程 365
7.5 使用半精度浮点数训练模型 369
7.5.1 半精度浮点数的介绍 370
7.5.2 半精度模型的训练 371
7.5.3 apex扩展包的使用 372
7.6 本章总结 373
第8章 PyTorch高级应用 375
8.1 PyTorch自定义激活函数和梯度 375
8.2 在PyTorch中编写扩展 377
8.3 正向传播和反向传播的钩子 385
8.4 PyTorch的静态计算图 388
8.5 静态计算图模型的保存和使用 393
8.6 本章总结 396
第9章 PyTorch源代码解析 397
9.1 ATen张量计算库简介 397
9.2 C++的Python接口 400
9.3 csrc模块简介 404
9.4 autograd和自动求导机制 407
9.5 C10张量计算库简介 408
9.6 本章总结 409
参考文献 410