猜你喜欢
深入浅出PyTorch――从模型到源码

深入浅出PyTorch――从模型到源码

书籍作者:张校捷 ISBN:9787121386411
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:1894
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书从机器学习和深度学习的基础概念入手,由浅到深地详细介绍了PyTorch深度学习框架的知识,主要包含深度学习的基础知识,如神经网络的优化算法、神经网络的模块等;同时也包含了深度学习的进阶知识,如使用 PyTorch 构建复杂的深度学习模型,以及前沿的深度学习模型的介绍等。另外,为了加深读者对 PyTorch 深度学习框架的理解和掌握,本书还介绍了 PyTorch 的源代码结构,包括该框架的 Python语言前端和 C++语言后端的源代码结构。

作为一本面向初中级读者的技术类图书,本书既可以作为深度学习框架 PyTorch 入门的参考书籍,也可以作为 PyTorch 深度学习框架的结构和源代码的阅读指南使用。


作者简介

张校捷,英伟达(NVIDIA)资深深度学习架构工程师,负责基于CUDA的深度学习框架的优化。目前主要使用的技术栈是作为深度学习框架后端的C/C++/CUDA,以及深度学习框架前端的Python,对主流的深度学习框架如PyTorch和TensorFlow比较熟悉,并精通其在计算机视觉(CV)和自然语言处理(NLP)方面的具体应用。作者多次作为专题演讲嘉宾,受邀参加CSDN主办的技术大会。

编辑推荐
适读人群 :深度学习框架PyTorch入门者、任何对深度学习感兴趣的人。

英伟达(NVIDIA)公司资深深度学习架构工程师力作!

介绍PyTorch新版本的常用模块及其底层实现逻辑。

涉及PyTorch基础操作组合构造复杂的深度学习模型及其这些模型在计算机视觉、自然语言处理、推荐系统、语音识别、语音合成和强化学习中的应用。

介绍近几年学术界和工业界常用的诸多热门模型, 如SSD、FCN、GAN、LSTM和BERT等的PyTorch实现。


前言

前言

近年来,以深度学习为代表的人工智能技术正在引领着计算机领域和工业领域的一场革命。如今,我们日常生活中的很多场景都和人工智能领域息息相关。比如,日常生活中经常使用的刷脸支付、智能语音助手,以及正在逐渐投入使用的自动驾驶系统,在这些日常应用中,人工智能都扮演着一个重要的角色。而人工智能在这些领域的应用逐渐将人们从简单枯燥的重复劳动中解放出来,让人们能够投入到更有创造力的活动中去。可以预见,在未来,人工智能将会朝着更加智能,而且能够在越来越多的场景中替代人类的方向发展,代替人类去完成一些枯燥乏味的劳动。

目前人工智能的实现依赖的是使用深度学习模型在海量的数据上进行训练。由于深度学习模型是高度模块化的,因此,可以通过组合不同的模块来构造不同的深度学习模型以完成相应的任务。为了利用深度学习模型的这个特点,更加快速地进行深度学习模型的构建和开发,人们开发了一系列的深度学习框架。比较有名的深度学习框架包括PyTorch、TensorFlow、Caffe等。这些框架的特点是内置了一系列的基础模块,并且能够使用一定的方式(比如Python语言或者其他配置文件)来控制基础模块的组合,构造复杂多样的深度学习模型。在这些深度学习框架中,PyTorch作为一款入门简单且运行效率相对较高的深度学习框架正在被越来越多的人使用。特别是在学术界,由于PyTorch的简单高效,越来越多的研究课题组正在选择PyTorch作为深度学习的研究工具。在工业领域,PyTorch也逐渐加入了一系列的新功能,方便深度学习模型的部署。作为一款优秀的深度学习框架,PyTorch主要的特点包括能够无缝地和Python语言做整合,方便深度学习模型的构建和调试,以及使用动态计算图模型,能够灵活地实现各种需要的功能等。可以说,PyTorch的设计思想完美地契合了Python语言的设计思想,即简洁和高效。这也让PyTorch对初学者非常友好,容易入门和掌握。可以说,PyTorch是易于上手,同时保留了灵活性,能够构造绝大多数的深度学习模型的一款强大的深度学习框架。

为了介绍这样一个功能强大的深度学习框架,本书从机器学习和深度学习的基础概念入手,首先让读者对深度学习的基础操作和主要任务有一定了解,在这个基础上,结合PyTorch中函数和类的定义介绍PyTorch是如何实现深度学习的这些基础操作的。接下来介绍了如何使用PyTorch中的这些基础操作来进行组合,构造复杂的深度学习模型。本书着重介绍了这些复杂的深度学习模型在两个重要领域(包括计算机视觉(Computer Vision,CV)和自然语言处理(Natural Language Processing,NLP))的应用,可以说,深度学习到目前为止在这两个领域上都取得了巨大的成功。当然,深度学习的应用不止这两个领域,本书还介绍了深度学习在其他领域,如推荐系统、语音识别和语音合成,以及强化学习中的应用。同时,为了加深读者对PyTorch深度学习框架的理解,本书在介绍深度学习模型的同时,还着重介绍了PyTorch的源代码系统。在少数情况下,读者可能需要使用C++来定义新的深度学习模块。因此,本书介绍了PyTorch中如何实现自定义的深度学习模块。同时,为了让读者了解PyTorch的运行机制,还介绍了PyTorch的C++后端是如何工作的,以及这个后端如何和前端的Python结合起来构造一个灵活的深度学习框架系统。从源代码阅读的角度来说,本书可以作为源代码的一个简单注释,帮助读者理解PyTorch各个构成部分的主要作用,以及这些构成部分是如何组合在一起协同工作的。

从以上介绍可以看出,在内容的编排上,本书遵循的是从简单到复杂,从表面到深入的写作思想,希望通过本书的介绍来覆盖初级和中级读者的需求,成为一本有价值的关于深度学习的参考书。

作为一个逐渐成熟的深度学习框架,PyTorch经历了一系列的蜕变。从最初的0.1版本到目前最新的1.3版本,PyTorch加入了一系列的模块和新功能,大大扩展了深度学习框架的灵活性和应用场景,同时也对代码进行了大量的修正,解决了很多代码中的错误(Bug)。可以说,PyTorch是一个飞速发展的深度学习框架。迄今为止,PyTorch已经能够覆盖从学术研究到工业部署的一系列场景,在框架的功能和性能方面有了飞跃的提升。相信在未来,随着基于深度学习模型的人工智能应用的逐渐推广,PyTorch作为一个流行的深度学习框架将会得到更广泛的应用,同时其功能和性能也将得到更多的提升。

因作者水平有限,书中错漏之处难免,恳请读者批评、指正。


作 者


目录

第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