狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > 團(tuán)隊(duì)拓展圖片

網(wǎng)站性能檢測評分

注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。

團(tuán)隊(duì)拓展圖片

TensorFlow和Caffe、MXNet、Keras等其他深度學(xué)習(xí)框架的對比 營銷視頻課程

img

韋君浩

關(guān)注

雷鋒網(wǎng)按:本文作者黃文堅(jiān),PPmoney 大數(shù)據(jù)算法總監(jiān),《 TensorFlow 實(shí)戰(zhàn)》作者。本文節(jié)選自《 TensorFlow 實(shí)戰(zhàn)》第二章。

在下周二(2月28日)雷鋒網(wǎng)硬創(chuàng)公開課欄目將會(huì)推出黃文堅(jiān)老師的公開課《深度學(xué)習(xí)之經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)的技術(shù)淺析》(),歡迎大家報(bào)名!點(diǎn)擊了解詳情

Google 近日發(fā)布了 TensorFlow 1.0 候選版,這第一個(gè)穩(wěn)定版將是深度學(xué)習(xí)框架發(fā)展中的里程碑的一步。自 TensorFlow 于 2015 年底正式開源,距今已有一年多,這期間 TensorFlow 不斷給人以驚喜。在這一年多時(shí)間,TensorFlow 已從初入深度學(xué)習(xí)框架大戰(zhàn)的新星,成為了幾近壟斷的行業(yè)事實(shí)標(biāo)準(zhǔn)。

主流深度學(xué)習(xí)框架對比

深度學(xué)習(xí)研究的熱潮持續(xù)高漲,各種開源深度學(xué)習(xí)框架也層出不窮,其中包括 TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon 等等。然而 TensorFlow 卻殺出重圍,在關(guān)注度和用戶數(shù)上都占據(jù)絕對優(yōu)勢,大有一統(tǒng)江湖之勢。表 2-1 所示為各個(gè)開源框架在GitHub上的數(shù)據(jù)統(tǒng)計(jì)(數(shù)據(jù)統(tǒng)計(jì)于 2017 年 1 月 3 日),可以看到 TensorFlow 在 star 數(shù)量、fork 數(shù)量、contributor 數(shù)量這三個(gè)數(shù)據(jù)上都完勝其他對手。

究其原因,主要是 Google 在業(yè)界的號召力確實(shí)強(qiáng)大,之前也有許多成功的開源項(xiàng)目,以及 Google 強(qiáng)大的人工智能研發(fā)水平,都讓大家對 Google 的深度學(xué)習(xí)框架充滿信心,以至于 TensorFlow 在 2015 年 11 月剛開源的第一個(gè)月就積累了 10000+ 的 star 。其次,TensorFlow 確實(shí)在很多方面擁有優(yōu)異的表現(xiàn),比如設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的代碼的簡潔度,分布式深度學(xué)習(xí)算法的執(zhí)行效率,還有部署的便利性,都是其得以勝出的亮點(diǎn)。如果一直關(guān)注著 TensorFlow 的開發(fā)進(jìn)度,就會(huì)發(fā)現(xiàn)基本上每星期 TensorFlow 都會(huì)有1萬行以上的代碼更新,多則數(shù)萬行。產(chǎn)品本身優(yōu)異的質(zhì)量、快速的迭代更新、活躍的社區(qū)和積極的反饋,形成了良性循環(huán),可以想見 TensorFlow 未來將繼續(xù)在各種深度學(xué)習(xí)框架中獨(dú)占鰲頭。

表2-1 各個(gè)開源框架在 GitHub 上的數(shù)據(jù)統(tǒng)計(jì)

觀察表2-1還可以發(fā)現(xiàn),Google、Microsoft、Facebook 等巨頭都參與了這場深度學(xué)習(xí)框架大戰(zhàn),此外,還有畢業(yè)于伯克利大學(xué)的賈揚(yáng)清主導(dǎo)開發(fā)的 Caffe,蒙特利爾大學(xué) Lisa Lab 團(tuán)隊(duì)開發(fā)的 Theano,以及其他個(gè)人或商業(yè)組織貢獻(xiàn)的框架。另外,可以看到各大主流框架基本都支持 Python,目前 Python 在科學(xué)計(jì)算和數(shù)據(jù)挖掘領(lǐng)域可以說是獨(dú)領(lǐng)風(fēng)騷。雖然有來自 R、Julia 等語言的競爭壓力,但是 Python 的各種庫實(shí)在是太完善了,Web 開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)預(yù)處理、數(shù)據(jù)庫連接、爬蟲等無所不能,有一個(gè)完美的生態(tài)環(huán)境。僅在數(shù)據(jù)挖據(jù)工具鏈上,Python 就有 NumPy、SciPy、Pandas、Scikit-learn、XGBoost 等組件,做數(shù)據(jù)采集和預(yù)處理都非常方便,并且之后的模型訓(xùn)練階段可以和 TensorFlow 等基于 Python 的深度學(xué)習(xí)框架完美銜接。

