新版 PyTorch 1.2 已發布:功能更多、兼容更全、操作更快
雷鋒網 AI 開發者按:近日,PyTorch 社區又添入了「新」工具,包括了更新後的 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。每項工具都進行了新的優化與改進,兼容性更強,使用起來也更加便捷。PyTorch 發布了相關文章介紹了每個工具的更新細節,雷鋒網 AI 開發者將其整理與編譯如下。
PyTorch 簡介自 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
通過使用 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)。
DAPI 庫更新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 地址
https://github.com/pytorch/pytorch
雷鋒網 AI 開發者 雷鋒網
※澳門大學與中科院共建人工智慧與機器人實驗室
※一位機器學習工程師的獨白:影響你未來職業生涯的 12 件小事
TAG:雷鋒網 |