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