TensorFlow與PyTorch之爭,哪個框架最適合深度學習

2020-12-11 機器之心Pro

選自builtin

作者:Vihar Kurama

機器之心編譯

參與:吳攀、杜偉

谷歌的 Tensorflow 與 Facebook 的 PyTorch 一直是頗受社區歡迎的兩種深度學習框架。那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。

如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。為了幫助開發這些架構,谷歌、Facebook 和 Uber 等科技巨頭已經為 Python 深度學習環境發布了多款框架,這讓人們可以更輕鬆地學習、構建和訓練不同類型的神經網絡。本文將詳細介紹和比較兩種流行的框架: TensorFlow 與 PyTorch。

目錄

谷歌的 TensorFlowFacebook 的 PyTorch我們可以用 TensorFlow 和 PyTorch 構建什麼?PyTorch 和 TensorFlow 對比PyTorch 和 TensorFlow 的優點和缺點PyTorch 和 TensorFlow 安裝、版本、更新TensorFlow 還是 PyTorch?我的建議

谷歌的 TensorFlow

TensorFlow 是谷歌的開發者創造的一款開源的深度學習框架,於 2015 年發布。官方研究發布於論文《TensorFlow:異構分布式系統上的大規模機器學習》。

論文地址:http://download.tensorflow.org/paper/whitepaper2015.pdf

TensorFlow 現已被公司、企業與創業公司廣泛用於自動化工作任務和開發新系統,其在分布式訓練支持、可擴展的生產和部署選項、多種設備(比如安卓)支持方面備受好評。

Facebook 的 PyTorch

PyTorch 是最新的深度學習框架之一,由 Facebook 的團隊開發,並於 2017 年在 GitHub 上開源。有關其開發的更多信息請參閱論文《PyTorch 中的自動微分》。

論文地址:https://openreview.net/pdf?id=BJJsrmfCZ

PyTorch 很簡潔、易於使用、支持動態計算圖而且內存使用很高效,因此越來越受歡迎。接下來還會更詳細地介紹。

我們可以用 TensorFlow 和 PyTorch 構建什麼?

神經網絡起初是被用於解決手寫數字識別或用相機識別汽車註冊車牌等簡單的分類問題。但隨著近來框架的發展以及英偉達高計算性能圖形處理單元(GPU)的進步,我們可以在 TB 級的數據上訓練神經網絡並求解遠遠更加複雜的問題。一個值得提及的成就是在 TensorFlow 和 PyTorch 中實現的卷積神經網絡在 ImageNet 上都達到了當前最佳的表現。訓練後的模型可以用在不同的應用中,比如目標檢測、圖像語義分割等等。

儘管神經網絡架構可以基於任何框架實現,但結果卻並不一樣。訓練過程有大量參數都與框架息息相關。舉個例子,如果你在 PyTorch 上訓練一個數據集,那麼你可以使用 GPU 來增強其訓練過程,因為它們運行在 CUDA(一種 C++ 後端)上。TensorFlow 也能使用 GPU,但它使用的是自己內置的 GPU 加速。因此,根據你所選框架的不同,訓練模型的時間也總是各不相同。

TensorFlow 頂級項目

Magenta:一個探索將機器學習用作創造過程的工具的開源研究項目:https://magenta.tensorflow.org/

Sonnet:這是一個基於 TensorFlow 的軟體庫,可用於構建複雜的神經網絡:https://sonnet.dev/

Ludwig:這是一個無需寫代碼就能訓練和測試深度學習模型的工具箱:https://uber.github.io/ludwig/

PyTorch 頂級項目

CheXNet:使用深度學習來分析胸部 X 光照片,能實現放射科醫生水平的肺炎監測:https://stanfordmlgroup.github.io/projects/chexnet/

PYRO:這是一種用 Python 編寫的通用概率程式語言(PPL),後端由 PyTorch 支持:https://pyro.ai (https://pyro.ai/)

Horizon:一個用於應用強化學習(Applied RL)的平臺:https://horizonrl.com (https://horizonrl.com/)

