第 3 章 使用 PyTorch 进行深度学习开发 使用 PyTorch 进行深度学习开发
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
现在,你的开发环境已经运行,对张量及其运算也有了一定的了解,我们可以开始用 PyTorch 开发和部署深度学习模型了。本章提供了基本 NN 开发流程和执行流程所需的 PyTorch 代码的快速参考。
首先,我们将回顾整个过程,然后深入到每个阶段,并查看一些实现每个功能的 PyTorch 示例代码。我们将在第 2 章所学的基础上,将数据加载到张量中,并应用数据转换将张量转换为模型的合适输入。
您将建立一个深度学习模型,并使用常见的训练循环结构对模型进行训练。然后,您将测试模型的性能并调整超参数,以提高结果和训练速度。最后,我们将探索将模型部署到原型系统或生产中的方法。在每个阶段,我都会提供常用的 PyTorch 代码,供您在开发自己的深度学习模型时作为参考。
本书未来的章节将提供更多示例,并涵盖更多高级主题,如定制、优化、加速、分布式训练和高级部署。现在,我们将重点介绍基本的 NN 开发流程。
整体流程
虽然每个人构建深度学习模型的方式各不相同,但总体流程基本相同。 不管你是用有标签的数据进行监督学习,还是用无标签的数据进行无监督学习,抑或是两者混合使用的半监督学习,都会使用一个基本的管道来训练、测试和部署你的深度学习模型。我会假设你对深度学习模型开发有一定的了解,但在开始之前,让我们先回顾一下基本的深度学习训练流程。然后,我将展示如何在 PyTorch 中实现这一流程。
图 3-1展示了 Deep Learning 开发中最常见的任务。第一个阶段是数据准备阶段,我们将从外部来源加载数据,并将其转换为模型训练所需的适当格式。这些数据可以是图像、视频、语音录音、音频文件、文本、一般表格数据,也可以是这些数据的任意组合。
首先,我们加载这些数据,并将其转换为张量形式的数值。这些张量将作为模型训练阶段的输入;不过,在传入之前,通常会通过变换对这些张量进行预处理,并将其分组,以获得更好的训练性能。因此,数据准备阶段需要获取通用数据,并将其转换为可以传入 NN 模型的成批张量。
接下来,在模型实验和开发阶段,我们将设计一个 NN 模型,使用训练数据对模型进行训练,测试其性能,并优化超参数,以将性能提高到理想水平。为此,我们将把数据集分成三部分:一部分用于训练,一部分用于验证,一部分用于测试。我们将设计一个 NN 模型,并使用训练数据训练其参数。PyTorch 在torch.nn 模块中提供了设计优雅的模块和类,可以帮助您创建和训练您的 NN。我们将从 PyTorch 的众多内置函数中选择定义一个损失函数和优化器。然后,我们将在训练循环中执行反向传播并更新模型参数。
图 3-1. 基本的 Deep Learning 开发流程
在每个纪元中,我们还将通过输入验证数据、测量性能和调整超参数来验证我们的模型。最后,我们将通过传递测试数据来测试我们的模型,并测量模型对未见数据的性能。在实践中,验证和测试循环可能是可选的,但为了完整起见,我们还是在这里展示一下。
Deep Learning 模型开发的最后一个阶段是模型部署阶段。在这个阶段,我们已经有了一个训练有素的模型,那么我们该如何使用它呢?如果你是一名正在进行实验的深度学习研究科学家,你可能想简单地将模型保存到文件中,然后加载它以进行进一步的研究和实验,或者你可能想通过 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access