内 容 简 介
书中以案例形式详细介绍了PyTorch的各种实战应用。具体内容包括PyTorch与TensorFlow的对比和PyTorch的发展现状,张量Tensor和自动微分Autograd及其具体应用,PyTorch构建神经网络,基于PyTorch构建复杂应用,PyTorch高级技巧与实战应用,网络剪枝应用。
中国科学院院士,清华大学人工智能研究院院长张钹倾力推荐
详解PyTorch框架分布式计算、CUDA扩展等高级使用技巧
涵盖图像分类、文本处理、物体定位、自动架构搜索等诸多领域实战案例
丰富的新科研成果引用展示,紧跟人工智能发展前沿
提供完整源代码文件
前言
深度学习作为近些年来人工智能领域发展非常迅速,应用普及范围非常广的技术,受到越来越多的关注。其在诸多领域创造出的许多成果,让人们开始畅想未来的人工智能时代。因此无论是科研人员还是相关领域从业者,都在密切关注并学习了解这一领域的进展。
但是回想在十年前,想要让一个初学者迅速进行一个训练深度学习模型的实验则是十分困难的。归根结底是因为当时并没有一款广泛普及的深度学习编程框架。每个研究者需要编写出复杂的反向传播求导过程,处理数据多线程加载,GPU并行计算等等技术细节。这其实也限制了当时初期深度学习技术的普及。但是好在随着如Caffe、Theano、TensorFlow、PyTorch等等一系列深度学习框架的出现,让普通的研究者也可以轻松实现大规模数据并行编程,这才使得深度学习领域发展百花齐放,日益蓬勃。
本书所介绍的便是以上诸多编程框架中,我个人认为当前使用方法较灵活易懂的PyTorch可微编程框架。虽然PyTorch发展才不过两三年时间,但是凭借其良好的应用接口,简洁直观的编程模型,动态灵活的计算过程,成为后起之秀,逐渐被广大研究者所推崇使用。我也是在平时科研期间主要应用PyTorch框架,书中介绍的诸多内容也是我平时的经验总结。可以略夸张地说,在使用PyTorch框架编程之后,限制你科研成果进展的只剩下你的想象力和创造力,在编程实现上几乎没有任何阻碍了。
全书分为6章。第1章是PyTorch简介,可以让读者简略了解PyTorch框架的发展起源历程。第2~5章则由浅入深逐步介绍PyTorch的使用方法和编程技巧。其中先介绍了PyTorch作为支撑可微编程模型的基础张量以及自动求导,然后介绍高层封装模块用以搭建神经网络,接着讲解实际的应用任务实现,这里需要涉及到诸多外延内容,如数据加载预处理、模型加载保存、多GPU分布式计算、自定义扩展实现底层算子等等。最后一章通过一个完整的实验任务全面展示PyTorch在实际科研中的应用。在每一章讲解过程中,都会附带一些实战应用案例,以便于读者能够快速应用相关知识解决实际问题。这些实际问题我在设计之时,特别考虑了其实用性和理解性之间的平衡。既可以起到应用相关知识技能点,又不使其沦为过于简单的Toy Example。同时许多实战应用和案例讲解均是以当前深度学习领域前沿的研究成果进行展示,让读者在学习PyTorch框架之时,并不局限于只学习技术,更能了解跟踪当前科研领域的最新进展。
本书是我编写的第一部书籍,在写作过程中也存在着诸多不足。比如全书聚焦于PyTorch应用环节,对于其框架底层具体实现讲解缺乏。同时限于篇幅和内容范围,许多案例讲解我只能以简化设置形式进行讲解。对于实际应用中有着更为复杂处理流程的大型任务,本文缺少进一步展示。虽然如此,我仍满怀诚意尽我所能使本书完美。我希望这本书可以成为人工智能领域初学者的启发,促使读者能够大胆探索当前人工智能各个方向的研究领域,创造出属于自己的研究成果。最后欢迎各位批评指正,感谢成书过程中所有帮助过我的人!
作 者
2020年7月
王宇龙
博士,毕业于清华大学计算机系,曾在CVPR/AAAI/TIP等多家国际会议期刊发表论文,研究方向为深度学习可解释性、模型剪枝、对抗安全等。知乎“机器学习”话题优秀回答者(@Yulong)。现任蚂蚁金服算法专家。
目录
第1章 PyTorch简介
1.1 深度学习简介 1
1.2 PyTorch的由来 2
1.2.1 深度学习框架回顾 2
1.2.2 PyTorch前身:Torch7 4
1.2.3 Torch7的重生 5
1.3 PyTorch与TensorFlow对比 5
1.3.1 TensorFlow简介 6
1.3.2 动静之争 6
1.3.3 二者借鉴融合 7
1.3.4 PyTorch的优势 7
1.4 PyTorch发展现状 8
1.4.1 主要版本特点回顾 8
1.4.2 准备工作 8
第2章 PyTorch基础计算
2.1 PyTorch核心基础概念:张量Tensor 11
2.1.1 Tensor基本介绍 11
2.1.2 Tensor数学运算操作 15
2.1.3 Tensor索引分片合并变换操作 20
2.1.4 Tensor类成员方法 22
2.1.5 在GPU上计算 24
2.2 PyTorch可微编程核心:自动微分Autograd 25
2.2.1 PyTorch自动微分简介 25
2.2.2 可微分张量 25
2.2.3 利用自动微分求梯度 26
2.2.4 Function:自动微分实现基础 29
2.2.5 注意事项 31
2.3 PyTorch应用实战一:实现卷积操作 34
2.3.1 卷积操作 34
2.3.2 利用张量操作实现卷积 36
2.4 PyTorch应用实战二:实现卷积神经网络进行图像分类 38
第3章 PyTorch构建神经网络
3.1 PyTorch神经网络计算核心:torch.nn 43
3.1.1 nn.Module概述 43
3.1.2 结构化构建神经网络 47
3.1.3 经典神经网络层介绍 49
3.1.4 函数式操作nn.functional 53
3.2 PyTorch优化器 55
3.2.1 torch.optim概述 55
3.2.2 经典优化器介绍 56
3.2.3 学习率调整 57
3.3 PyTorch应用实战一:实现二值化神经网络 59
3.3.1 二值化网络BinaryNet概述 59
3.3.2 具体实现 60
3.4 PyTorch应用实战二:利用LSTM实现文本情感分类 63
3.4.1 文本情感分类 63
3.4.2 具体实现 65
第4章 基于PyTorch构建复杂应用
4.1 PyTorch数据加载 70
4.1.1 数据预处理:torchvision.transforms 70
4.1.2 数据加载:torch.utils.data 73
4.2 PyTorch模型搭建 77
4.2.1 经典模型复用与分享:torchvision.models 78
4.2.2 模型加载与保存 79
4.2.3 导出为ONNX格式 85
4.3 训练过程中日志记录与可视化 89
4.4 PyTorch应用实战一:在CIFAR10数据集进行神经网络结构搜索 93
4.4.1 可微分网络架构搜索DARTS介绍 94
4.4.2 简化问题建模:以ResNet为例 95
4.4.3 具体实现 96
4.5 PyTorch应用实战二:在ImageNet数据集进行弱监督物体定位 108
4.5.1 GradCAM解释显著图方法介绍 108
4.5.2 弱监督物体定位任务 109
4.5.3 具体实现 110
第5章 PyTorch高级技巧与实战应用
5.1 PyTorch并行计算 118
5.1.1 大规模数据集加载 118
5.1.2 模型的高效并行计算 122
5.1.3 加速模型计算和减少显存使用 125
5.2 扩展PyTorch 126
5.2.1 利用C++和CUDA实现自定义算子 126
5.2.2 利用TorchScript导出PyTorch模型 136
5.3 丰富的PyTorch资源介绍 145
5.4 PyTorch应用实战一:在ImageNet上训练MobileNet-V2网络 146
5.4.1 MobileNet-V2网络介绍 146
5.4.2 具体实现 147
5.5 PyTorch应用实战二:利用CUDA扩展实现MixConv算子 157
5.5.1 MixConv算子介绍 157
5.5.2 借鉴Depthwise卷积实现思路 158
5.5.3 具体实现 160
第6章 PyTorch完整实战讲解——网络剪枝应用
6.1 网络剪枝介绍 169
6.1.1 剪枝方法分类 169
6.1.2 基于权重通道重要性的结构化剪枝 170
6.1.3 问题定义与建模 170
6.2 具体实现思路 171
6.2.1 如何附属控制门值 171
6.2.2 剪枝结构搜索 172
6.2.3 剪枝模型训练 174
6.3 完整代码实现 175
6.3.1 模型搭建 176
6.3.2 剪枝器实现 181
6.3.3 学习控制门变量 183
6.3.4 剪枝模型 187
6.3.5 训练模型 189
6.3.6 规模化启动训练任务 193
6.4 实验结果 198
参考文献