表 2-1 和圖 2-1 所示為對主流的深度學(xué)習(xí)框架 TensorFlow、Caffe、CNTK、Theano、Torch 在各個(gè)維度的評分,本書 2.2 節(jié)會(huì)對各個(gè)深度學(xué)習(xí)框架進(jìn)行比較詳細(xì)的介紹。

表2-2 主流深度學(xué)習(xí)框架在各個(gè)維度的評分

圖2-1 主流深度學(xué)習(xí)框架對比圖

各深度學(xué)習(xí)框架簡介

在本節(jié),我們先來看看目前各流行框架的異同,以及各自的特點(diǎn)和優(yōu)勢。

TensorFlow

TensorFlow 是相對高階的機(jī)器學(xué)習(xí)庫,用戶可以方便地用它設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),而不必為了追求高效率的實(shí)現(xiàn)親自寫 C++或 CUDA 代碼。它和 Theano 一樣都支持自動(dòng)求導(dǎo),用戶不需要再通過反向傳播求解梯度。其核心代碼和 Caffe 一樣是用 C++編寫的,使用 C++簡化了線上部署的復(fù)雜度,并讓手機(jī)這種內(nèi)存和CPU資源都緊張的設(shè)備可以運(yùn)行復(fù)雜模型(Python 則會(huì)比較消耗資源,并且執(zhí)行效率不高)。除了核心代碼的 C++接口,TensorFlow 還有官方的 Python、Go 和 Java 接口,是通過 SWIG(Simplified Wrapper and Interface Generator)實(shí)現(xiàn)的,這樣用戶就可以在一個(gè)硬件配置較好的機(jī)器中用 Python進(jìn)行實(shí)驗(yàn),并在資源比較緊張的嵌入式環(huán)境或需要低延遲的環(huán)境中用 C++部署模型。SWIG 支持給 C/C++代碼提供各種語言的接口,因此其他腳本語言的接口未來也可以通過 SWIG 方便地添加。不過使用 Python 時(shí)有一個(gè)影響效率的問題是,每一個(gè) mini-batch 要從 Python 中 feed 到網(wǎng)絡(luò)中,這個(gè)過程在 mini-batch 的數(shù)據(jù)量很小或者運(yùn)算時(shí)間很短時(shí),可能會(huì)帶來影響比較大的延遲?,F(xiàn)在 TensorFlow 還有非官方的 Julia、Node.js、R 的接口支持,地址如下。

Julia: http://github/malmaud/TensorFlow.jl

Node.js: http://github/node-tensorflow/node-tensorflow

R: http://github/rstudio/tensorflow

TensorFlow 也有內(nèi)置的 TF.Learn 和 TF.Slim 等上層組件可以幫助快速地設(shè)計(jì)新網(wǎng)絡(luò),并且兼容 Scikit-learn estimator 接口,可以方便地實(shí)現(xiàn) evaluate、grid search、cross validation 等功能。同時(shí) TensorFlow 不只局限于神經(jīng)網(wǎng)絡(luò),其數(shù)據(jù)流式圖支持非常自由的算法表達(dá),當(dāng)然也可以輕松實(shí)現(xiàn)深度學(xué)習(xí)以外的機(jī)器學(xué)習(xí)算法。事實(shí)上,只要可以將計(jì)算表示成計(jì)算圖的形式,就可以使用 TensorFlow 。用戶可以寫內(nèi)層循環(huán)代碼控制計(jì)算圖分支的計(jì)算,TensorFlow 會(huì)自動(dòng)將相關(guān)的分支轉(zhuǎn)為子圖并執(zhí)行迭代運(yùn)算。TensorFlow 也可以將計(jì)算圖中的各個(gè)節(jié)點(diǎn)分配到不同的設(shè)備執(zhí)行,充分利用硬件資源。定義新的節(jié)點(diǎn)只需要寫一個(gè) Python 函數(shù),如果沒有對應(yīng)的底層運(yùn)算核,那么可能需要寫 C++或者 CUDA 代碼實(shí)現(xiàn)運(yùn)算操作。

