天天看點

PyTorch 0.2釋出:更多NumPy特性,高階梯度、分布式訓練等

本文來自AI新媒體量子位(QbitAI)

Facebook的機器學習架構(之一)PyTorch今天釋出了新版本:0.2.0。

這一版本引入了NumPy風格的Broadcasting、Advanced Indexing,增加了高階梯度和分布式PyTorch。

PyTorch的GitHub新版釋出說明中介紹了0.2版的以下新特性:

Broadcasting是NumPy在算數運算中處理不同形狀數組的一種方式,在特定條件下,比較小的數組會通過比較大的數組進行“廣播”,來獲得相應的形狀。

PyTorch支援Broadcasting,讓它的Tensor arguments無需複制資料,就能自動擴充到相同大小。

Advanced Indexing也是一種NymPy特性。當選擇對象obj為非元組序列對象、ndarray(資料類型是整數或布爾時)、至少包含一個序列對象或ndarray的元組時,Advanced Indexing會激活。

NumPy現在部分支援NymPy風格的Advanced Indexing,讓使用者可以用相同的“[]-style”運算,在向量的每個次元上選擇任意索引,包括不鄰近的索引和重複索引。

PyTorch 0.2版本新增的高階梯度計算支援torch.XXX函數和最流行的nnlayers,在下一版本中可能會支援更多類型。

為了支援高階梯度,PyTorch 0.2引入了一種編寫函數autograd.Function的新形式,向下相容舊的函數編寫形式。

PyTorch推出了torch.distributed包,讓使用者能在多台機器之間交換tensor,進而支援将神經網絡的訓練擴充到多台機器上,也支援更大的小批次。

具分布式PyTorch具體能做什麼呢?舉個例子,它為實作Facebook今年6月釋出的論文Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour,提供了基礎。

論文位址:https://arxiv.org/abs/1706.02677

distributed包遵循MPI風格程式設計模型,這意味着可以通過send、recv、all_reduce等函數在節點之間交換tensor。

PyTorch還提供了一個ImageNet訓練案例來進行說明:https://github.com/pytorch/examples/tree/master/imagenet

0.2版本有一些新特性:

引入forward_pre_hook,在調用forward函數之前執行使用者指定的閉包。

友善通路非葉梯度;

DataParallel支援dicts作為輸入。

還引入了一些新的層,例如:

通過F.grid_sample和F.affine_grid實作空間變換網絡;

從論文Self-Normalizing Neural Networks(位址:https://arxiv.org/abs/1706.02515)引入了nn.SeLU and nn.AlphaDropout;

從論文Convolutional Sequence to Sequence Learning(位址:https://arxiv.org/abs/1705.03122)引入了nn.GLU;

通過torch.utils.weight_norm來實作權重歸一化;

nn.EmbeddingBag:建構詞袋模型時,執行一個嵌入後跟Sum或Mean是很常見的,對于可變長度序列,計算嵌入包設計masking。PyTorch 0.2的nn.EmbeddingBag能更有效率地計算嵌入式包,特别是對于可變長度序列。

除此之外,PyTorch 0.2還引入了torch中的新功能,新增幾類autograd支援,并修複了一些bug,詳情見:

GitHub上的0.2.0版釋出說明

https://github.com/pytorch/pytorch/releases/tag/v0.2.0

官方文檔

http://pytorch.org/docs/0.2.0/

下載下傳位址:

zip:

https://github.com/pytorch/pytorch/archive/v0.2.0.zip

tar.gz:

https://github.com/pytorch/pytorch/archive/v0.2.0.tar.gz

—— 完 ——

本文作者:李林

原文釋出時間:2017-08-07 

繼續閱讀