pytorch簡(jiǎn)介
一.Pytorch是什么?
Pytorch是torch的python版本,是由Facebook開(kāi)源的神經(jīng)網(wǎng)絡(luò)框架,專(zhuān)門(mén)針對(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ì)算圖。但由于Torch語(yǔ)言采用 Lua,導(dǎo)致在國(guó)內(nèi)一直很小眾,并逐漸被支持 Python 的 Tensorflow 搶走用戶。作為經(jīng)典機(jī)器學(xué)習(xí)庫(kù) Torch 的端口,PyTorch 為 Python 語(yǔ)言使用者提供了舒適的寫(xiě)代碼選擇。
二.為什么選擇 Pytorch?
1.簡(jiǎn)潔:
PyTorch的設(shè)計(jì)追求最少的封裝,盡量避免重復(fù)造輪子。不像 TensorFlow 中充斥著session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch 的設(shè)計(jì)遵循tensor→variable(autograd)→nn.Module 三個(gè)由低到高的抽象層次,分別代表高維數(shù)組(張量)、自動(dòng)求導(dǎo)(變量)和神經(jīng)網(wǎng)絡(luò)(層/模塊),而且這三個(gè)抽象之間聯(lián)系緊密,可以同時(shí)進(jìn)行修改和操作。 簡(jiǎn)潔的設(shè)計(jì)帶來(lái)的另外一個(gè)好處就是代碼易于理解。PyTorch的源碼只有TensorFlow的十分之一左右,更少的抽象、更直觀的設(shè)計(jì)使得PyTorch的源碼十分易于閱讀。
2.速度:
PyTorch 的靈活性不以速度為代價(jià),在許多評(píng)測(cè)中,PyTorch 的速度表現(xiàn)勝過(guò) TensorFlow和Keras 等框架??蚣艿倪\(yùn)行速度和程序員的編碼水平有極大關(guān)系,但同樣的算法,使用PyTorch實(shí)現(xiàn)的那個(gè)更有可能快過(guò)用其他框架實(shí)現(xiàn)的。
3.易用:
PyTorch 是所有的框架中面向?qū)ο笤O(shè)計(jì)的最優(yōu)雅的一個(gè)。PyTorch的面向?qū)ο蟮慕涌谠O(shè)計(jì)來(lái)源于Torch,而Torch的接口設(shè)計(jì)以靈活易用而著稱(chēng),Keras作者最初就是受Torch的啟發(fā)才開(kāi)發(fā)了Keras。PyTorch繼承了Torch的衣缽,尤其是API的設(shè)計(jì)和模塊的接口都與Torch高度一致。PyTorch的設(shè)計(jì)最符合人們的思維,它讓用戶盡可能地專(zhuān)注于實(shí)現(xiàn)自己的想法,即所思即所得,不需要考慮太多關(guān)于框架本身的束縛。
4.活躍的社區(qū):
PyTorch 提供了完整的文檔,循序漸進(jìn)的指南,作者親自維護(hù)的論壇 供用戶交流和求教問(wèn)題。Facebook 人工智能研究院對(duì) PyTorch 提供了強(qiáng)力支持,作為當(dāng)今排名前三的深度學(xué)習(xí)研究機(jī)構(gòu),F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開(kāi)發(fā)更新,不至于像許多由個(gè)人開(kāi)發(fā)的框架那樣曇花一現(xiàn)。
三.PyTorch 的架構(gòu)是怎樣的?
PyTorch(Caffe2) 通過(guò)混合前端,分布式訓(xùn)練以及工具和庫(kù)生態(tài)系統(tǒng)實(shí)現(xiàn)快速,靈活的實(shí)驗(yàn)和高效生產(chǎn)。PyTorch 和 TensorFlow 具有不同計(jì)算圖實(shí)現(xiàn)形式,TensorFlow 采用靜態(tài)圖機(jī)制(預(yù)定義后再使用),PyTorch采用動(dòng)態(tài)圖機(jī)制(運(yùn)行時(shí)動(dòng)態(tài)定義)。PyTorch 具有以下高級(jí)特征:
- 混合前端:新的混合前端在急切模式下提供易用性和靈活性,同時(shí)無(wú)縫轉(zhuǎn)換到圖形模式,以便在C ++運(yùn)行時(shí)環(huán)境中實(shí)現(xiàn)速度,優(yōu)化和功能。
- 分布式訓(xùn)練:通過(guò)利用本地支持集合操作的異步執(zhí)行和可從Python和C ++訪問(wèn)的對(duì)等通信,優(yōu)化了性能。
- Python優(yōu)先: PyTorch為了深入集成到Python中而構(gòu)建的,因此它可以與流行的庫(kù)和Cython和Numba等軟件包一起使用。
- 豐富的工具和庫(kù):活躍的研究人員和開(kāi)發(fā)人員社區(qū)建立了豐富的工具和庫(kù)生態(tài)系統(tǒng),用于擴(kuò)展PyTorch并支持從計(jì)算機(jī)視覺(jué)到強(qiáng)化學(xué)習(xí)等領(lǐng)域的開(kāi)發(fā)。
- 本機(jī)ONNX支持:以標(biāo)準(zhǔn)ONNX(開(kāi)放式神經(jīng)網(wǎng)絡(luò)交換)格式導(dǎo)出模型,以便直接訪問(wèn)與ONNX兼容的平臺(tái),運(yùn)行時(shí),可視化工具等。
- C++前端:C++前端是PyTorch的純C++接口,它遵循已建立的Python前端的設(shè)計(jì)和體系結(jié)構(gòu)。它旨在實(shí)現(xiàn)高性能,低延遲和裸機(jī)C++應(yīng)用程序的研究。 使用GPU和CPU優(yōu)化的深度學(xué)習(xí)張量庫(kù)。
四.Pytorch 與 tensorflow 之間的差異在哪里?
上面也將了PyTorch 最大優(yōu)勢(shì)是建立的神經(jīng)網(wǎng)絡(luò)是動(dòng)態(tài)的, 對(duì)比靜態(tài)的 Tensorflow, 它能更有效地處理一些問(wèn)題, 比如說(shuō) RNN 變化時(shí)間長(zhǎng)度的輸出。各有各的優(yōu)勢(shì)和劣勢(shì)。兩者都是大公司發(fā)布的, Tensorflow(Google)宣稱(chēng)在分布式訓(xùn)練上下了很大的功夫, 那就默認(rèn) Tensorflow 在分布式訓(xùn)練上要超出 Pytorch(Facebook),還有tensorboard可視化工具, 但是 Tensorflow 的靜態(tài)計(jì)算圖使得在 RNN 上有一點(diǎn)點(diǎn)被動(dòng) (雖然它用其他途徑解決了), 不過(guò)用 PyTorch 的時(shí)候, 會(huì)對(duì)這種動(dòng)態(tài)的 RNN 有更好的理解。而且 Tensorflow 的高度工業(yè)化, 它的底層代碼很難看懂, Pytorch 好那么一點(diǎn)點(diǎn), 如果深入 PytorchAPI, 至少能比看 Tensorflow 多看懂一點(diǎn)點(diǎn) Pytorch 的底層在干啥。
五.Pytorch有哪些常用工具包?
- torch :類(lèi)似 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 移植來(lái)的 legacy 代碼;
到此這篇關(guān)于pytorch簡(jiǎn)介的文章就介紹到這了,更多相關(guān)pytorch簡(jiǎn)介內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3.7 pyodbc完美配置訪問(wèn)access數(shù)據(jù)庫(kù)
最近小編需要學(xué)習(xí)python連接access數(shù)據(jù)庫(kù),發(fā)現(xiàn)很多朋友推薦pyodbc,那么這篇文章就先為大家介紹一下Python3.7下pyodbc的配置方法2019-10-10使用pycharm將自己項(xiàng)目代碼上傳github(小白教程)
github是一個(gè)代碼托管平臺(tái),本文主要介紹了使用pycharm將自己項(xiàng)目代碼上傳github,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Tensorflow tf.dynamic_partition矩陣拆分示例(Python3)
今天小編就為大家分享一篇Tensorflow tf.dynamic_partition矩陣拆分示例(Python3) ,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02pytest用yaml文件編寫(xiě)測(cè)試用例流程詳解
這篇文章主要介紹了pytest用yaml文件編寫(xiě)測(cè)試用例流程,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12tensorflow 實(shí)現(xiàn)打印pb模型的所有節(jié)點(diǎn)
今天小編就為大家分享一篇tensorflow 實(shí)現(xiàn)打印pb模型的所有節(jié)點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python基礎(chǔ)教程之簡(jiǎn)單入門(mén)說(shuō)明(變量和控制語(yǔ)言使用方法)
這篇文章主要介紹了開(kāi)始學(xué)習(xí)python的第一步需要知道的知識(shí)(變量和控制語(yǔ)言使用方法),需要的朋友可以參考下2014-03-03Python學(xué)習(xí)入門(mén)之區(qū)塊鏈詳解
區(qū)塊鏈的基礎(chǔ)概念很簡(jiǎn)單:一個(gè)分布式數(shù)據(jù)庫(kù),存儲(chǔ)一個(gè)不斷加長(zhǎng)的 list,list 中包含著許多有序的記錄。下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)入門(mén)之區(qū)塊鏈的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。2017-07-07python統(tǒng)計(jì)字符串中字母出現(xiàn)次數(shù)代碼實(shí)例
這篇文章主要介紹了python統(tǒng)計(jì)字符串中字母出現(xiàn)次數(shù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03