在數(shù)據(jù)并行模式上,TensorFlow 和 Parameter Server 很像,但 TensorFlow 有獨(dú)立的 Variable node,不像其他框架有一個(gè)全局統(tǒng)一的參數(shù)服務(wù)器,因此參數(shù)同步更自由。TensorFlow 和 Spark 的核心都是一個(gè)數(shù)據(jù)計(jì)算的流式圖,Spark 面向的是大規(guī)模的數(shù)據(jù),支持 SQL 等操作,而 TensorFlow 主要面向內(nèi)存足以裝載模型參數(shù)的環(huán)境,這樣可以最大化計(jì)算效率。

TensorFlow 的另外一個(gè)重要特點(diǎn)是它靈活的移植性,可以將同一份代碼幾乎不經(jīng)過修改就輕松地部署到有任意數(shù)量 CPU 或 GPU 的 PC、服務(wù)器或者移動(dòng)設(shè)備上。相比于 Theano,TensorFlow 還有一個(gè)優(yōu)勢就是它極快的編譯速度,在定義新網(wǎng)絡(luò)結(jié)構(gòu)時(shí),Theano 通常需要長時(shí)間的編譯,因此嘗試新模型需要比較大的代價(jià),而 TensorFlow 完全沒有這個(gè)問題。TensorFlow 還有功能強(qiáng)大的可視化組件 TensorBoard,能可視化網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練過程,對于觀察復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)和監(jiān)控長時(shí)間、大規(guī)模的訓(xùn)練很有幫助。TensorFlow 針對生產(chǎn)環(huán)境高度優(yōu)化,它產(chǎn)品級的高質(zhì)量代碼和設(shè)計(jì)都可以保證在生產(chǎn)環(huán)境中穩(wěn)定運(yùn)行,同時(shí)一旦 TensorFlow 廣泛地被工業(yè)界使用,將產(chǎn)生良性循環(huán),成為深度學(xué)習(xí)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。

除了支持常見的網(wǎng)絡(luò)結(jié)構(gòu)(卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurent Neural Network,RNN))外,TensorFlow 還支持深度強(qiáng)化學(xué)習(xí)乃至其他計(jì)算密集的科學(xué)計(jì)算(如偏微分方程求解等)。TensorFlow 此前不支持 symbolic loop,需要使用 Python 循環(huán)而無法進(jìn)行圖編譯優(yōu)化,但最近新加入的 XLA 已經(jīng)開始支持 JIT 和 AOT,另外它使用 bucketing trick 也可以比較高效地實(shí)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)。TensorFlow 的一個(gè)薄弱地方可能在于計(jì)算圖必須構(gòu)建為靜態(tài)圖,這讓很多計(jì)算變得難以實(shí)現(xiàn),尤其是序列預(yù)測中經(jīng)常使用的 beam search。

TensorFlow 的用戶能夠?qū)⒂?xùn)練好的模型方便地部署到多種硬件、操作系統(tǒng)平臺(tái)上,支持 Intel 和 AMD 的 CPU,通過 CUDA 支持 NVIDIA 的 GPU (最近也開始通過 OpenCL 支持 AMD 的 GPU,但沒有 CUDA 成熟),支持 Linux 和 Mac,最近在 0.12 版本中也開始嘗試支持 Windows。在工業(yè)生產(chǎn)環(huán)境中,硬件設(shè)備有些是最新款的,有些是用了幾年的老機(jī)型,來源可能比較復(fù)雜,TensorFlow 的異構(gòu)性讓它能夠全面地支持各種硬件和操作系統(tǒng)。同時(shí),其在 CPU 上的矩陣運(yùn)算庫使用了 Eigen 而不是 BLAS 庫,能夠基于 ARM 架構(gòu)編譯和優(yōu)化,因此在移動(dòng)設(shè)備(Android 和 iOS)上表現(xiàn)得很好。

TensorFlow 在最開始發(fā)布時(shí)只支持單機(jī),而且只支持 CUDA 6.5 和 cuDNN v2,并且沒有官方和其他深度學(xué)習(xí)框架的對比結(jié)果。在 2015 年年底,許多其他框架做了各種性能對比評測,每次 TensorFlow 都會(huì)作為較差的對照組出現(xiàn)。那個(gè)時(shí)期的 TensorFlow 真的不快,性能上僅和普遍認(rèn)為很慢的 Theano 比肩,在各個(gè)框架中可以算是墊底。但是憑借 Google 強(qiáng)大的開發(fā)實(shí)力,很快支持了新版的 cuDNN (目前支持cuDNN v5.1),在單 GPU 上的性能追上了其他框架。表 2-3 所示為 給出的各個(gè)框架在 AlexNet 上單 GPU 的性能評測。https://github/soumith/convnet-benchmarks

表2-3 各深度學(xué)習(xí)框架在 AlexNet 上的性能對比

