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

谷歌的 Tensorflow 與 Facebook 的 PyTorch 一直是頗受社區歡迎的兩種深度學習框架。那麼究竟哪一種框架最適宜本身手邊的深度學習項目呢?本文做者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了本身的建議。
選自builtin, 做者:Vihar Kurama,機器之心編譯,參與:吳攀、杜偉。

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

目錄

  • 谷歌的 TensorFlowgithub

  • Facebook 的 PyTorch編程

  • 咱們能夠用 TensorFlow 和 PyTorch 構建什麼?後端

  • PyTorch 和 TensorFlow 對比api

  • PyTorch 和 TensorFlow 的優勢和缺點數組

  • PyTorch 和 TensorFlow 安裝、版本、更新bash

  • 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 的代碼

  • 動態圖

  • 輕鬆快速的編輯

  • 良好的文檔和社區支持

  • 開源

  • 不少項目都使用 PyTorch

PyTorch 的缺點:
  • 可視化須要第三方

  • 生產部署須要 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
相關文章
相關標籤/搜索