pytorch框架的詳細介紹與應(yīng)用詳解
pytorch框架的詳細介紹與應(yīng)用
最近小阿奇在搭建模型的時候,發(fā)現(xiàn)pytorch框架十分的方便好用。所以特地整理了這個帖子,幫助自己捋一下思路打個基礎(chǔ),也方便大家交流學(xué)習(xí)。很用心的一篇博客哦~
一.pytorch概述
1.pytorch概念
Pytorch是torch的python版本,是由Facebook開源的神經(jīng)網(wǎng)絡(luò)框架,專門針對 GPU 加速的深度神經(jīng)網(wǎng)絡(luò)(DNN)編程。Torch 是一個經(jīng)典的對多維矩陣數(shù)據(jù)進行操作的張量(tensor )庫,在機器學(xué)習(xí)和其他數(shù)學(xué)密集型應(yīng)用有廣泛應(yīng)用。與Tensorflow的靜態(tài)計算圖不同,pytorch的計算圖是動態(tài)的,可以根據(jù)計算需要實時改變計算圖。
2.pytorch與tensorflow的區(qū)別
a.pytorch相對于tensorflow出現(xiàn)的較晚一些,主要是針對深度神經(jīng)網(wǎng)絡(luò)而開發(fā)出來,這幾年發(fā)展也是十分不錯;tensorflow出現(xiàn)的較早,它的優(yōu)點是分布式計算,在面臨較大數(shù)據(jù)時相對效率較高;
b.pytorch是動態(tài)框架,tensorflow是靜態(tài)框架,主要區(qū)別就是靜態(tài)框架在構(gòu)建計算圖的時候提前構(gòu)建好,之后則無法改變,固定了計算的流程,勢必帶來了不靈活性,如果我們要改變計算的邏輯,或者隨著時間變化的計算邏輯,這樣的動態(tài)計算TensorFlow是實現(xiàn)不了的;而動態(tài)框架可以根據(jù)具體計算情況進行改變
c.tensorflow的庫相對完備齊全,而pytorch還在完善中;所以tensorflow在可視化方面十分出色;
d.pytorch對python十分友好,更加python化的框架,而tensorflow的話更加像獨立的語言和框架
3.pytorch包含的內(nèi)容
1. overview
pytorch 由低層到上層主要有三大塊功能模塊,如下圖所示
1.1 張量計算引擎(tensor computation)
Tensor 計算引擎,類似 numpy 和 matlab,基本對象是tensor(類比 numpy 中的 ndarray 或 matlab 中的 array)。除提供基于 CPU 的常用操作的實現(xiàn)外,pytorch 還提供了高效的 GPU 實現(xiàn),這對于深度學(xué)習(xí)至關(guān)重要。
1.2 自動求導(dǎo)機制(autograd)
由于深度學(xué)習(xí)模型日趨復(fù)雜,因此,對自動求導(dǎo)的支持對于學(xué)習(xí)框架變得必不可少。pytorch 采用了動態(tài)求導(dǎo)機制,使用類似方法的框架包括: chainer,dynet。作為對比,theano,tensorflow 采用靜態(tài)自動求導(dǎo)機制。
1.3 神經(jīng)網(wǎng)絡(luò)的高層庫(NN)
pytorch 還提供了高層的。對于常用的網(wǎng)絡(luò)結(jié)構(gòu),如全連接、卷積、RNN 等。同時,pytorch 還提供了常用的、optimizer 及參數(shù)。
2. 自定義 Module
2.1 Function
Function 是 pytorch 自動求導(dǎo)機制的核心類。Function 是無參數(shù)或者說無狀態(tài)的,它只負責(zé)接收輸入,返回相應(yīng)的輸出;對于反向,它接收輸出相應(yīng)的梯度,返回輸入相應(yīng)的梯度。
2.2 Module
類似于 Function,Module 對象也是 callable ,輸入和輸出也是 Variable。不同的是,Module 是[可以]有參數(shù)的。Module 包含兩個主要部分:參數(shù)及計算邏輯(Function 調(diào)用)。由于ReLU激活函數(shù)沒有參數(shù),這里我們以最基本的全連接層為例來說明如何自定義Module。
二.pytorch常用模塊
名稱 | 作用 |
---|---|
torch | 類似 NumPy 的張量庫,強 GPU 支持 ; |
torch.autograd | 基于 tape 的自動區(qū)別庫,支持 torch 之中的所有可區(qū)分張量運行; |
torch.nn | 為最大化靈活性未涉及、與 autograd 深度整合的神經(jīng)網(wǎng)絡(luò)庫; |
torch.optim | 與 torch.nn 一起使用的優(yōu)化包,包含 SGD、RMSProp、LBFGS、Adam 等標(biāo)準優(yōu)化方式; |
torch.multiprocessing | python 多進程并發(fā),進程之間 torch Tensors 的內(nèi)存共享; |
torch.utils | 數(shù)據(jù)載入器。具有訓(xùn)練器和其他便利功能; |
torch.legacy(.nn/.optim) | 處于向后兼容性考慮,從 Torch 移植來的 legacy 代碼 |
torchvision | 獨立于pytorch的關(guān)于圖像操作的一些方便工具庫 |
和數(shù)值相關(guān)的
Tensor Variable Parameter
Tensor:
PyTorch中的計算基本都是基于Tensor的,可以說是PyTorch中的基本計算單元。
Variable:
Tensor的一個Wrapper,其中保存了Variable的創(chuàng)造者,Variable的值(tensor),還有Variable的梯度(Variable)。自動求導(dǎo)機制的核心組件,因為它不僅保存了 變量的值,還保存了變量是由哪個op產(chǎn)生的。這在反向傳導(dǎo)的過程中是十分重要的。
Variable的前向過程的計算包括兩個部分的計算,一個是其值的計算(即,Tensor的計算),還有就是Variable標(biāo)簽的計算。標(biāo)簽指的是什么呢?如果您看過PyTorch的官方文檔 Excluding subgraphs from backward 部分的話,您就會發(fā)現(xiàn)Variable還有兩個標(biāo)簽:requires_grad和volatile。標(biāo)簽的計算指的就是這個。
Parameter:
這個類是Variable的一個子集,PyTorch給出這個類的定義是為了在Module(下面會談到)中添加模型參數(shù)方便。
模型相關(guān)的
Function Module
Function:
如果您想在PyTorch中自定義OP的話,您需要繼承這個類,您需要在繼承的時候復(fù)寫forward和backward方法,可能還需要復(fù)寫__init__方法(由于篇幅控制,這里不再詳細贅述如果自定義OP)。您需要在forward中定義OP,在backward說明如何計算梯度。
關(guān)于Function,還需要知道的一點就是,F(xiàn)unction中forward和backward方法中進行計算的類型都是Tensor,而不是我們傳入的Variable。計算完forward和backward之后,會包裝成Varaible返回。這種設(shè)定倒是可以理解的,因為OP是一個整體嘛,OP內(nèi)部的計算不需要記錄creator
Module:
這個類和Function是有點區(qū)別的,回憶一下,我們定義Function的時候,F(xiàn)unciton本身是不需要變量的,而Module是變量和Function的結(jié)合體。在某些時候,我們更傾向稱這種結(jié)構(gòu)為Layer。但是這里既然這么叫,那就這么叫吧。
Module實際上是一個容器,我們可以繼承Module,在里面加幾個參數(shù),從而實現(xiàn)一個簡單全連接層。我們也可以繼承Module,在里面加入其它Module,從而實現(xiàn)整個VGG結(jié)構(gòu)。
到此這篇關(guān)于pytorch框架的詳細介紹與應(yīng)用的文章就介紹到這了,更多相關(guān)pytorch框架介紹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Python最長公共子串和最長公共子序列的實現(xiàn)
這篇文章主要介紹了詳解Python最長公共子串和最長公共子序列的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Pycharm Available Package無法顯示/安裝包的問題Error Loading Package Li
這篇文章主要介紹了Pycharm Available Package無法顯示/安裝包的問題Error Loading Package List解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09在django中使用post方法時,需要增加csrftoken的例子
這篇文章主要介紹了在django中使用post方法時,需要增加csrftoken的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03torch.utils.data.DataLoader與迭代器轉(zhuǎn)換操作
這篇文章主要介紹了torch.utils.data.DataLoader與迭代器轉(zhuǎn)換操作,文章內(nèi)容接受非常詳細,對正在學(xué)習(xí)或工作的你有一定的幫助,需要的朋友可以參考一下2022-02-02Xadmin+rules實現(xiàn)多選行權(quán)限方式(級聯(lián)效果)
這篇文章主要介紹了Xadmin+rules實現(xiàn)多選行權(quán)限方式(級聯(lián)效果),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python實現(xiàn)PPT/PPTX批量轉(zhuǎn)換成PDF
這篇文章主要為大家詳細介紹了如何使用Python將PowerPoint演示文稿(PPT、PPTX等)轉(zhuǎn)換為PDF文件,使演示內(nèi)容能夠在更多的設(shè)備上展示,感興趣的小伙伴可以了解下2024-01-01