DL:深度学习框架Pytorch、 Tensorflow各种角度对比
DL:深度學習框架Pytorch、 Tensorflow各種角度對比
?
?
?
?
目錄
先看兩個框架實現同樣功能的代碼
1、Pytorch、Tensorflow代碼比較
2、Tensorflow(數據即是代碼,代碼就是數據)+Pytorch(隨著進展定義、更改和執行節點)
3、TensorFlow —Google—像框架+靜態圖+公司好手,不易調試+額外概念(會話、圖、變量范圍、占位符),序列化更強大+支持移動和嵌入式部署+大規模分布式+強大的可視化工具
4、PyTorch —FaceBook—像庫+動態圖+科研好手,易理解且易調試+結合NumPy更易上手,小規模項目+支持分布式執行+暫時不支持分布式訓練
???????
?
?
?
?
相關文章
DL:深度學習框架Pytorch、 Tensorflow各種角度對比
DL:深度學習框架Pytorch、 Tensorflow各種角度對比——案例代碼實現
先看兩個框架實現同樣功能的代碼
1、Pytorch、Tensorflow代碼比較
DL框架之PyTorch:PyTorch的簡介、安裝、使用方法之詳細攻略
DL框架之Tensorflow:Tensorflow的簡介、安裝、使用方法之詳細攻略
DL:深度學習框架Pytorch、 Tensorflow各種角度對比——案例代碼實現
?
2、Tensorflow(數據即是代碼,代碼就是數據)+Pytorch(隨著進展定義、更改和執行節點)
? ? ? ? ?兩種框架都在張量上運行,把任何模型都看作一個有向非循環圖(DAG),但對于如何定義它們,PyTorch 和 TensorFlow 區別很大。
- 在便利性和上手難度上,PyTorch 遠勝于TensorFlow ,
(1)、原因是PyTorch 是基于動態圖,而TensorFlow 是基于靜態計算圖,因此PyTorch 能隨時打印tensor的值,但是TensorFlow 需要設置回調的方法才能打印. - 如果想在TensorFlow 中想判斷一個變量的值的正確性,只能使用assert方法,這一點確實TensorFlow 不及PyTorch ,
- 上手難度上PyTorch 也是比TensorFlow 容易。
? ? ? ? ?TensorFlow 遵循“數據即是代碼,代碼就是數據”的理念。在 TensorFlow 中,在跑模型之前會靜態的定義圖形。和外界的所有聯系都是通過 tf.Session 對象和 tf.Placeholder,它們都是會在模型運行被外部數據取代的張量。
? ? ? ? ?在 PyTorch 中,會更動態一些:你可以隨著進展定義、更改和執行節點,沒有特殊的會話界面或占位符。
? ? ? ? ?整體來看,PyTorch 和 Python 結合的更緊湊些,多數時候會感覺更原生。而在 TensorFlow 里寫東西時,有時你會覺得你的模型好像躲在一堵墻后面一樣,就通過墻上的幾個洞洞跟你交流。當然了,這也看每個人的喜好和品味。?PyTorch 更適用于研究、愛好者和小規模項目的快速原型開發。TensorFlow 更適合大規模部署,尤其是涉及跨平臺和嵌入式部署時。
?
3、TensorFlow —Google—像框架+靜態圖+公司好手,不易調試+額外概念(會話、圖、變量范圍、占位符),序列化更強大+支持移動和嵌入式部署+大規模分布式+強大的可視化工具
? ? ? ?PyTorch 開始會看起來很像一個框架。回想一下,編程框架會在特定領域為我們提供有用的抽象,用它們可以很方便的解決具體問題。而這是框架和庫的的本質區別之處。
- (1)、TensorFlow基于靜態圖:在 TensorFlow 中,圖結構是靜態的,也就是說圖在「編譯」之后再運行。需要先構建一個計算圖,構建好了之后,這樣一個計算圖是不能夠變的了,然后再傳入不同的數據進去,進行計算。即固定了計算的流程,所以變得不太靈活。
? ? 1)、如果要去改變計算的邏輯,或者隨著時間變化的計算邏輯,這樣的動態計算TensorFlow是實現不了的,或者是很麻煩。 - (2)、TensorFlow不易調試:調試 TensorFlow 則沒這么容易。它有兩個選擇,一是從會話中請求你想檢查的變量,而是學會使用 TensorFlow 調試器(tfdbg)。
? ? 1)、TensorFlow 則不同,你可以選擇用一個叫 tfdbg 的特殊工具,它能讓你在運行時評估 TensorFlow 表達式,瀏覽所有張量,在會話范圍中操作。當然,無法用它調試 Python 代碼,因此無需單獨使用 pdb。 -
(3)、TensorFlow上手需學習額外概念—會話、圖、變量范圍、占位符:可以將 TensorFlow 看作是一種嵌入 Python 的編程語言。當你編寫 TensorFlow 代碼時,它會被 Python編譯成圖(graph),然后由 TensorFlow 執行引擎運行。
? ? 1)、所以,TensorFlow 還有一些需要額外學習的概念,比如會話(session)、圖、變量范圍、占位符。要讓基本的模型跑起來也需要更多樣板代碼。上手 TensorFlow 的時間肯定會比 PyTorch 長。 -
(4)、TensorFlow的序列化更強大:TensorFlow 的 Saver 對象也很容易使用,而且也為檢查點提供了更多選擇。TensorFlow 在序列化方面的主要優勢是整個計算圖都可以保存為 protocol buffer。這既包括參數,也包括運算。然后這個圖可以用其它支持的語言(C++、Java)加載。對于不支持 Python 的部署環境來說,這是非常重要的功能。而且理論上,這個功能也可以在你修改模型的源代碼,但又想運行舊模型時為你提供幫助。
-
(5)、TensorFlow 支持移動和嵌入式部署:但是在 TensorFlow 上,要將模型部署到安卓或 iOS 上需要不小的工作量,但至少你不必使用 Java 或 C++ 重寫你模型的整個推理部分。
? ?1)、對于高性能服務器上的部署,還有 TensorFlow Serving 可用。除了性能方面的優勢,TensorFlow Serving 的另一個重要特性是無需中斷服務,就能實現模型的熱插拔。 -
(6)、TensorFlow 的數據加載 比較復雜:我還沒找到 TensorFlow 的非常有用的數據加載工具(讀取器、隊列、隊列運行器等等)。部分原因是要將你想并行運行的所有預處理代碼加入到 TensorFlow 圖中并不總是那么簡單直接(比如計算頻譜圖)。另外,TensorFlow 的 API 本身也更加冗長,學習起來也更難。
-
(7)、TensorFlow 的設備管理默認即可:設備管理的無縫性能非常好,通常你不需要指定任何東西,因為默認的設置就很好。比如說,TensorFlow 假設如果存在可用的 GPU,你就希望在 GPU 上運行。
? ? 1)、TensorFlow 設備管理的唯一缺陷是它會默認占用所有可用的 GPU 上的所有內存,即使真正用到的只有其中一個。但也有一種簡單的解決方案,就是指定 CUDA_VISIBLE_DEVICES。有時候人們會忘記這一點,就會讓 GPU 看起來很繁忙,盡管實際上它們啥也沒干。 -
(8)、TensorFlow的強大的可視化工具TensorBoard:TensorBoard 是一個用于可視化訓練機器學習模型各個方面的工具。它是 TensorFlow 項目產出的最有用的功能之一。僅需在訓練腳本中加入少許代碼,你就可以查看任何模型的訓練曲線和驗證結果。TensorBoard 作為一個網頁服務運行,可以尤其方便地可視化存儲在 headless 節點上的結果。
? ?1)、展示模型圖形、繪制標量變量、可視化分布和直方圖、可視化圖形 ?播放音頻 -
(9)、TensorFlow持支持分布式執行、支持大規模分布式訓練:在GPU的分布式計算上更為出色,在數據量巨大時效率比pytorch要高一些。
?
4、PyTorch —FaceBook—像庫+動態圖+科研好手,易理解且易調試+結合NumPy更易上手,小規模項目???????+支持分布式執行+暫時不支持分布式訓練
? ? ? ?TensorFlow 給人的感覺更像是一個庫,而非一個框架:所有的操作都為低階操作,你需要寫很多樣板代碼,即便你可能并不想寫(比如,一遍又一遍的定義方差和權重···)。
- (1)、PyTorch基于動態圖:創建和運行計算圖可能是這兩個框架差別最大的地方。在 PyTorch 中,圖結構是動態的,也就是說圖是在運行時創建的。即就和python的邏輯是一樣的,要對變量做任何操作都是靈活的。
- (2)、PyTorch容易理解且易調試: 簡單的圖構建方式更容易理解,但也許更重要的是也更容易調試。調試 PyTorch 代碼就跟調試 Python 代碼一樣。你可以使用 pdb,并且可以在任何地方設置斷點。
? ?1)、?PyTorch 的計算圖是在運行時定義,可以用 pdb,ipdb,PyCharm 這些 Python 調試工具或者以前的可靠的打印語句也行。 - (3)、PyTorch結合NumPy更易上手:PyTorch 本質上是支持 GPU 的 NumPy 替代,配備了可用于構建和訓練深度神經網絡的更高級的功能。所以如果你熟悉 NumPy、Python 和常用的深度學習抽象(卷積層、循環層、SGD 等),那 PyTorch 就很容易學。
-
(4)、PyTorch序列化的API比較簡單:在這兩種框架中,保存和加載模型都很簡單。PyTorch 有一個非常簡單的 API,既可以保存模型的所有權重,也可以 pickle(加工)整個類。
-
(5)、PyTorch不支持移動和嵌入式部署:而包括 PyTorch 在內的很多深度學習框架都沒有這個能力。
-
(6)、PyTorch的數據加載 API 設計得很好:數據集、采樣器和數據加載器的接口都是特定的。數據加載器可以接收一個數據集和一個采樣器,并根據該采樣器的調度得出數據集上的一個迭代器(iterator)。并行化數據加載很簡單,只需為數據加載器傳遞一個 num_workers 參數即可。
-
(7)、PyTorch 的設備管理必須指定:而在 PyTorch 中,你必須在啟用了 CUDA 之后明確地將所有東西移到 GPU 上。
-
(8)、PyTorch 的可視化只能調用matplotlib 、seaborn???????等庫:目前 PyTorch 并沒有可以和 Tensorboard 匹敵的工具,不過倒是存在一些集成功能。雖然也能用一些繪圖工具比如 matplotlib 和 seaborn
-
(9)、PyTorch 支持支持分布式執行、暫時不支持分布式訓練:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的DL:深度学习框架Pytorch、 Tensorflow各种角度对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HighNewTech:20190824
- 下一篇: DL之GRU:GRU算法相关论文、建立过