提交 573cbfbe 编写于 作者: W wizardforcel

2021-01-18 17:22:58

上级 ae0dcfc9
......@@ -26,7 +26,7 @@ PyTorch 最初是由 Facebook 实习生作为研究框架开始的,现已发
数据预处理是构建深度学习管道的重要部分之一。 通常,不清理或格式化现实世界的数据集以供神经网络处理。 在进行进一步处理之前,需要转换为浮点数或整数,进行规范化等操作。 建立数据处理管道也是一项艰巨的任务,其中包括编写大量样板代码。 为了使其更容易,将数据集构建器和`DataLoader`管道程序包内置到 PyTorch 的核心中。
### 数据集和 DataLoader
### 数据集和`DataLoader`
不同类型的深度学习问题需要不同类型的数据集,并且每种类型的可能需要不同类型的预处理,具体取决于我们使用的神经网络架构。 这是深度学习管道构建中的核心问题之一。
......@@ -91,7 +91,7 @@ for batch in dataloader:
### 实用程序包
该社区针对视觉(`torchvision`),文本(`torchtext`)和音频(`torchaudio`)制作了三种不同的实用程序包。 它们针对不同的数据域(HTG3)都解决了相同的问题,并且使用户不必担心用户可能拥有的几乎所有用例中的数据处理和清理问题。 实际上,所有实用程序包都可以轻松地插入到可能理解或不理解 PyTorch 数据结构的任何类型的程序中。
该社区针对视觉(`torchvision`),文本(`torchtext`)和音频(`torchaudio`)制作了三种不同的实用程序包。 它们针对不同的数据域都解决了相同的问题,并且使用户不必担心用户可能拥有的几乎所有用例中的数据处理和清理问题。 实际上,所有实用程序包都可以轻松地插入到可能理解或不理解 PyTorch 数据结构的任何类型的程序中。
#### 火炬视觉
......@@ -104,16 +104,7 @@ pip install torchvision
`torchvision`的功能分为三类:预加载的,可下载的数据集,用于几乎所有类型的计算机视觉问题; 流行的计算机视觉架构的预训练模型; 以及用于计算机视觉问题的常见转换函数。 另外一个好处是,`torchvision`软件包的功能 API 的简单性使用户可以编写自定义数据集或转换函数。 以下是`torchvision`程序包中可用的所有当前数据集的表格及其说明:
<colgroup><col style="text-align: left"> <col style="text-align: left"></colgroup>
|
数据集
|
描述
|
| 数据集 | 描述 |
| --- | --- |
| MNIST | 70,000 `28 x 28`手写数字的数据集。 |
| KMNIST | 平假名字符的排列方式与普通 MNIST 相同。 |
......@@ -332,31 +323,22 @@ print(next(iter(test_iter)))
下表显示`torchtext`中当前可用的数据集以及它们特定的任务:
<colgroup><col style="text-align: left"> <col style="text-align: left"></colgroup>
|
数据集
|
任务
|
| 数据集 | 任务 |
| --- | --- |
| BaBi | 问题回答 |
| SST | 情绪分析 |
| IMDB | 情绪分析 |
| 我通过 | 问题分类 |
| TREC | 问题分类 |
| SNLI | 蕴涵 |
| 多重 NLI | 蕴涵 |
| 维基文字 2 | 语言建模 |
| 维基文字 103 | 语言建模 |
| 宾夕法尼亚大学 | 语言建模 |
| MultiNLI | 蕴涵 |
| WikiText2 | 语言建模 |
| WikiText103 | 语言建模 |
| PennTreebank | 语言建模 |
| WMT14 | 机器翻译 |
| 学会 | 机器翻译 |
| 30k | 机器翻译 |
| UDP 操作系统 | 序列标记 |
| CoNLL2000 大块 | 序列标记 |
| IWSLT | 机器翻译 |
| Multi30k | 机器翻译 |
| UDPOS | 序列标记 |
| CoNLL2000Chunking | 序列标记 |
#### 火炬音频
......@@ -427,19 +409,19 @@ print(prof.table('cpu_time'))
![Bottleneck and profiling](img/B09475_03_02.jpg)
图 3.2:按名称分组的 autograd.profiler 输出
图 3.2:按名称分组的`autograd.profiler`输出
下一个`print`语句基于作为参数传递的头按升序对数据进行排序。 该有助于找到需要更多时间的节点,并可能提供某种方式来优化模型。
![Bottleneck and profiling](img/B09475_03_03.jpg)
图 3.3:autograd.profiler 输出按 CPU 时间排序
图 3.3:`autograd.profiler`输出按 CPU 时间排序
最后一个`print`语句只是可视化 Chrome 跟踪工具执行时间的另一种方式。 `export_chrome_trace`函数接受文件路径,并将输出写入 Chrome 跟踪器可以理解的文件:
![Bottleneck and profiling](img/B09475_03_04.jpg)
图 3.4:autograd.profiler 输出转换为 chrometrace
图 3.4:`autograd.profiler`输出转换为 chrometrace
但是,如果用户需要结合使用`autograd.profiler`和 cProfiler(这将使我们在多个节点操作之间实现简洁的关联),或者用户仅需要调用另一个实用程序而不是更改用于获取配置文件的源代码, 信息是瓶颈。 瓶颈是 Torch 实用程序,可以从命令行作为 Python 模块执行:
......@@ -456,7 +438,7 @@ python -m torch.utils.bottleneck /path/to/source/script.py [args]
![Bottleneck and profiling](img/B09475_03_06.jpg)
图 3.6:瓶颈输出显示 autograd.profiler
图 3.6:瓶颈输出显示`autograd.profiler`
![Bottleneck and profiling](img/B09475_03_07.jpg)
......@@ -464,7 +446,7 @@ python -m torch.utils.bottleneck /path/to/source/script.py [args]
## 训练和验证
尽管工作流实际上以将深度模型的部署到生产中而结束,但我们已经到达深度学习工作的最后一步,我们将在第 8 章和[HTG4 PyTorch 投入生产。 在完成所有预处理和模型构建之后,现在我们必须训练网络,测试准确率并验证可靠性。 在开源世界(甚至在本书中)中,我们看到的大多数现有代码实现都使用直接方法,在该方法中,我们明确编写了训练,测试和验证所需的每一行,以提高可读性,因为 可以避免样板的特定工具会增加学习曲线,尤其是对于新手。 很显然,对于那些每天都在使用神经网络的程序员来说,可以避免样板的工具将是一个救生员。 因此,PyTorch 社区构建的不是一个而是两个工具:Torchnet 和 ignite。 本次会议仅与点燃有关,因为它被发现比 Torchnet 更为有用和抽象,但两者都是积极开发的工具,有可能在不久的将来合并。
尽管工作流实际上以将深度模型的部署到生产中而结束,但我们已经到达深度学习工作的最后一步,我们将在第 8 章和“PyTorch 投入生产”。 在完成所有预处理和模型构建之后,现在我们必须训练网络,测试准确率并验证可靠性。 在开源世界(甚至在本书中)中,我们看到的大多数现有代码实现都使用直接方法,在该方法中,我们明确编写了训练,测试和验证所需的每一行,以提高可读性,因为 可以避免样板的特定工具会增加学习曲线,尤其是对于新手。 很显然,对于那些每天都在使用神经网络的程序员来说,可以避免样板的工具将是一个救生员。 因此,PyTorch 社区构建的不是一个而是两个工具:Torchnet 和 Ignite。 本次会议仅与点燃有关,因为它被发现比 Torchnet 更为有用和抽象,但两者都是积极开发的工具,有可能在不久的将来合并。
### 点燃
......@@ -517,7 +499,7 @@ trainer.run(train_loader, max_epochs=epochs)
evaluator.run(val_loader)
```
函数`create_supervised_trainer``create_supervised_evaluator`返回一个`Engine`对象,该对象具有类似于`training_loop`的功能来执行代码的公共模式,如先前给出的那样。 除了给定的参数,这两个函数还接受一个设备(CPU 或 GPU),该设备返回在我们指定的设备上运行的 Trainer 或 Evaluator `Engine`实例。 现在情况越来越好了吧? 我们传递了定义的模型,所需的优化器以及正在使用的损失函数,但是在有了训练器和`evaluator`对象之后我们该怎么办?
函数`create_supervised_trainer``create_supervised_evaluator`返回一个`Engine`对象,该对象具有类似于`training_loop`的功能来执行代码的公共模式,如先前给出的那样。 除了给定的参数,这两个函数还接受一个设备(CPU 或 GPU),该设备返回在我们指定的设备上运行的训练器或评估器`Engine`实例。 现在情况越来越好了吧? 我们传递了定义的模型,所需的优化器以及正在使用的损失函数,但是在有了训练器和`evaluator`对象之后我们该怎么办?
`Engine`对象定义了`run`方法,该方法使循环根据传递给`run`函数的时期和加载器开始执行。 与往常一样,`run`方法使`trainer`循环从零到历元数。 对于每次迭代,我们的训练师都会通过加载程序进行梯度更新。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册