雷锋网 AI 开发者按:近日,PyTorch 社区又添入了「新」工具,包括了更新后的 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。每项工具都进行了新的优化与改进,兼容性更强,使用起来也更加便捷。PyTorch 发布了相关文章介绍了每个工具的更新细节,雷锋网 AI 开发者将其整理与编译如下。
自 PyTorch 1.0 发布以来,我们的社区不断在进行扩展、添加入新的工具。这些发展为 PyTorch Hub 中越来越多可用的模型做出了极大的贡献,并不断增加了其在研究和生产中的用途。
我们的核心目标在于通过不断向 PyTorch 中添加新功能来支持更多的研究和生产,其中也包括通过 TorchScript 来将程序与 PyTorch 连接起来。TorchScript 是一种使用 PyTorch 代码创建可序列化和可优化模型的方法;任何 TorchScript 程序都可以从 Python 进程中保存,并在不依赖于 Python 的进程中实现加载。(https://pytorch.org/docs/stable/jit.html)
而现在,我们很高兴地宣布我们已经成功开发了四个新版本,包括 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。用户现在可以在 pytorch.org 上(https://pytorch.org/get-started/locally/)开始使用这些版本。
通过使用 PyTorch 1.2,开源 ML 框架在生产应用方面向前迈出了一大步,并增加了一个改进的、更加完善的 TorchScript 环境。这些改进使得用户可以更容易建立生产模型,扩展对导出 ONNX 格式模型的支持功能,并增强对 Transformers 模块的支持。
除了这些新功能之外,用户对 TensorBoard(https://pytorch.org/docs/stable/tensorboard.html)的使用也更便捷,现在只需输入代码「from torch.utils.tensorboard import SummaryWriter」,即可开始使用。
TorchScript 改进
在 PyTorch 1.0 中加入 TorchScript 之后,它为 PyTorch 的 Eager 类模型提供了构建途径。TorchScript 编译器将 PyTorch 模型转换为静态类型的图形表示,为 Python 不可用受限环境中的优化和执行提供了机会。用户可以将模型逐步转换为 TorchScript,然后将编译后的代码与 Python 无缝混合即可。
PyTorch 1.2 还显著扩展了 TorchScript 对 PyTorch 模型中使用的 Python 子集的支持度,并提供了一种新的、更易于使用的 API,用于将模型编译为 TorchScript。有关详细信息,可以参阅迁移指南(https://pytorch.org/docs/master/jit.html#migrating-to-pytorch-1-2-recursive-scripting-api);以下是新 API 的示例用法:
如需了解更多信息,请参阅 TorchScript 简介(https://pytorch.org/tutorials/beginner/Intro_to_TorchScript.html)和在 C ++中加载 PyTorch 模型的教程(https://pytorch.org/tutorials/advanced/cpp_export.html)。
ONNX EXPORT 改进
在 ONNX 社区方面,我们仍然会与开放的管理结构、指导委员会成员、特殊兴趣小组(SIG)和工作组(WGS)共同发展。在与 Microsoft 的合作中,我们增加了对导出 ONNX Opset 版本 7(v1.2)、8(v1.3)、9(v1.4)和 10(v1.5)的全面支持。同时,我们还优化了常量折叠(constant folding)的传递,用以支持最新版本的 ONNX Opset 10。
ScriptModule 也有相应的改进,包括:支持多输出、张量工厂表、元组作为输入和输出。此外,用户现在可以设置个性化的标记来导出自定义操作,并在导出期间指定输入的动态大小。所有主要改进的内容如下:
支持多种 Opset,包括在 Opset 10 中丢失导出、切片、翻转和插值的功能。
ScriptModule 的改进,包括了支持多输出、张量工厂、元组作为输入和输出。
支持了十几个其它的 PyTorch 操作,包括导出自定义操作的能力。
许多重大修复和测试基础改进。
由 @ lara-hdr 在 Microsoft 提供了试用最新的教程(https://pytorch.org/tutorials/advanced/super_resolution_with_onnxruntime.html)。
NN.TRANSFORMER
在 PyTorch 1.2 中,我们现在包含一个标准的 nn.Transformer 模块(https://pytorch.org/docs/stable/nn.html?highlight=transformer#torch.nn.Transformer),该模块基于「Attention is All You Need(https://arxiv.org/abs/1706.03762)」这篇论文。
nn.Transformer 模块完全依赖注意力机制来构建输入和输出之间的全局依赖关系;该模块的各个组件经过精心设计,可以独立使用。例如,模块中的 nn.TransformerEncoder 组件可以在无需 nn.Transformer 的情况下单独使用。其中,新 API 包括:
nn.Transformer
nn.TransformerEncoder 和 nn.TransformerEncoderLayer
nn.TransformerDecoder 和 nn.TransformerDecoderLayer
有关更多信息,请参阅 Transformer Layers(https://pytorch.org/docs/stable/nn.html#transformer-layers)文档。有关完整的 PyTorch 1.2 发行说明,请参见此处(https://github.com/pytorch/pytorch/releases)。
PyTorch 域的库(如 torchvision、torchtext 和 torchaudio)提供了对常用数据集、模型和转换器的便捷访问,可用于快速创建最先进的基线模型。此外,它们还提供了常见代码抽象集,以减少用户可能不得不重复写入代码的麻烦。
由于研究领域有不同的要求,围绕 PyTorch 出现了一个称为 DAP I(Domain API)的专业库生态系统,以简化许多领域中新算法和现有算法的开发过程。我们很高兴发布三个更新的 DAPI 库,用于支持 PyTorch 1.2 核心版本的文本、音频和视觉内容。
TORCHAUDIO 0.3 与 KALDI 兼容性,新转换器
Torchaudio 专注于机器理解音频波形。它是一个 ML 库,提供相关的信号处理功能(但不是一般的信号处理库)。它利用 PyTorch 的 GPU 为波形提供了许多工具和转换的支持,并使数据加载和标准化更容易、更易读。例如,它为使用 sox 的波形提供数据加载器,并为频谱图、重采样和 mu-law 编码与解码等转换提供数据加载器。
我们很高兴地宣布 torchaudio 0.3.0 的可用性,重点是标准化和复数、转换(重采样)和两个新的函数(phase_vocoder,ISTFT)、Kaldi 兼容性以及新的教程。Torchaudio 经过重新设计,已经成为了 PyTorch 的扩展功能,它也是 DAPI 生态系统的一部分。
标准化
解决机器学习问题的重要工作是数据准备。在这个新版本中,我们更新了 torchaudio 的转换接口,以便围绕以下词汇和约定进行标准化。
假设张量具有通道作为第一维度,时间作为最后维度(适用时);这将使得它与 PyTorch 的大小一致。对于大小的名称,我们用前缀 n_(例如「大小(n_freq,n_mel)的张量」)命名,而维度名称则不具有该前缀(例如「维度张量(通道,时间)」);并且所有变换和函数的输入我们现在首先要假定通道。这样做是为了与 PyTorch 保持一致,PyTorch 具有后跟样本数量的通道,而且这个通道参数目前不推荐使用所有的转换和函数。
输出 STFT 表示为(channel,frequency,time, 2)。对于每个通道而言,列是特定窗口的傅里叶变换。因此,当我们水平移动时,我们可以看到每列(傅里叶变换波形)随时间的变化。这符合 librosa 的输出,使我们不再需要在通过 Spectrogram、MelScale、MelSpectrogram 和 MFCC 来转用我们的测试比较。此外,由于这些新的标准,我们弃用了之前用于从一种信号形状转换到另一种形状的 LC2CL 和 BLC2CBL。
作为此版本的一部分,我们还通过维数的张量 (…, 2) 引入了对复数的支持,并提供 magphase 将这样的张量转换为相应的幅度和相位,以及类似的 complex_norm 和 angle 数据。
README(https://github.com/pytorch/audio/blob/v0.3.0/README.md#Conventions)中提供了标准化的详细信息。
新函数、转换器和 Kaldi 兼容性
在标准化之前,我们将状态和计算分成了 torchaudio.transforms 和 torchaudio.functional 两块。
作为转换器的一部分,我们在 0.3.0 中添加了一个新的转换模块:Resample。Resample 可以将波形上采样或下采样到不同的频率。
作为新函数的一部分,我们将介绍:
phase_vocoder 一个相位声码器,用于在不改变音调的情况下改变波形的速度。
ISTFT 反向 STFT,用于与 PyTorch 所提供的 STFT 实现兼容。
这种分离的设置允许我们使函数弱脚本化并在 0.3.0 中使用 JIT。因此,我们支持 JIT 和 CUDA 进行以下的转器:Spectrogram,AmplitudeToDB(原名 SpectrogramToDB)MelScale,MelSpectrogram,MFCC,MuLawEncoding,MuLawDecoding(原名 MuLawExpanding)。
我们现在还提供与 Kaldi 兼容的接口,以简化载入并减少用户对 Kaldi 代码的依赖性。我们现在有一个接口可用于 spectrogram,fbank 和 resample_waveform。
新教程
为了展示新的标准和转换,这里有一个新的教程(https://pytorch.org/tutorials/beginner/audio_preprocessing_tutorial.html)。教程中将演示用户如何使用 torchaudio 进行预处理波形;同时该教程也将介绍加载波形并对其应用一些可用转换的示例。
带有监督学习数据集的 TORCHTEXT 0.4
torchtext 的一个关键重点领域是提供有助于加速 NLP 研究的基本要素。其中包括轻松访问常用数据集和基本预处理流程,用以处理基于原始文本的数据。torchtext 0.4.0 版本包括一些热门的监督学习基线模型,这些模型都带有「one-command」的数据加载项。
这里也有教程(https://pytorch.org/tutorials/beginner/text_sentiment_ngrams_tutorial.html),用以说明如何使用新数据集进行文本分类分析。我们还添加并改进了一些函数,例如 get_tokenizer 和 build_vocab_from_iterator,以便更容易支持之后更多的数据集。更多示例,可以在这里找到(https://github.com/pytorch/text/tree/master/examples/text_classification)。
文本分类是自然语言处理中的一项重要任务,具有许多应用,例如情感分析等等。新版本涵盖了几个用于监督学习的主流文本分类数据集,包括:
AG_NEWS
SogouNews
DBpedia
YelpReviewPolarity
YelpReviewFull
YahooAnswers
AmazonReviewPolarity
AmazonReviewFull
每个数据集都有两个部分(训练与测试),并且可以使用单个命令轻松加载。数据集还支持 ngrams 功能,可用于获得有关局部字顺序的部分信息。请查看此处的教程(https://pytorch.org/tutorials/beginner/text_sentiment_ngrams_tutorial.html),可以帮助你了解有关如何将新数据集用于监督问题(如文本分类分析)的更多信息。
除了域的库之外,PyTorch 还提供了许多工具来简化数据加载。用户现在可以使用一些更完备的工具来加载和预处理文本分类数据集,例如 torch.utils.data.DataLoader 和 torch.utils.data.IterableDataset。以下是使用 DataLoader 包装数据的几行代码。更多例子可以在这里查看(https://github.com/pytorch/text/tree/master/examples/text_classification)。
支持视频的 TORCHVISION 0.4
视频现在是 torchvision 中的一员,并且 torchvision 可以支持视频的数据加载、数据集、预训练模型和变换。TORCHVISION 0.4 版本包括:
用于读/写视频文件(包括音频)的高效 IO 源码,支持任意编码与任意格式。
标准视频数据集,与 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 兼容。
基于 Kinetics-400 数据集构建的预训练模型,用于视频(包括训练脚本)的动作分类。
用于训练用户自身视频模型的参考训练脚本。
我们希望在 PyTorch 中处理视频数据尽可能简单,并且不会影响性能。因此,我们去掉了需要事先重新编码视频的步骤,因为它会涉及到:
一个预处理步骤,该步骤将复制数据集并且重新编码它。
时间和空间的成本,因为这种重新编码操作非常耗时。
这个步骤通常需要使用外部脚本来执行重新编码。
此外,我们提供了一些实用程序类型的 API,比如:VideoClips,它通过创建一组视频中所有剪辑的索引,简化了在视频文件列表中枚举所有可能固定大小的剪辑的任务。它还允许用户能够为视频指定固定的帧速率。下面提供了 API 的示例:
其中,大多数面向用户的 API 都在类似于 PyTorch 的 Python 中,这使得它更加易于扩展。此外,底层实现进展非常快,torchvision 也尽可能少地从视频中即时解码,从而便于视频能够传送回剪辑片段。
有关 torchvision 0.4 更多的详细信息,请查看此处的发行说明(https://github.com/pytorch/vision/releases)。
原文链接
https://pytorch.org/blog/pytorch-1.2-and-domain-api-release/
GitHub 地址
雷锋网 AI 开发者 雷锋网