书籍详情

深度学习框架PyTorch:入门与实践(第2版)

深度学习框架PyTorch:入门与实践(第2版)

作者:王博 著

出版社:电子工业出版社

出版时间:2022-07-01

ISBN:9787121437519

定价:¥159.00

购买这本书可以去
内容简介
  本书从多维数组Tensor开始,循序渐进地介绍PyTorch各方面的基础知识,并结合深度学习中的经典应用,带领读者从零开始完成几个经典而有趣的实际项目,包括动漫头像生成、风格迁移、自动写诗以及目标检测。本书还介绍了PyTorch的几个高级扩展,包括向量化计算、分布式加速以及CUDA扩展。本书既适合深度学习的初学者及第一次接触PyTorch的研究人员阅读,也适合有一定PyTorch使用经验的用户阅读,帮助他们建立对PyTorch的基本认识,提高使用PyTorch框架解决实际问题的能力。
作者简介
  王博:北京邮电大学模式识别实验室在读硕士研究生,主要研究方向为深度学习与计算机视觉。Python程序员,PyTorch推广者。作为助教为大一学生讲解《人工智能导论》实验课程,受到同学们的好评。陈云:多伦多大学在读计算机博士生,现任waabi.ai研究员。曾在Uber ATG从事无人驾驶研究,获得CVPR2021最佳论文提名。
目录
第 1 章 深度学习框架简介 1
1.1 深度学习框架编年史. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 PyTorch 与 TensorFlow 的对比 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 为什么选择 PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
第 2 章 PyTorch 快速入门 11
2.1 安装与配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 在 Linux 系统下安装 PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 在 Windows 系统下安装 PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3 学习工具介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.4 服务器开发介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2 PyTorch 快速入门指南 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.1 Tensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.2 autograd:自动微分. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2.3 神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.4 小试牛刀:CIFAR-10 分类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
第 3 章 Tensor 和 autograd 43
3.1 Tensor 基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.1.1 Tensor 的基本操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.1.2 命名张量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.1.3 Tensor 与 NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.1.4 Tensor 的基本结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.1.5 变形记:N 种改变 Tensor 形状的方法 . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.2 小试牛刀:线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.3 autograd 和计算图基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.3.1 autograd 的用法:requires_grad 与 backward . . . . . . . . . . . . . . . . . . . . . 73
3.3.2 autograd 的原理:计算图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.3.3 扩展 autograd:Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3.4 小试牛刀:利用 autograd 实现线性回归 . . . . . . . . . . . . . . . . . . . . . . . . 84
3.4 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
第 4 章 神经网络工具箱 nn 89
4.1 nn.Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2 常用的神经网络层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2.1 图像相关层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2.2 激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.2.3 构建神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.2.4 循环神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.2.5 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.3 nn.functional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.3.1 nn.functional 与 nn.Module 的区别 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.3.2 采样函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.4 初始化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.5 优化器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.6 nn.Module 深入分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.7 小试牛刀:搭建 ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4.8 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
第 5 章 PyTorch 中常用的工具 121
5.1 数据处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.1.1 Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.1.2 DataLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.2 预训练模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
5.3 可视化工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.3.1 TensorBoard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.3.2 Visdom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
5.4 使用 GPU 加速:CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.5 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
第 6 章 向量化 155
6.1 向量化简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
6.2 广播法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
6.3 索引操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.3.1 基本索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.3.2 高级索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
6.3.3 einsum / einops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
6.4 小试牛刀:使用向量化思想解决实际问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
6.4.1 Box_IoU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
6.4.2 RoI Align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
6.4.3 反向 Unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.5 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
第 7 章 PyTorch 与 Multi-GPU 187
7.1 单机多卡并行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
7.1.1 并行原理介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
7.1.2 DataParallel 使用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7.2 分布式系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
7.2.1 分布式系统的基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
7.2.2 分布式消息传递接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
7.2.3 小试牛刀:分布式计算实操演练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
7.3 PyTorch 分布式训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
7.3.1 使用 MPI 进行分布式训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
7.3.2 使用 torch.distributed 进行分布式训练 . . . . . . . . . . . . . . . . . . . . . . . . . 201
7.3.3 使用 Horovod 进行分布式训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
7.4 分布式训练中的注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4.1 保持同步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4.2 进程协作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
7.4.3 常用调试技巧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
7.5 进阶扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.6 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
第 8 章 CUDA 扩展与编译 211
8.1 PyTorch C++ 扩展简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
8.1.1 C++ 扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
8.1.2 CUDA 扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
8.2 CUDA、NVIDIA-driver、cuDNN、PyTorch 之间的关系 . . . . . . . . . . . . . . . . . 222
8.3 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
第 9 章 PyTorch 实战指南 227
9.1 编程实战:猫和狗二分类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
9.1.1 比赛介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
9.1.2 文件组织结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
9.1.3 __init__.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
9.1.4 数据加载 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
9.1.5 模型定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
9.1.6 工具函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
9.1.7 配置文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
9.1.8 main.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
9.1.9 使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
9.1.10 争议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
9.2 PyTorch 调试指南 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
9.2.1 ipdb 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
9.2.2 在 PyTorch 中调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.3 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
第 10 章 AI 插画师:生成对抗网络 255
10.1 GAN 原理简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
10.2 使用 GAN 生成动漫人物头像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.3 实验结果分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
10.4 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
第 11 章 AI 诗人:用 Transformer 写诗 271
11.1 自然语言处理的基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
11.1.1 词向量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
11.1.2 RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
11.2 CharRNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
11.3 Transformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
11.3.1 自注意力模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
11.3.2 位置编码模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
11.4 使用 PyTorch 实现 Transformer 写诗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
11.5 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
第 12 章 AI 艺术家:神经网络风格迁移 295
12.1 风格迁移原理介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
12.2 使用 PyTorch 实现风格迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
12.3 实验结果分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
12.4 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
第 13 章 CenterNet:目标检测 311
13.1 目标检测概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
13.2 CenterNet 原理介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
13.3 使用 PyTorch 实现 CenterNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
13.3.1 使用 pycocotools 加载 COCO 数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . 318
13.3.2 搭建 CenterNet 网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
13.4 实验结果分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
13.5 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
参考文献 331
猜您喜欢

读书导航