关于我们
书单推荐
新书推荐
|
深度学习框架PyTorch:入门与实践(第2版) 读者对象:本书既适合深度学习的初学者及第一次接触PyTorch的研究人员阅读,也适合有一定PyTorch使用经验的用户阅读,帮助他们建立对PyTorch的基本认识,提高使用PyTorch框架解决实际问题的能力。
本书从多维数组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
你还可能感兴趣
我要评论
|