Pytorch和TensorFlow的區別


轉自:https://blog.csdn.net/ibelieve8013/article/details/84261482

最近用了一點pytorch,想着稍稍理一下,這樣一個和TensorFlow抗衡的一個框架,究竟是何方神聖?

首先我們要搞清楚pytorch和TensorFlow的一點區別,那就是pytorch是一個動態的框架,而TensorFlow是一個靜態的框架。何為靜態的框架呢?我們知道,TensorFlow的尿性是,我們需要先構建一個TensorFlow的計算圖,構建好了之后,這樣一個計算圖是不能夠變的了,然后我們再傳入不同的數據進去,進行計算。這就帶來一個問題,就是固定了計算的流程,勢必帶來了不靈活性,如果我們要改變計算的邏輯,或者隨着時間變化的計算邏輯,這樣的動態計算TensorFlow是實現不了的,或者是很麻煩。

但是pytorch就是一個動態的框架,這就和python的邏輯是一樣的,要對變量做任何操作都是靈活的。

舉個簡單的例子,當我們要實現一個這樣的計算圖時:

 

 

 

用TensorFlow是這樣的:

而用pytorch是這樣的:

當然,里面都包含了建立前向計算圖,傳入變量數據,求梯度等操作,但是顯而易見,pytorch的代碼更為凝練。TensorFlow我也用得比較少,我本文重點說說pytorch的一些學習心得,一是總結,而是若有緣人能看見此文,也能當個參考。

其實一個好的框架應該要具備三點:對大的計算圖能方便的實現;能自動求變量的導數;能簡單的運行在GPU上;pytorch都做到了,但是現在很多公司用的都是TensorFlow,而pytorch由於比較靈活,在學術科研上用得比較多一點。鄙人認為可能,Google可能下手早一些,而Facebook作后來者,雖然靈活,但是很多公司已經入了TensorFlow的坑了,要全部遷移出來還是很費功夫;而且,TensorFlow在GPU的分布式計算上更為出色,在數據量巨大時效率比pytorch要高一些,我覺得這個也是一個重要的原因吧。

好的,不閑扯了。pytorch的一些心得,我總結一下:

首先,pytorch包括了三個層次:tensor,variable,Module。tensor,即張量的意思,由於是矩陣的運算,十分適合在GPU上跑。但是這樣一個tensor為什么還不夠呢?要搞出來一個variable,其實variable只是tensor的一個封裝,這樣一個封裝,最重要的目的,就是能夠保存住該variable在整個計算圖中的位置,詳細的說:能夠知道計算圖中各個變量之間的相互依賴關系。什么,你問這有什么用?當然是為了反向求梯度了;而Module,是一個更高的層次,如果使用這個Module,那可厲害了,這是一個神經網絡的層次,可以直接調用全連接層,卷積層,等等神經網絡。

感覺寫不完了,有人看再更吧,如果又興趣的話,可以去看我的這一課https://blog.csdn.net/ibelieve8013/article/details/84206410的導圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM