您好,登錄后才能下訂單哦!
本篇內容介紹了“pytorch框架怎么應用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Pytorch是torch的python版本,是由Facebook開源的神經網絡框架,專門針對 GPU 加速的深度神經網絡(DNN)編程。Torch 是一個經典的對多維矩陣數據進行操作的張量(tensor )庫,在機器學習和其他數學密集型應用有廣泛應用。與Tensorflow的靜態(tài)計算圖不同,pytorch的計算圖是動態(tài)的,可以根據計算需要實時改變計算圖。
a.pytorch相對于tensorflow出現的較晚一些,主要是針對深度神經網絡而開發(fā)出來,這幾年發(fā)展也是十分不錯;tensorflow出現的較早,它的優(yōu)點是分布式計算,在面臨較大數據時相對效率較高;
b.pytorch是動態(tài)框架,tensorflow是靜態(tài)框架,主要區(qū)別就是靜態(tài)框架在構建計算圖的時候提前構建好,之后則無法改變,固定了計算的流程,勢必帶來了不靈活性,如果我們要改變計算的邏輯,或者隨著時間變化的計算邏輯,這樣的動態(tài)計算TensorFlow是實現不了的;而動態(tài)框架可以根據具體計算情況進行改變
c.tensorflow的庫相對完備齊全,而pytorch還在完善中;所以tensorflow在可視化方面十分出色;
d.pytorch對python十分友好,更加python化的框架,而tensorflow的話更加像獨立的語言和框架
1. overview
pytorch 由低層到上層主要有三大塊功能模塊,如下圖所示
1.1 張量計算引擎(tensor computation)
Tensor 計算引擎,類似 numpy 和 matlab,基本對象是tensor(類比 numpy 中的 ndarray 或 matlab 中的 array)。除提供基于 CPU 的常用操作的實現外,pytorch 還提供了高效的 GPU 實現,這對于深度學習至關重要。
1.2 自動求導機制(autograd)
由于深度學習模型日趨復雜,因此,對自動求導的支持對于學習框架變得必不可少。pytorch 采用了動態(tài)求導機制,使用類似方法的框架包括: chainer,dynet。作為對比,theano,tensorflow 采用靜態(tài)自動求導機制。
1.3 神經網絡的高層庫(NN)
pytorch 還提供了高層的。對于常用的網絡結構,如全連接、卷積、RNN 等。同時,pytorch 還提供了常用的、optimizer 及參數。
2. 自定義 Module
2.1 Function
Function 是 pytorch 自動求導機制的核心類。Function 是無參數或者說無狀態(tài)的,它只負責接收輸入,返回相應的輸出;對于反向,它接收輸出相應的梯度,返回輸入相應的梯度。
2.2 Module
類似于 Function,Module 對象也是 callable ,輸入和輸出也是 Variable。不同的是,Module 是[可以]有參數的。Module 包含兩個主要部分:參數及計算邏輯(Function 調用)。由于ReLU激活函數沒有參數,這里我們以最基本的全連接層為例來說明如何自定義Module。
名稱 | 作用 |
---|---|
torch | 類似 NumPy 的張量庫,強 GPU 支持 ; |
torch.autograd | 基于 tape 的自動區(qū)別庫,支持 torch 之中的所有可區(qū)分張量運行; |
torch.nn | 為最大化靈活性未涉及、與 autograd 深度整合的神經網絡庫; |
torch.optim | 與 torch.nn 一起使用的優(yōu)化包,包含 SGD、RMSProp、LBFGS、Adam 等標準優(yōu)化方式; |
torch.multiprocessing | python 多進程并發(fā),進程之間 torch Tensors 的內存共享; |
torch.utils | 數據載入器。具有訓練器和其他便利功能; |
torch.legacy(.nn/.optim) | 處于向后兼容性考慮,從 Torch 移植來的 legacy 代碼 |
torchvision | 獨立于pytorch的關于圖像操作的一些方便工具庫 |
和數值相關的
Tensor Variable Parameter
Tensor:
PyTorch中的計算基本都是基于Tensor的,可以說是PyTorch中的基本計算單元。
Variable:
Tensor的一個Wrapper,其中保存了Variable的創(chuàng)造者,Variable的值(tensor),還有Variable的梯度(Variable)。自動求導機制的核心組件,因為它不僅保存了 變量的值,還保存了變量是由哪個op產生的。這在反向傳導的過程中是十分重要的。
Variable的前向過程的計算包括兩個部分的計算,一個是其值的計算(即,Tensor的計算),還有就是Variable標簽的計算。標簽指的是什么呢?如果您看過PyTorch的官方文檔 Excluding subgraphs from backward 部分的話,您就會發(fā)現Variable還有兩個標簽:requires_grad和volatile。標簽的計算指的就是這個。
Parameter:
這個類是Variable的一個子集,PyTorch給出這個類的定義是為了在Module(下面會談到)中添加模型參數方便。
模型相關的
Function Module
Function:
如果您想在PyTorch中自定義OP的話,您需要繼承這個類,您需要在繼承的時候復寫forward和backward方法,可能還需要復寫__init__方法(由于篇幅控制,這里不再詳細贅述如果自定義OP)。您需要在forward中定義OP,在backward說明如何計算梯度。
關于Function,還需要知道的一點就是,Function中forward和backward方法中進行計算的類型都是Tensor,而不是我們傳入的Variable。計算完forward和backward之后,會包裝成Varaible返回。這種設定倒是可以理解的,因為OP是一個整體嘛,OP內部的計算不需要記錄creator
Module:
這個類和Function是有點區(qū)別的,回憶一下,我們定義Function的時候,Funciton本身是不需要變量的,而Module是變量和Function的結合體。在某些時候,我們更傾向稱這種結構為Layer。但是這里既然這么叫,那就這么叫吧。
Module實際上是一個容器,我們可以繼承Module,在里面加幾個參數,從而實現一個簡單全連接層。我們也可以繼承Module,在里面加入其它Module,從而實現整個VGG結構。
“pytorch框架怎么應用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。