目前在單 GPU 的條件下,絕大多數(shù)深度學(xué)習(xí)框架都依賴于 cuDNN,因此只要硬件計(jì)算能力或者內(nèi)存分配差異不大,最終訓(xùn)練速度不會(huì)相差太大。但是對于大規(guī)模深度學(xué)習(xí)來說,巨大的數(shù)據(jù)量使得單機(jī)很難在有限的時(shí)間完成訓(xùn)練。這時(shí)需要分布式計(jì)算使 GPU 集群乃至 TPU 集群并行計(jì)算,共同訓(xùn)練出一個(gè)模型,所以框架的分布式性能是至關(guān)重要的。TensorFlow 在 2016 年 4 月開源了分布式版本,使用 16 塊 GPU 可達(dá)單 GPU 的 15 倍提速,在 50 塊 GPU 時(shí)可達(dá)到 40 倍提速,分布式的效率很高。目前原生支持的分布式深度學(xué)習(xí)框架不多,只有 TensorFlow、CNTK、DeepLearning4J、MXNet 等。不過目前 TensorFlow 的設(shè)計(jì)對不同設(shè)備間的通信優(yōu)化得不是很好,其單機(jī)的 reduction 只能用 CPU 處理,分布式的通信使用基于 socket 的 RPC,而不是速度更快的 RDMA,所以其分布式性能可能還沒有達(dá)到最優(yōu)。

Google 在 2016 年 2 月開源了 TensorFlow Serving,這個(gè)組件可以將 TensorFlow 訓(xùn)練好的模型導(dǎo)出,并部署成可以對外提供預(yù)測服務(wù)的 RESTful 接口,如圖 2-2 所示。有了這個(gè)組件,TensorFlow 就可以實(shí)現(xiàn)應(yīng)用機(jī)器學(xué)習(xí)的全流程:從訓(xùn)練模型、調(diào)試參數(shù),到打包模型,最后部署服務(wù),名副其實(shí)是一個(gè)從研究到生產(chǎn)整條流水線都齊備的框架。這里引用 TensorFlow 內(nèi)部開發(fā)人員的描述:“ TensorFlow Serving 是一個(gè)為生產(chǎn)環(huán)境而設(shè)計(jì)的高性能的機(jī)器學(xué)習(xí)服務(wù)系統(tǒng)。它可以同時(shí)運(yùn)行多個(gè)大規(guī)模深度學(xué)習(xí)模型,支持模型生命周期管理、算法實(shí)驗(yàn),并可以高效地利用 GPU 資源,讓 TensorFlow 訓(xùn)練好的模型更快捷方便地投入到實(shí)際生產(chǎn)環(huán)境”。除了 TensorFlow 以外的其他框架都缺少為生產(chǎn)環(huán)境部署的考慮,而 Google 作為廣泛在實(shí)際產(chǎn)品中應(yīng)用深度學(xué)習(xí)的巨頭可能也意識到了這個(gè)機(jī)會(huì),因此開發(fā)了這個(gè)部署服務(wù)的平臺(tái)。TensorFlow Serving 可以說是一副王牌,將會(huì)幫 TensorFlow 成為行業(yè)標(biāo)準(zhǔn)做出巨大貢獻(xiàn)。

圖2-2 TensorFlow Serving 架構(gòu)

TensorBoard 是 TensorFlow 的一組 Web 應(yīng)用,用來監(jiān)控 TensorFlow 運(yùn)行過程,或可視化 Computation Graph。TensorBoard 目前支持五種可視化:標(biāo)量(scalars)、圖片(images)、音頻(audio)、直方圖(histograms)和計(jì)算圖(Computation Graph)。TensorBoard 的 Events Dashboard 可以用來持續(xù)地監(jiān)控運(yùn)行時(shí)的關(guān)鍵指標(biāo),比如 loss、學(xué)習(xí)速率(learning rate)或是驗(yàn)證集上的準(zhǔn)確率(accuracy);Image Dashboard 則可以展示訓(xùn)練過程中用戶設(shè)定保存的圖片,比如某個(gè)訓(xùn)練中間結(jié)果用 Matplotlib 等繪制(plot)出來的圖片;Graph Explorer 則可以完全展示一個(gè) TensorFlow 的計(jì)算圖,并且支持縮放拖曳和查看節(jié)點(diǎn)屬性。TensorBoard 的可視化效果如圖 2-3 和圖 2-4 所示。

圖2-3 TensorBoard 的 loss 標(biāo)量的可視化

圖2-4 TensorBoard 的模型結(jié)構(gòu)可視化

TensorFlow 擁有?...

img

在線咨詢

建站在線咨詢

img

微信咨詢

掃一掃添加
動(dòng)力姐姐微信

img
img

TOP