這些只是基於 TensorFlow 和 PyTorch 構建的少量框架和項目。你能在 TensorFlow 和 PyTorch 的 GitHub 和官網上找到更多。

PyTorch 和 TensorFlow 對比

PyTorch 和 TensorFlow 的關鍵差異是它們執行代碼的方式。這兩個框架都基於基礎數據類型張量(tensor)而工作。你可以將張量看作是下圖所示的多維數組。

機制:動態圖定義與靜態圖定義

TensorFlow 框架由兩個核心構建模塊組成:

一個用於定義計算圖以及在各種不同硬體上執行這些圖的運行時間的軟體庫。一個具有許多優點的計算圖(後面很快就會介紹這些優點)。

計算圖是一種將計算描述成有向圖的抽象方式。圖是一種由節點(頂點)和邊構成的數據結構,是由有向的邊成對連接的頂點的集合。

當你在 TensorFlow 中運行代碼時,計算圖是以靜態方式定義的。與外部世界的所有通信都是通過 tf.Sessionobject 和 tf.Placeholder 執行,它們是在運行時會被外部數據替換的張量。例如,看看以下代碼段:

下圖是 TensorFlow 中運行代碼之前以靜態方式生成計算圖的方式。計算圖的核心優勢是能實現並行化或依賴驅動式調度(dependency driving scheduling),這能讓訓練速度更快,更有效率。

類似於 TensorFlow,PyTorch 也有兩個核心模塊:

計算圖的按需和動態構建Autograd:執行動態圖的自動微分可以在下圖中看到,圖會隨著執行過程而改變和執行節點,沒有特殊的會話接口或佔位符。整體而言,這個框架與 Python 語言的整合更緊密,大多數時候感覺更本地化。因此,PyTorch 是更 Python 化的框架,而 TensorFlow 則感覺完全是一種新語言。

根據你所用的框架,在軟體領域有很大的不同。TensorFlow 提供了使用 TensorFlow Fold 庫實現動態圖的方式,而 PyTorch 的動態圖是內置的。

分布式訓練

PyTorch 和 TensorFlow 的一個主要差異特點是數據並行化。PyTorch 優化性能的方式是利用 Python 對異步執行的本地支持。而用 TensorFlow 時,你必須手動編寫代碼,並微調要在特定設備上運行的每個操作,以實現分布式訓練。但是,你可以將 PyTorch 中的所有功能都復現到 TensorFlow 中,但這需要做很多工作。下面的代碼片段展示了用 PyTorch 為模型實現分布式訓練的簡單示例:

可視化

在訓練過程的可視化方面,TensorFlow 更有優勢。可視化能幫助開發者跟蹤訓練過程以及實現更方便的調試。TensorFlow 的可視化庫名為 TensorBoard。PyTorch 開發者則使用 Visdom,但是 Visdom 提供的功能很簡單且有限,所以 TensorBoard 在訓練過程可視化方面更好。

TensorBoard 的特性:

跟蹤和可視化損失和準確度等指標可視化計算圖(操作和層)查看權重、偏差或其它張量隨時間變化的直方圖展示圖像、文本和音頻數據分析 TensorFlow 程序

在 TensorBoard 中可視化訓練

Visdom 的特性

處理回調繪製圖表和細節管理環境

在 Visdom 中可視化訓練

生產部署

在將訓練好的模型部署到生產方面,TensorFlow 顯然是贏家。我們可以直接使用 TensorFlow serving 在 TensorFlow 中部署模型,這是一種使用了 REST Client API 的框架。

使用 PyTorch 時,在最新的 1.0 穩定版中,生產部署要容易一些,但它沒有提供任何用於在網絡上直接部署模型的框架。你必須使用 Flask 或 Django 作為後端伺服器。所以,如果要考慮性能,TensorFlow serving 可能是更好的選擇。

用 PyTorch 和 TensorFlow 定義一個簡單的神經網絡

我們比較一下如何在 PyTorch 和 TensorFlow 中聲明神經網絡。

