偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

TensorFlow與PyTorch之爭(zhēng),哪個(gè)框架最適合深度學(xué)習(xí)

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

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

一、谷歌的 TensorFlow

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

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

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

二、Facebook 的 PyTorch

PyTorch 是最新的深度學(xué)習(xí)框架之一,由 Facebook 的團(tuán)隊(duì)開發(fā),并于 2017 年在 GitHub 上開源。有關(guān)其開發(fā)的更多信息請(qǐng)參閱論文《PyTorch 中的自動(dòng)微分》。

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

PyTorch 很簡(jiǎn)潔、易于使用、支持動(dòng)態(tài)計(jì)算圖而且內(nèi)存使用很高效,因此越來(lái)越受歡迎。接下來(lái)還會(huì)更詳細(xì)地介紹。

三、我們可以用 TensorFlow 和 PyTorch 構(gòu)建什么?

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

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

1. TensorFlow 優(yōu)秀項(xiàng)目

Magenta:一個(gè)探索將機(jī)器學(xué)習(xí)用作創(chuàng)造過(guò)程的工具的開源研究項(xiàng)目:https://magenta.tensorflow.org/

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

Ludwig:這是一個(gè)無(wú)需寫代碼就能訓(xùn)練和測(cè)試深度學(xué)習(xí)模型的工具箱:https://uber.github.io/ludwig/

2. PyTorch 優(yōu)秀項(xiàng)目

CheXNet:使用深度學(xué)習(xí)來(lái)分析胸部 X 光照片,能實(shí)現(xiàn)放射科醫(yī)生水平的肺炎監(jiān)測(cè):https://stanfordmlgroup.github.io/projects/chexnet/

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

Horizon:一個(gè)用于應(yīng)用強(qiáng)化學(xué)習(xí)(Applied RL)的平臺(tái):https://horizonrl.com (https://horizonrl.com/)

這些只是基于 TensorFlow 和 PyTorch 構(gòu)建的少量框架和項(xiàng)目。你能在 TensorFlow 和 PyTorch 的 GitHub 和官網(wǎng)上找到更多。

四、PyTorch 和 TensorFlow 對(duì)比

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

1. 機(jī)制:動(dòng)態(tài)圖定義與靜態(tài)圖定義

TensorFlow 框架由兩個(gè)核心構(gòu)建模塊組成:

  • 一個(gè)用于定義計(jì)算圖以及在各種不同硬件上執(zhí)行這些圖的運(yùn)行時(shí)間的軟件庫(kù)。
  • 一個(gè)具有許多優(yōu)點(diǎn)的計(jì)算圖(后面很快就會(huì)介紹這些優(yōu)點(diǎn))。

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

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

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

類似于 TensorFlow,PyTorch 也有兩個(gè)核心模塊:

  • 計(jì)算圖的按需和動(dòng)態(tài)構(gòu)建
  • Autograd:執(zhí)行動(dòng)態(tài)圖的自動(dòng)微分

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

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

2. 分布式訓(xùn)練

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

3. 可視化

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

TensorBoard 的特性:

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

在 TensorBoard 中可視化訓(xùn)練

Visdom 的特性:

  • 處理回調(diào)
  • 繪制圖表和細(xì)節(jié)
  • 管理環(huán)境

在 Visdom 中可視化訓(xùn)練

4. 生產(chǎn)部署

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

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

5. 用 PyTorch 和 TensorFlow 定義一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)

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

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

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

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

五、TensorFlow 和 PyTorch 的優(yōu)缺點(diǎn)

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

TensorFlow 的優(yōu)點(diǎn):

  • 簡(jiǎn)單的內(nèi)置高級(jí) API
  • 使用 TensorBoard 可視化訓(xùn)練
  • 通過(guò) TensorFlow serving 容易實(shí)現(xiàn)生產(chǎn)部署
  • 很容易的移動(dòng)平臺(tái)支持
  • 開源
  • 良好的文檔和社區(qū)支持

TensorFlow 的缺點(diǎn):

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

PyTorch 的優(yōu)點(diǎn)

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

PyTorch 的缺點(diǎn):

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

六、PyTorch 和 TensorFlow 安裝、版本、更新

PyTorch 和 TensorFlow 近期都發(fā)布了新版本:PyTorch 1.0(首個(gè)穩(wěn)定版)和 TensorFlow 2.0(beta 測(cè)試版)。這兩個(gè)版本都有重大的更新和新功能,讓訓(xùn)練過(guò)程更高效、流暢和強(qiáng)大。

如果你要在自己的機(jī)器上安裝這些框架的最新版,你可以用源代碼 build 或通過(guò) pip 安裝。

1. PyTorch 安裝

macOS 和 Linux

  1. pip3 install torch torchvision 

Windows

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

2. TensorFlow 安裝

macOS、Linux 和 Windows

  1. # Current stable release for CPU-only 
  2. pip install tensorflow 
  3. # Install TensorFlow 2.0 Beta 
  4. pip install tensorflow==2.0.0-beta1 

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

七、TensorFlow 還是 PyTorch?我的建議

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

我的建議是如果你想更快速地開發(fā)和構(gòu)建 AI 相關(guān)產(chǎn)品,TensorFlow 是很好的選擇。建議研究型開發(fā)者使用 PyTorch,因?yàn)樗С挚焖俸蛣?dòng)態(tài)的訓(xùn)練。

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

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2017-03-09 13:30:13

Linux游戲AMD

2023-01-13 10:46:42

2012-05-16 11:53:39

虛擬化

2022-07-11 10:17:19

Swift編程語(yǔ)言項(xiàng)目

2023-10-08 13:42:00

Python Web框架

2024-03-19 08:36:19

2019-03-10 22:21:47

框架AI開發(fā)

2017-01-15 11:14:47

超融合數(shù)據(jù)中心IT基礎(chǔ)設(shè)施

2016-07-14 16:27:54

linux

2020-03-17 15:55:12

Redis數(shù)據(jù)庫(kù)命令

2013-12-13 15:21:44

Html5企業(yè)移動(dòng)開發(fā)框架

2017-11-29 14:48:01

Node.JSRails語(yǔ)言

2016-01-26 09:58:28

云存儲(chǔ)云服務(wù)云安全

2022-09-21 10:40:57

TensorFlowPyTorchJAX

2015-12-11 13:36:17

WebAPPNodeJS

2009-01-19 16:54:50

數(shù)據(jù)挖掘CRM孤立點(diǎn)

2018-10-19 14:30:09

機(jī)器學(xué)習(xí)AI編程語(yǔ)言

2015-12-08 09:31:02

Linux系統(tǒng)操作系統(tǒng)

2012-03-14 14:33:18

Win8Linux

2016-12-12 14:15:37

Java大數(shù)據(jù)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)