中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

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

2019-09-09    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

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

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

目錄

谷歌的 TensorFlow
Facebook 的 PyTorch
我們可以用 TensorFlow 和 PyTorch 構建什么?
PyTorch 和 TensorFlow 對比
PyTorch 和 TensorFlow 的優(yōu)點和缺點
PyTorch 和 TensorFlow 安裝、版本、更新
TensorFlow 還是 PyTorch?我的建議

谷歌的 TensorFlow

TensorFlow 是谷歌的開發(fā)者創(chuàng)造的一款開源的深度學習框架,于 2015 年發(fā)布。官方研究發(fā)布于論文《TensorFlow:異構分布式系統(tǒng)上的大規(guī)模機器學習》。

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

TensorFlow 現(xiàn)已被公司、企業(yè)與創(chuàng)業(yè)公司廣泛用于自動化工作任務和開發(fā)新系統(tǒng),其在分布式訓練支持、可擴展的生產(chǎn)和部署選項、多種設備(比如安卓)支持方面?zhèn)涫芎迷u。

Facebook 的 PyTorch

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

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

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

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

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

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

TensorFlow 頂級項目

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

Sonnet:這是一個基于 TensorFlow 的軟件庫,可用于構建復雜的神經(jīng)網(wǎng)絡:https://sonnet.dev/

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

PyTorch 頂級項目

CheXNet:使用深度學習來分析胸部 X 光照片,能實現(xiàn)放射科醫(yī)生水平的肺炎監(jiān)測: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 和官網(wǎng)上找到更多。

PyTorch 和 TensorFlow 對比

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

 

 

機制:動態(tài)圖定義與靜態(tài)圖定義

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

一個用于定義計算圖以及在各種不同硬件上執(zhí)行這些圖的運行時間的軟件庫。

一個具有許多優(yōu)點的計算圖(后面很快就會介紹這些優(yōu)點)。

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

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

 

 

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

 

 

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

計算圖的按需和動態(tài)構建
Autograd:執(zhí)行動態(tài)圖的自動微分

可以在下圖中看到,圖會隨著執(zhí)行過程而改變和執(zhí)行節(jié)點,沒有特殊的會話接口或占位符。整體而言,這個框架與 Python 語言的整合更緊密,大多數(shù)時候感覺更本地化。因此,PyTorch 是更 Python 化的框架,而 TensorFlow 則感覺完全是一種新語言。

 

 

根據(jù)你所用的框架,在軟件領域有很大的不同。TensorFlow 提供了使用 TensorFlowFold 庫實現(xiàn)動態(tài)圖的方式,而 PyTorch 的動態(tài)圖是內置的。

分布式訓練

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

 

 

可視化

在訓練過程的可視化方面,TensorFlow 更有優(yōu)勢?梢暬軒椭_發(fā)者跟蹤訓練過程以及實現(xiàn)更方便的調試。TensorFlow 的可視化庫名為 TensorBoard。PyTorch 開發(fā)者則使用 Visdom,但是 Visdom 提供的功能很簡單且有限,所以 TensorBoard 在訓練過程可視化方面更好。

TensorBoard 的特性:

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

 

 

在 TensorBoard 中可視化訓練

Visdom 的特性:

處理回調
繪制圖表和細節(jié)
管理環(huán)境

 

 

在 Visdom 中可視化訓練

生產(chǎn)部署

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

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

用 PyTorch 和 TensorFlow 定義一個簡單的神經(jīng)網(wǎng)絡

我們比較一下如何在 PyTorch 和 TensorFlow 中聲明神經(jīng)網(wǎng)絡。

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

 

 

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

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

 

 

TensorFlow 和 PyTorch 的優(yōu)缺點

TensorFlow和PyTorch各有其優(yōu)缺點。

TensorFlow 的優(yōu)點:

簡單的內置高級 API
使用 TensorBoard 可視化訓練
通過 TensorFlow serving 容易實現(xiàn)生產(chǎn)部署
很容易的移動平臺支持
開源
良好的文檔和社區(qū)支持

TensorFlow 的缺點:

靜態(tài)圖
調試方法
難以快速修改

PyTorch 的優(yōu)點:

類 Python 的代碼
動態(tài)圖
輕松快速的編輯
良好的文檔和社區(qū)支持
開源
很多項目都使用 PyTorch

PyTorch 的缺點:

可視化需要第三方
生產(chǎn)部署需要 API 服務器

PyTorch 和 TensorFlow 安裝、版本、更新

PyTorch 和 TensorFlow 近期都發(fā)布了新版本:PyTorch 1.0(首個穩(wěn)定版)和 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.whl
pip3 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-only
pip install tensorflow
# Install TensorFlow 2.0 Beta
pip install tensorflow==2.0.0-beta1

要檢查安裝是否成功,可使用命令提示符或終端按以下步驟操作。

TensorFlow 還是 PyTorch?我的建議

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

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

原文鏈接:https://builtin.com/data-science/pytorch-vs-tensorflow

標簽: TensorFlow

版權申明:本站文章部分自網(wǎng)絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Apache Flink進階(一):Runtime核心機制剖析

下一篇:農(nóng)業(yè)銀行:銀行業(yè)中臺系統(tǒng)的建設思路