在 PyTorch 中,神經網絡是一個類,我們可以使用 torch.nn 軟體包導入構建架構所必需的層。所有的層都首先在 __init__() 方法中聲明,然後在 forward() 方法中定義輸入 x 在網絡所有層中的遍歷方式。最後,我們聲明一個變量模型並將其分配給定義的架構(model = NeuralNet())。

近期 Keras 被合併到了 TensorFlow 庫中,這是一個使用 TensorFlow 作為後端的神經網絡框架。從那時起,在 TensorFlow 中聲明層的句法就與 Keras 的句法類似了。首先,我們聲明變量並將其分配給我們將要聲明的架構類型,這裡的例子是一個 Sequential() 架構。

接下來,我們使用 model.add() 方法以序列方式直接添加層。層的類型可以從 tf.layers 導入,如下代碼片段所示:

TensorFlow 和 PyTorch 的優缺點

TensorFlow和PyTorch各有其優缺點。

TensorFlow 的優點:

簡單的內置高級 API使用 TensorBoard 可視化訓練通過 TensorFlow serving 容易實現生產部署很容易的移動平臺支持開源良好的文檔和社區支持TensorFlow 的缺點:

靜態圖調試方法難以快速修改PyTorch 的優點

類 Python 的代碼動態圖輕鬆快速的編輯良好的文檔和社區支持開源很多項目都使用 PyTorchPyTorch 的缺點:

可視化需要第三方生產部署需要 API 伺服器

PyTorch 和 TensorFlow 安裝、版本、更新

PyTorch 和 TensorFlow 近期都發布了新版本:PyTorch 1.0(首個穩定版)和 TensorFlow 2.0(beta 測試版)。這兩個版本都有重大的更新和新功能,讓訓練過程更高效、流暢和強大。

如果你要在自己的機器上安裝這些框架的最新版,你可以用原始碼 build 或通過 pip 安裝。

PyTorch 安裝

macOS 和 Linux

pip3 install torch torchvision

Windows

pip3 install https://download.pytorch.org/whl/cu90/torch-1.1.0-cp36-cp36m-win_amd64.whlpip3 install https://download.pytorch.org/whl/cu90/torchvision-0.3.0-cp36-cp36m-win_amd64.whl

TensorFlow 安裝

macOS、Linux 和 Windows

# Current stable release for CPU-onlypip install tensorflow# Install TensorFlow 2.0 Betapip install tensorflow==2.0.0-beta1要檢查安裝是否成功,可使用命令提示符或終端按以下步驟操作。

TensorFlow 還是 PyTorch?我的建議

TensorFlow 是一種非常強大和成熟的深度學習庫,具有很強的可視化功能和多個用於高級模型開發的選項。它有面向生產部署的選項,並且支持移動平臺。另一方面,PyTorch 框架還很年輕,擁有更強的社區動員,而且它對 Python 友好。

我的建議是如果你想更快速地開發和構建 AI 相關產品,TensorFlow 是很好的選擇。建議研究型開發者使用 PyTorch,因為它支持快速和動態的訓練。

原文連結:https://builtin.com/data-science/pytorch-vs-tensorflow

