# 零、前言 《PyTorch 深度学习实用指南》非常适合初学者,也可以帮助读者快速进入深度学习的深度。 在过去的几年中,我们已经看到了深度学习成为新的力量。 它已经从学术界进入工业界,帮助解决了成千上万的谜团,如果没有它,人类将无法想象解决。 深度学习作为首选实现方式的主流采用主要是由一堆框架驱动的,这些框架可靠地将复杂算法作为有效的内置方法提供。 本书展示了 PyTorch 在构建深度学习模型原型,构建深度学习工作流程以及将原型模型投入生产中的优势。 总体而言,这本书着重于 PyTorch 的实际实现,而不是解释其背后的数学原理,但是,它还将您链接到一些概念上可能落后的地方。 ## 这本书适合谁 这本书是为初学者而写的,但不会让他们跳来跳去另一本书转向高级主题。 因此,我们避免尽可能多地解释算法,而是专注于在 PyTorch 中的实现,有时着眼于使用这些算法的实际应用的实现。 对于那些了解如何使用 Python 进行编程并了解深度学习基础知识的人来说,这本书是理想的选择。 本书适用于已经在实践传统机器学习概念的人,或者是开发人员并且希望实际探索深度学习的世界并将其实现部署到生产中的人们。 ## 这本书涵盖的内容 第 1 章,“深度学习演练和 PyTorch 简介”是对 PyTorch 进行深度学习的方式以及 PyTorch 的基本 API 的介绍。 它首先显示了 PyTorch 的历史以及为什么 PyTorch 应该成为深度学习开发的必备框架。 它还介绍了不同的深度学习方法,我们将在接下来的章节中介绍这些方法。 第 2 章,“一个简单的神经网络”可帮助您构建第一个简单的神经网络,并展示如何连接神经网络,优化器和参数更新之类的点点滴滴来构建一个菜鸟级深度学习模型。 它还介绍了 PyTorch 如何进行反向传播,这是所有最新的深度学习算法的关键。 第 3 章,“深度学习工作流程”深入研究了深度学习工作流程的实现和有助于构建工作流程的 PyTorch 生态系统。 如果您打算为即将进行的项目建立深度学习团队或开发渠道,那么这可能是最关键的一章。 在本章中,我们将遍历深度学习管道的不同阶段,并了解 PyTorch 社区如何通过制作适当的工具在工作流程的每个阶段中不断改进。 第 4 章,“计算机视觉”是迄今为止深度学习最成功的结果,它讨论了成功背后的关键思想,并贯穿了使用最广泛的视觉算法– **卷积神经网络(CNN)**。 我们将逐步实现 CNN 以了解其工作原理,然后使用 PyTorch 的`nn`包中预定义的 CNN。 本章可帮助您制作简单的 CNN 和基于高级 CNN 的视觉算法,称为语义分割。 第 5 章,“序列数据处理”着眼于循环神经网络,它是目前最成功的序列数据处理算法。 本章向您介绍主要的 RNN 组件,例如**长短期记忆**(**LSTM**)网络和**门控循环单元**(**GRU**)。 然后,在探索循环神经网络之前,我们将经历 RNN 实现中的算法更改,例如双向 RNN,并增加层数。 为了理解循环网络,我们将使用斯坦福大学 NLP 小组的著名示例(栈增强的解析器-解释器神经网络(SPINN)),并将其在 PyTorch 中实现。 第 6 章,“生成网络”,简要讨论了生成网络的历史,然后解释了各种生成网络。 在这些不同的类别中,本章向我们介绍了自回归模型和 GAN。 我们将研究作为自动回归模型一部分的 PixelCNN 和 WaveNet 的实现细节,然后详细研究 GAN。 第 7 章,“强化学习”介绍了强化学习的概念,它实际上并不是深度学习的子类。 我们首先来看定义问题陈述。 然后,我们将探讨累积奖励的概念。 我们将探索 Markov 决策过程和贝尔曼方程,然后转向深层 Q 学习。 我们还将看到由 OpenAI 开发的工具包 Gym 的介绍,该工具包用于开发和尝试强化学习算法。 第 8 章,“生产中的 PyTorch”着眼于在将深度学习模型部署到生产过程中人们甚至是深度学习专家所面临的困难。 我们将探索用于生产部署的不同选项,包括使用围绕 PyTorch 的 Flask 包装器以及使用 RedisAI,RedisAI 是高度优化的运行时,用于在多集群环境中部署模型,并且每秒可以处理数百万个请求。 ## 要充分利用这本书 * 该代码用 Python 编写并托管在 GitHub 上。 尽管可以下载压缩代码存储库,但在线 GitHub 存储库将收到错误修复和更新。 因此,需要具备对 GitHub 的基本了解,以及具有良好的 Python 知识。 * 尽管不是强制性的,但如果您未使用任何预训练的模型,则使用 CUDA 驱动程序将有助于加快训练过程。 * 这些代码示例是在 Ubuntu 18.10 机器上开发的,但是可以在所有流行的平台上运行。 但是,如果您遇到任何困难,请随时在 GitHub 存储库中提出问题。 * 本书中的某些示例要求您使用其他服务或包,例如 redis-server 和 Flask 框架。 所有这些外部依赖项和“操作方法”指南均在其出现的章节中进行了记录。 ### 下载示例代码文件 您可以从[这里](http://www.packt.com)的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问[这里](http://www.packt.com/support)并注册以将文件直接通过电子邮件发送给您。 您可以按照以下步骤下载代码文件: 1. 登录或登录[这里](http://www.packt.com)。 2. 选择**支持**标签。 3. 单击**代码下载 & 勘误表**。 4. 在**搜索**框中输入书籍的名称,然后按照屏幕上的说明进行操作。 下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹: * Windows 的 WinRAR/7-Zip * 适用于 macOS 的 Zipeg/iZip/UnRarX * 适用于 Linux 的 7-Zip/PeaZip 本书的代码包也托管在 [GitHub](https://github.com/hhsecond/HandsOnDeepLearningWithPytorch) 上。 我们还从[这里](https://github.com/PacktPublishing/)提供了丰富的书籍和视频目录中的其他代码包。 去看一下! ### 下载彩色图像 我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 [您可以在此处下载](http://www.packtpub.com/sites/default/files/downloads/9781788834131_ColorImages.pdf)。 ### 使用的约定 本书中使用了许多文本约定。 `CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 例如; “将下载的`WebStorm-10*.dmg`磁盘映像文件安装为系统中的另一个磁盘。” 代码块设置如下: ```py def forward(self, batch): hidden = self.hidden(batch) activated = torch.sigmoid(hidden) out = self.out(activated) return out ``` 当我们希望引起您对代码块特定部分的注意时,相关行或项目以粗体显示: ```py def binary_encoder(input_size): def wrapper(num): ret = [int(i) for i in '{0:b}'.format(num)] return [0] * (input_size - len(ret)) + ret return wrapper ``` 任何命令行输入或输出的编写方式如下: ```py python -m torch.utils.bottleneck /path/to/source/script.py [args] ``` **粗体**:表示新的术语,重要的单词或您在屏幕上看到的单词,例如在菜单或对话框中,也显示在这样的文本中。 例如:“从**管理**面板中选择**系统信息**。” #### 注意 警告或重要提示如下所示。 #### 提示 提示和技巧如下所示。