0
本文作者: 楊鯉萍 | 2019-08-09 18:40 |
雷鋒網(wǎng) AI 開發(fā)者按:近日,PyTorch 社區(qū)又添入了「新」工具,包括了更新后的 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。每項(xiàng)工具都進(jìn)行了新的優(yōu)化與改進(jìn),兼容性更強(qiáng),使用起來也更加便捷。PyTorch 發(fā)布了相關(guān)文章介紹了每個(gè)工具的更新細(xì)節(jié),雷鋒網(wǎng) AI 開發(fā)者將其整理與編譯如下。
自 PyTorch 1.0 發(fā)布以來,我們的社區(qū)不斷在進(jìn)行擴(kuò)展、添加入新的工具。這些發(fā)展為 PyTorch Hub 中越來越多可用的模型做出了極大的貢獻(xiàn),并不斷增加了其在研究和生產(chǎn)中的用途。
我們的核心目標(biāo)在于通過不斷向 PyTorch 中添加新功能來支持更多的研究和生產(chǎn),其中也包括通過 TorchScript 來將程序與 PyTorch 連接起來。TorchScript 是一種使用 PyTorch 代碼創(chuàng)建可序列化和可優(yōu)化模型的方法;任何 TorchScript 程序都可以從 Python 進(jìn)程中保存,并在不依賴于 Python 的進(jìn)程中實(shí)現(xiàn)加載。(https://pytorch.org/docs/stable/jit.html)
而現(xiàn)在,我們很高興地宣布我們已經(jīng)成功開發(fā)了四個(gè)新版本,包括 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。用戶現(xiàn)在可以在 pytorch.org 上(https://pytorch.org/get-started/locally/)開始使用這些版本。
通過使用 PyTorch 1.2,開源 ML 框架在生產(chǎn)應(yīng)用方面向前邁出了一大步,并增加了一個(gè)改進(jìn)的、更加完善的 TorchScript 環(huán)境。這些改進(jìn)使得用戶可以更容易建立生產(chǎn)模型,擴(kuò)展對(duì)導(dǎo)出 ONNX 格式模型的支持功能,并增強(qiáng)對(duì) Transformers 模塊的支持。
除了這些新功能之外,用戶對(duì) TensorBoard(https://pytorch.org/docs/stable/tensorboard.html)的使用也更便捷,現(xiàn)在只需輸入代碼「from torch.utils.tensorboard import SummaryWriter」,即可開始使用。
TorchScript 改進(jìn)
在 PyTorch 1.0 中加入 TorchScript 之后,它為 PyTorch 的 Eager 類模型提供了構(gòu)建途徑。TorchScript 編譯器將 PyTorch 模型轉(zhuǎn)換為靜態(tài)類型的圖形表示,為 Python 不可用受限環(huán)境中的優(yōu)化和執(zhí)行提供了機(jī)會(huì)。用戶可以將模型逐步轉(zhuǎn)換為 TorchScript,然后將編譯后的代碼與 Python 無縫混合即可。
PyTorch 1.2 還顯著擴(kuò)展了 TorchScript 對(duì) PyTorch 模型中使用的 Python 子集的支持度,并提供了一種新的、更易于使用的 API,用于將模型編譯為 TorchScript。有關(guān)詳細(xì)信息,可以參閱遷移指南(https://pytorch.org/docs/master/jit.html#migrating-to-pytorch-1-2-recursive-scripting-api);以下是新 API 的示例用法:
如需了解更多信息,請(qǐng)參閱 TorchScript 簡(jiǎn)介(https://pytorch.org/tutorials/beginner/Intro_to_TorchScript.html)和在 C ++中加載 PyTorch 模型的教程(https://pytorch.org/tutorials/advanced/cpp_export.html)。
ONNX EXPORT 改進(jìn)
在 ONNX 社區(qū)方面,我們?nèi)匀粫?huì)與開放的管理結(jié)構(gòu)、指導(dǎo)委員會(huì)成員、特殊興趣小組(SIG)和工作組(WGS)共同發(fā)展。在與 Microsoft 的合作中,我們?cè)黾恿藢?duì)導(dǎo)出 ONNX Opset 版本 7(v1.2)、8(v1.3)、9(v1.4)和 10(v1.5)的全面支持。同時(shí),我們還優(yōu)化了常量折疊(constant folding)的傳遞,用以支持最新版本的 ONNX Opset 10。
ScriptModule 也有相應(yīng)的改進(jìn),包括:支持多輸出、張量工廠表、元組作為輸入和輸出。此外,用戶現(xiàn)在可以設(shè)置個(gè)性化的標(biāo)記來導(dǎo)出自定義操作,并在導(dǎo)出期間指定輸入的動(dòng)態(tài)大小。所有主要改進(jìn)的內(nèi)容如下:
支持多種 Opset,包括在 Opset 10 中丟失導(dǎo)出、切片、翻轉(zhuǎn)和插值的功能。
ScriptModule 的改進(jìn),包括了支持多輸出、張量工廠、元組作為輸入和輸出。
支持了十幾個(gè)其它的 PyTorch 操作,包括導(dǎo)出自定義操作的能力。
許多重大修復(fù)和測(cè)試基礎(chǔ)改進(jìn)。
由 @ lara-hdr 在 Microsoft 提供了試用最新的教程(https://pytorch.org/tutorials/advanced/super_resolution_with_onnxruntime.html)。
NN.TRANSFORMER
在 PyTorch 1.2 中,我們現(xiàn)在包含一個(gè)標(biāo)準(zhǔn)的 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 模塊完全依賴注意力機(jī)制來構(gòu)建輸入和輸出之間的全局依賴關(guān)系;該模塊的各個(gè)組件經(jīng)過精心設(shè)計(jì),可以獨(dú)立使用。例如,模塊中的 nn.TransformerEncoder 組件可以在無需 nn.Transformer 的情況下單獨(dú)使用。其中,新 API 包括:
nn.Transformer
nn.TransformerEncoder 和 nn.TransformerEncoderLayer
nn.TransformerDecoder 和 nn.TransformerDecoderLayer
有關(guān)更多信息,請(qǐng)參閱 Transformer Layers(https://pytorch.org/docs/stable/nn.html#transformer-layers)文檔。有關(guān)完整的 PyTorch 1.2 發(fā)行說明,請(qǐng)參見此處(https://github.com/pytorch/pytorch/releases)。
PyTorch 域的庫(如 torchvision、torchtext 和 torchaudio)提供了對(duì)常用數(shù)據(jù)集、模型和轉(zhuǎn)換器的便捷訪問,可用于快速創(chuàng)建最先進(jìn)的基線模型。此外,它們還提供了常見代碼抽象集,以減少用戶可能不得不重復(fù)寫入代碼的麻煩。
由于研究領(lǐng)域有不同的要求,圍繞 PyTorch 出現(xiàn)了一個(gè)稱為 DAP I(Domain API)的專業(yè)庫生態(tài)系統(tǒng),以簡(jiǎn)化許多領(lǐng)域中新算法和現(xiàn)有算法的開發(fā)過程。我們很高興發(fā)布三個(gè)更新的 DAPI 庫,用于支持 PyTorch 1.2 核心版本的文本、音頻和視覺內(nèi)容。
TORCHAUDIO 0.3 與 KALDI 兼容性,新轉(zhuǎn)換器
Torchaudio 專注于機(jī)器理解音頻波形。它是一個(gè) ML 庫,提供相關(guān)的信號(hào)處理功能(但不是一般的信號(hào)處理庫)。它利用 PyTorch 的 GPU 為波形提供了許多工具和轉(zhuǎn)換的支持,并使數(shù)據(jù)加載和標(biāo)準(zhǔn)化更容易、更易讀。例如,它為使用 sox 的波形提供數(shù)據(jù)加載器,并為頻譜圖、重采樣和 mu-law 編碼與解碼等轉(zhuǎn)換提供數(shù)據(jù)加載器。
我們很高興地宣布 torchaudio 0.3.0 的可用性,重點(diǎn)是標(biāo)準(zhǔn)化和復(fù)數(shù)、轉(zhuǎn)換(重采樣)和兩個(gè)新的函數(shù)(phase_vocoder,ISTFT)、Kaldi 兼容性以及新的教程。Torchaudio 經(jīng)過重新設(shè)計(jì),已經(jīng)成為了 PyTorch 的擴(kuò)展功能,它也是 DAPI 生態(tài)系統(tǒng)的一部分。
標(biāo)準(zhǔn)化
解決機(jī)器學(xué)習(xí)問題的重要工作是數(shù)據(jù)準(zhǔn)備。在這個(gè)新版本中,我們更新了 torchaudio 的轉(zhuǎn)換接口,以便圍繞以下詞匯和約定進(jìn)行標(biāo)準(zhǔn)化。
假設(shè)張量具有通道作為第一維度,時(shí)間作為最后維度(適用時(shí));這將使得它與 PyTorch 的大小一致。對(duì)于大小的名稱,我們用前綴 n_(例如「大?。╪_freq,n_mel)的張量」)命名,而維度名稱則不具有該前綴(例如「維度張量(通道,時(shí)間)」);并且所有變換和函數(shù)的輸入我們現(xiàn)在首先要假定通道。這樣做是為了與 PyTorch 保持一致,PyTorch 具有后跟樣本數(shù)量的通道,而且這個(gè)通道參數(shù)目前不推薦使用所有的轉(zhuǎn)換和函數(shù)。
輸出 STFT 表示為(channel,frequency,time, 2)。對(duì)于每個(gè)通道而言,列是特定窗口的傅里葉變換。因此,當(dāng)我們水平移動(dòng)時(shí),我們可以看到每列(傅里葉變換波形)隨時(shí)間的變化。這符合 librosa 的輸出,使我們不再需要在通過 Spectrogram、MelScale、MelSpectrogram 和 MFCC 來轉(zhuǎn)用我們的測(cè)試比較。此外,由于這些新的標(biāo)準(zhǔn),我們棄用了之前用于從一種信號(hào)形狀轉(zhuǎn)換到另一種形狀的 LC2CL 和 BLC2CBL。
作為此版本的一部分,我們還通過維數(shù)的張量 (…, 2) 引入了對(duì)復(fù)數(shù)的支持,并提供 magphase 將這樣的張量轉(zhuǎn)換為相應(yīng)的幅度和相位,以及類似的 complex_norm 和 angle 數(shù)據(jù)。
README(https://github.com/pytorch/audio/blob/v0.3.0/README.md#Conventions)中提供了標(biāo)準(zhǔn)化的詳細(xì)信息。
新函數(shù)、轉(zhuǎn)換器和 Kaldi 兼容性
在標(biāo)準(zhǔn)化之前,我們將狀態(tài)和計(jì)算分成了 torchaudio.transforms 和 torchaudio.functional 兩塊。
作為轉(zhuǎn)換器的一部分,我們?cè)?0.3.0 中添加了一個(gè)新的轉(zhuǎn)換模塊:Resample。Resample 可以將波形上采樣或下采樣到不同的頻率。
作為新函數(shù)的一部分,我們將介紹:
phase_vocoder 一個(gè)相位聲碼器,用于在不改變音調(diào)的情況下改變波形的速度。
ISTFT 反向 STFT,用于與 PyTorch 所提供的 STFT 實(shí)現(xiàn)兼容。
這種分離的設(shè)置允許我們使函數(shù)弱腳本化并在 0.3.0 中使用 JIT。因此,我們支持 JIT 和 CUDA 進(jìn)行以下的轉(zhuǎn)器:Spectrogram,AmplitudeToDB(原名 SpectrogramToDB)MelScale,MelSpectrogram,MFCC,MuLawEncoding,MuLawDecoding(原名 MuLawExpanding)。
我們現(xiàn)在還提供與 Kaldi 兼容的接口,以簡(jiǎn)化載入并減少用戶對(duì) Kaldi 代碼的依賴性。我們現(xiàn)在有一個(gè)接口可用于 spectrogram,fbank 和 resample_waveform。
新教程
為了展示新的標(biāo)準(zhǔn)和轉(zhuǎn)換,這里有一個(gè)新的教程(https://pytorch.org/tutorials/beginner/audio_preprocessing_tutorial.html)。教程中將演示用戶如何使用 torchaudio 進(jìn)行預(yù)處理波形;同時(shí)該教程也將介紹加載波形并對(duì)其應(yīng)用一些可用轉(zhuǎn)換的示例。
帶有監(jiān)督學(xué)習(xí)數(shù)據(jù)集的 TORCHTEXT 0.4
torchtext 的一個(gè)關(guān)鍵重點(diǎn)領(lǐng)域是提供有助于加速 NLP 研究的基本要素。其中包括輕松訪問常用數(shù)據(jù)集和基本預(yù)處理流程,用以處理基于原始文本的數(shù)據(jù)。torchtext 0.4.0 版本包括一些熱門的監(jiān)督學(xué)習(xí)基線模型,這些模型都帶有「one-command」的數(shù)據(jù)加載項(xiàng)。
這里也有教程(https://pytorch.org/tutorials/beginner/text_sentiment_ngrams_tutorial.html),用以說明如何使用新數(shù)據(jù)集進(jìn)行文本分類分析。我們還添加并改進(jìn)了一些函數(shù),例如 get_tokenizer 和 build_vocab_from_iterator,以便更容易支持之后更多的數(shù)據(jù)集。更多示例,可以在這里找到(https://github.com/pytorch/text/tree/master/examples/text_classification)。
文本分類是自然語言處理中的一項(xiàng)重要任務(wù),具有許多應(yīng)用,例如情感分析等等。新版本涵蓋了幾個(gè)用于監(jiān)督學(xué)習(xí)的主流文本分類數(shù)據(jù)集,包括:
AG_NEWS
SogouNews
DBpedia
YelpReviewPolarity
YelpReviewFull
YahooAnswers
AmazonReviewPolarity
AmazonReviewFull
每個(gè)數(shù)據(jù)集都有兩個(gè)部分(訓(xùn)練與測(cè)試),并且可以使用單個(gè)命令輕松加載。數(shù)據(jù)集還支持 ngrams 功能,可用于獲得有關(guān)局部字順序的部分信息。請(qǐng)查看此處的教程(https://pytorch.org/tutorials/beginner/text_sentiment_ngrams_tutorial.html),可以幫助你了解有關(guān)如何將新數(shù)據(jù)集用于監(jiān)督問題(如文本分類分析)的更多信息。
除了域的庫之外,PyTorch 還提供了許多工具來簡(jiǎn)化數(shù)據(jù)加載。用戶現(xiàn)在可以使用一些更完備的工具來加載和預(yù)處理文本分類數(shù)據(jù)集,例如 torch.utils.data.DataLoader 和 torch.utils.data.IterableDataset。以下是使用 DataLoader 包裝數(shù)據(jù)的幾行代碼。更多例子可以在這里查看(https://github.com/pytorch/text/tree/master/examples/text_classification)。
支持視頻的 TORCHVISION 0.4
視頻現(xiàn)在是 torchvision 中的一員,并且 torchvision 可以支持視頻的數(shù)據(jù)加載、數(shù)據(jù)集、預(yù)訓(xùn)練模型和變換。TORCHVISION 0.4 版本包括:
用于讀/寫視頻文件(包括音頻)的高效 IO 源碼,支持任意編碼與任意格式。
標(biāo)準(zhǔn)視頻數(shù)據(jù)集,與 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 兼容。
基于 Kinetics-400 數(shù)據(jù)集構(gòu)建的預(yù)訓(xùn)練模型,用于視頻(包括訓(xùn)練腳本)的動(dòng)作分類。
用于訓(xùn)練用戶自身視頻模型的參考訓(xùn)練腳本。
我們希望在 PyTorch 中處理視頻數(shù)據(jù)盡可能簡(jiǎn)單,并且不會(huì)影響性能。因此,我們?nèi)サ袅诵枰孪戎匦戮幋a視頻的步驟,因?yàn)樗鼤?huì)涉及到:
一個(gè)預(yù)處理步驟,該步驟將復(fù)制數(shù)據(jù)集并且重新編碼它。
時(shí)間和空間的成本,因?yàn)檫@種重新編碼操作非常耗時(shí)。
這個(gè)步驟通常需要使用外部腳本來執(zhí)行重新編碼。
此外,我們提供了一些實(shí)用程序類型的 API,比如:VideoClips,它通過創(chuàng)建一組視頻中所有剪輯的索引,簡(jiǎn)化了在視頻文件列表中枚舉所有可能固定大小的剪輯的任務(wù)。它還允許用戶能夠?yàn)橐曨l指定固定的幀速率。下面提供了 API 的示例:
其中,大多數(shù)面向用戶的 API 都在類似于 PyTorch 的 Python 中,這使得它更加易于擴(kuò)展。此外,底層實(shí)現(xiàn)進(jìn)展非???,torchvision 也盡可能少地從視頻中即時(shí)解碼,從而便于視頻能夠傳送回剪輯片段。
有關(guān) torchvision 0.4 更多的詳細(xì)信息,請(qǐng)查看此處的發(fā)行說明(https://github.com/pytorch/vision/releases)。
原文鏈接
https://pytorch.org/blog/pytorch-1.2-and-domain-api-release/
GitHub 地址
雷鋒網(wǎng) AI 開發(fā)者 雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。