相關焦點

  • PYTORCH與TENSORFLOW:哪種框架最適合您的深度學習項目?
    為了幫助開發這些架構,諸如Google,Facebook和Uber之類的技術巨頭已經發布了適用於Python深度學習環境的各種框架,從而使學習,構建和訓練多樣化的神經網絡變得更加容易。在本文中,我們將研究兩個流行的框架並進行比較:PyTorch與TensorFlow。簡要地比較一下,最常用和依賴的Python框架TensorFlow和PyTorch。
  • 寫給純小白的深度學習環境搭建寶典:pytorch+tensorflow
    每天給小編五分鐘,小編用自己的代碼,讓你輕鬆學習人工智慧。本文將手把手帶你快速搭建你自己的深度學習環境,然後實現自己的第一個深度學習程序。野蠻智能,小白也能看懂的人工智慧。小編強烈建議為pytorch建立一個虛擬環境,這樣做的好處是方便我們同時使用多個深度學習框架,每個框架就對應一個虛擬環境,框架之間可以互不幹擾。具體步驟:Windows用戶搜索打開Anaconda Prompt,然後輸入:source create -n pytorch python=3.5,pytorch是這個虛擬環境的名字,你也可以給它起個別的名字,Python的版本我們也可以指定為3.6。
  • 從TensorFlow到PyTorch:九大深度學習框架哪款最適合你?
    那麼如何決定哪個開源框架最適合你呢?本文試圖通過對比深度學習各大框架的優缺點,從而為各位讀者提供一個參考。你最看好哪個深度學習框架呢?現在的許多機器學習框架都可以在圖像識別、手寫識別、視頻識別、語音識別、目標識別和自然語言處理等許多領域大展身手,但卻並沒有一個完美的深度神經網絡能解決你的所有業務問題。所以,本文希望下面的圖表和講解能夠提供直觀方法,幫助讀者解決業務問題。
  • 深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。所以自己測了下速度最快的3090配置環境,歡迎補充!
  • GitHub趨勢榜第一:TensorFlow+PyTorch深度學習資源大匯總
    來源:Github編輯整理:元子【新智元導讀】該項目是Jupyter Notebook中TensorFlow和PyTorch的各種深度學習架構內容非常豐富,適用於Python 3.7,適合當做工具書。本文搜集整理了Jupyter Notebook中TensorFlow和PyTorch的各種深度學習架構,模型和技巧,內容非常豐富,適用於Python 3.7,適合當做工具書。大家可以將內容按照需要進行分割,列印出來,或者做成電子書等,隨時查閱。
  • 資源 | 從TensorFlow到PyTorch:九大深度學習框架哪款最適合你?
    那麼如何決定哪個開源框架最適合你呢?本文試圖通過對比深度學習各大框架的優缺點,從而為各位讀者提供一個參考。你最看好哪個深度學習框架呢?現在的許多機器學習框架都可以在圖像識別、手寫識別、視頻識別、語音識別、目標識別和自然語言處理等許多領域大展身手,但卻並沒有一個完美的深度神經網絡能解決你的所有業務問題。所以,本文希望下面的圖表和講解能夠提供直觀方法,幫助讀者解決業務問題。
  • 2020,PyTorch真的趕上TensorFlow了嗎?
    這次,他調研了幾個框架在過去 6 個月(此次調研與上次調研之間的時間間隔)裡的增長情況。結果發現,TensorFlow 仍然是當時需求量最大、增長最快的框架,但 PyTorch 也不容小覷,在過去的六個月增速超過了原來的第二名 Keras。2019 年調研得出的深度學習框架增長排名。
  • RTX 3090 的深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。所以自己測了下速度最快的3090配置環境,歡迎補充!
  • 深度學習100+經典模型TensorFlow與Pytorch代碼實現大集合
    【導讀】深度學習在過去十年獲得了極大進展,出現很多新的模型,並且伴隨TensorFlow和Pytorch框架的出現,有很多實現,但對於初學者和很多從業人員
  • 深度學習框架搭建之PyTorch
    深度學習框架搭建之PyTorchPyTorch 簡介PyTorch 是由 Facebook 推出,目前一款發展與流行勢頭非常強勁的深度學習框架。PyTorch 與 NumPy 非常相似,可以說是它的替代者,支持 GPU 加速運算,用來搭建和訓練深度神經網絡。如果學習過 NumPy 以及常見的深度學習概念(如卷積層,循環層等),非常容易上手PyTorch。目前主流的深度學習框架主要有 TensorFlow,PyTorch,mxnet,caffe和Keras 等。
  • 2019 年機器學習框架之爭:PyTorch 和 TensorFlow 誰更有勝算?
    雷鋒網 AI 科技評論按:對於機器學習科研工作者和工業界從業人員來說,熟練掌握一種機器學習框架是必備技能之一。隨著深度學習技術發展的突飛猛進,機器學習框架市場也漸漸度過了初期野蠻生長的階段。大浪淘沙,目前仍然活躍的機器學習框架主要是 PyTorch 和 TensorFlow。本文從學術界和工業界兩個方面深度盤點了 2019 年機器學習框架的發展趨勢。
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    另一方面,在某些情況下,深度學習或深度遷移學習可以幫助你訓練更準確的模型。在這些情況下,你可以考慮使用PyTorch和TensorFlow,特別是如果你所需的訓練模型與其中一個框架模型庫中的模型類似。PyTorchPyTorch建立在舊版的Torch和Caffe2框架之上。
  • PyTorch稱霸頂會:CVPR論文佔比是TensorFlow 4 倍
    機器之心報導參與:杜偉在開源框架領域,PyTorch 與 TensorFlow 之爭一直存在,研究人員在寫論文時也會有不同的偏向。自 2009 年深度學習再度成為焦點以來,很多機器學習框架成為研究者和業界開發者的新寵。從早期的學術框架 Caffe、Theano 到如今 Pytorch、TensorFlow 這樣越來越大規模的開發框架。
  • Pytorch還是TensorFlow?頂會帶你覽趨勢
    ,PyTorch 與 TensorFlow 之爭一直存在,研究人員在寫論文時也會有不同的偏向。自 2009 年深度學習再度成為焦點以來,很多機器學習框架成為研究者和業界開發者的新寵。從早期的學術框架 Caffe、Theano 到如今 Pytorch、TensorFlow 這樣越來越大規模的開發框架。發展到 2020 年,我們可以看到國內外越來越多的科技巨頭、創業公司都在研發、使用自家的深度學習框架,如國內的也有百度飛槳、華為 MindSpore、曠視天元。
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    但進入機器學習和人工智慧領域並不是一件簡單的事情,目前市場上有許多大量的學習資源,許多開發者和想要進入的愛好者往往很難找到適合自己的發展路徑。其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。
  • 一行代碼切換TensorFlow與PyTorch,模型訓練也能用倆框架
    機器之心報導參與:思源你是否有時要用 PyTorch,有時又要跑 TensorFlow?這個項目就是你需要的,你可以在訓練中同時使用兩個框架,並端到端地轉換模型。也就是說 TensorFlow 寫的計算圖可以作為某個函數,直接應用到 Torch 的張量上,這操作也是很厲害了。
  • TensorFlow vs PyTorch:哪個是深度學習網絡編程的最佳框架呢?
    哪種框架最適合神經網絡編程呢?是TensorFlow還是PyTorch ?首先讓我們構建一個神經網絡模型,該模型分別使用PyTorch和Keras(TensorFlow)對手寫數字進行分類。matplotlib.pyplot as pltepochs = 10batch_size=64對於TensorFlow,您僅需要以下庫:import tensorflow as tf而對於
  • 從零開始搭建深度學習伺服器:TensorFlow + PyTorch + Torch
    本教程轉載於深度學習中文社區(studydl.com).在深度學習大行其道的今天,我們不應該停留於觀望的階段,我們應該多多上手進行實踐,下面將為大家介紹一下最簡單也是最基礎的內容,配置一個自己的深度學習伺服器.1.
  • TensorFlow、PyTorch、Keras:NLP框架哪家強
    非競爭性特點下文介紹了TensorFlow、PyTorch和Keras的幾個不同之處,便於讀者對這三個框架有初步了解。列出這些區別的重點不在於對三者做比較,而在於做一個初步介紹。)Keras· 是一個高級API,降低了深度學習框架的複雜程度· 可以在其他深度學習API,如TensorFlow、Theano和CNTK上運行· 本身並不是一個庫競爭性區別
  • 最流行的深度學習框架比較 I Tensorflow, PyTorch, Keras 與 FastAI
    TensorFlow無疑是深度學習框架的重量級冠軍。Pythorch是個年輕的菜鳥,很有風頭。🐝在過去的24個月裡,領先的深度學習框架的情況發生了怎樣的變化?為了回答這個問題,我查看了Monster、LinkedIn和SimplyHired上的招聘信息。我還評估了Google搜索量、GitHub活動、媒體文章、ArXiv文章和Quora主題關注者的變化。