PyTorch是一個python包,提供兩類高級功能:
- 具有強大的GPU加速度的張量計算(類似numpy)
- 基於tape-based的自動微分(autodiff)係統的深度神經網絡
您可以重用自己喜歡的python包,例如numpy,scipy和Cython,以便在需要時擴展PyTorch。
從更細的粒度來說,PyTorch是一個由以下組件組成的庫:
包 | 描述 |
---|---|
torch | 像NumPy這樣的Tensor庫,具有強大的GPU支持 |
torch.autograd | 基於tape的自動微分庫,支持torch中所有可微分的Tensor操作 |
torch.nn | 與autograd深度集成的神經網絡庫,旨在實現最大的靈活性 |
torch.optim | 與torch.nn一起使用的優化包,使用標準優化方法,如SGD,RMSProp,LBFGS,Adam等。 |
torch.multiprocessing | python多處理,但具有神奇的內存共享跨進程傳遞torch Tensor。適用於數據加載和hogwild訓練。 |
torch.utils | 為DataLoader,Trainer和其他實用程序功能提供便捷的輔助包 |
torch.legacy(.nn /.optim) | 由於向後兼容性原因而從torch移植過的遺留代碼 |
通常使用PyTorch作為:
- 替代numpy使用GPU強大能力。
- 深度學習研究平台,提供最大的靈活性和速度
進一步闡述:
為GPU而生的Tensor庫
如果你使用numpy,那麽你使用了Tensors(a.k.a ndarray)。
PyTorch提供可以在CPU或GPU上運行的Tensors,並且可以大幅加速計算。
我們提供各種張量程序,以加速和滿足您的科學計算需求,如切片,索引,數學運算,線性代數,約簡。這些操作都非常快!
動態神經網絡:基於磁帶模式的Autograd
PyTorch有一種獨特的構建神經網絡的方法:使用和重放錄音機。
大多數框架如TensorFlow
,Theano
,Caffe
和CNTK
有一個靜態的世界觀。人們必須建立一個神經網絡,並一次又一次地重複使用相同的結構。改變網絡的行為方式意味著必須從頭開始。
使用PyTorch,我們使用一種名為Reverse-mode auto-differentiation的技術,它允許您以零滯後或開銷任意改變網絡的行為方式。我們的靈感來自幾個關於這個主題的研究論文,以及當前和過去的工作,如autograd,autograd,Chainer等
雖然這種技術並不是PyTorch獨有的,但它是迄今為止最快的實現之一。您可以獲得最佳的速度和靈活性,以進行狂熱的研究。
Pytorch跟Python的關係
PyTorch不是Python綁定到monolothic C++的框架。它被構建為深入集成到Python中。您可以像使用numpy /scipy /scikit-learn等自然地使用它。您可以使用自己喜歡的庫編寫新的神經網絡層,使用Cython和Numba等軟件包。我們的目標是在適當的時候不要重新發明輪子。
體驗
PyTorch設計直觀,線性思維,易於使用。當您執行一行代碼時,它會被執行。沒有所謂的全運行環境的異步視圖。當您進入調試器或接收錯誤消息和堆棧跟蹤時,理解它們是straight-forward。 stack-trace指向您的代碼定義的確切位置。我們希望您不要因為堆棧跟蹤錯誤或異步和不透明的執行引擎,而花費數小時調試代碼。
快速和精益
PyTorch具有最小的框架開銷。我們集成了英特爾MKL和NVIDIA(CuDNN,NCCL)等加速庫,以最大限度地提高速度。其核心是CPU和GPU Tensor和神經網絡後端(TH,THC,THNN,THCUNN)作為具有C99 API的獨立庫編寫。
它們已經成熟並經過多年的測試。
因此,PyTorch非常快 – 無論你運行小型還是大型神經網絡。
與Torch或其他一些替代方案相比,PyTorch中的內存使用效率非常高。我們為GPU編寫了自定義內存分配器,以確保您的深度學習模型具有最大的內存效率。這使您能夠訓練比以前更大的深度學習模型。
擴展沒有痛苦
編寫新的神經網絡模塊,或與PyTorch的Tensor API連接,設計為straight-forward,並且具有最少的抽象。
您可以使用torch API在Python中編寫新的神經網絡層或者你最喜歡的基於numpy的庫,比如SciPy
如果您想用C/C++編寫圖層,我們會提供基於CFFI的擴展API,這是有效的,並且具有最少的樣板。
沒有需要編寫的包裝代碼。你可以在這裏看到一個例子。