
深度學(xué)習(xí)10大框架對(duì)比分析
2016 年已經(jīng)過去,BEEVA Labs 數(shù)據(jù)分析師 Ricardo Guerrero Gomez-Ol 近日在 Medium 上發(fā)表了一篇文章,盤點(diǎn)了目前最流行的深度學(xué)習(xí)框架。為什么要做這一個(gè)盤點(diǎn)呢?他寫道:「我常聽到人們談?wù)?a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度學(xué)習(xí)——我該從哪里開始呢?TensorFlow 是現(xiàn)在最流行的吧?我聽說 Caffe 很常用,但會(huì)不會(huì)太難了?在 BEEVA Labs,我們常常需要應(yīng)對(duì)許多不同的深度學(xué)習(xí)庫,所以我希望能夠?qū)⑽覀兊陌l(fā)現(xiàn)和感想分享出來,幫助那些剛剛進(jìn)入深度學(xué)習(xí)這一美麗世界的人。
1 TensorFlow
對(duì)于那些聽說過深度學(xué)習(xí)但還沒有太過專門深入的人來說,TensorFlow 是他們最喜歡的深度學(xué)習(xí)框架,但在這里我要澄清一些事實(shí)。 在 TensorFlow 的官網(wǎng)上,它被定義為「一個(gè)用于機(jī)器智能的開源軟件庫」,但我覺得應(yīng)該這么定義:TensorFlow 是一個(gè)使用數(shù)據(jù)流圖(data flow graphs)進(jìn)行數(shù)值計(jì)算的開源軟件庫。在這里,他們沒有將 TensorFlow 包含在「深度學(xué)習(xí)框架」范圍內(nèi),而是和 Theano 一起被包含在「圖編譯器(graph compilers)」類別中。 在結(jié)束了 Udacity 的 Deep Learning 課程(https://www.udacity.com/course/deep-learning–ud730)之后,我的感覺是 TensorFlow 是一個(gè)非常好的框架,但是卻非常低層。使用 TensorFlow 需要編寫大量的代碼,你必須一遍又一遍地重新發(fā)明輪子。而且我并不是唯一一個(gè)這么想的人。Andrej Karpathy 在 Twitter 上就多次吐過槽: 推文:我希望 TensorFlow 能標(biāo)準(zhǔn)化我們的代碼,但它是低層面的,所以我們?cè)谄渖厦娴膶由戏值罁P(yáng)鑣了:Slim、PrettyTensor、Keras、TFLearn … 比如:我們?cè)? OpenAI 使用 TensorFlow,但我們似乎都更喜歡其它框架,我們有些人還寫自定義代碼。嘆 幾個(gè)月前,我去參加了「Google Experts Summit: TensorFlow, Machine Learning for everyone, with Sergio Guadarrama」。Sergio 是開發(fā) TensorFlow 的一位工程師,但他在會(huì)上沒有展示 TensorFlow,而是展示了一個(gè)在 TensorFlow 上工作的更高層的庫 tf.contrib:https://www.tensorflow.org/tutorials/tflearn/。我的看法是:他們內(nèi)部已經(jīng)意識(shí)到如果要讓更多人使用 TensorFlow,他們就需要以更高的抽象水平在其上創(chuàng)建一些層,從而簡化 TensorFlow 的使用。 TensorFlow 支持 Python 和 C++,也允許在 CPU 和 GPU 上的計(jì)算分布,甚至支持使用 gRPC 進(jìn)行水平擴(kuò)展。 總結(jié):TensorFlow 非常好,但你必須了解它好在哪里。如果你不想什么事都自己手動(dòng)去做和重新發(fā)明輪子,你可以使用更簡單的庫(安利一下 Keras)。
2 Theano
Theano 是最老牌和最穩(wěn)定的庫之一。據(jù)我所知,深度學(xué)習(xí)庫的開端不是 Caffe 就是 Theano。 和 TensorFlow 類似,Theano 是一個(gè)比較低層的庫。也因此它并不適合深度學(xué)習(xí),而更適合數(shù)值計(jì)算優(yōu)化。它支持自動(dòng)的函數(shù)梯度計(jì)算,帶有 Python 接口并集成了 Numpy,這使得它從一開始就成為了通用深度學(xué)習(xí)領(lǐng)域最常使用的庫之一。 今天,Theano 依然效果良好,但由于它不支持多 GPU 和水平擴(kuò)展,在 TensorFlow 的熱潮下(它們針對(duì)同一個(gè)領(lǐng)域),Theano 已然開始被遺忘了。
3 Keras
「You have just found Keras.」
上面這句話是你打開文檔頁面時(shí)看到的第一句話。我還記得我第一次發(fā)現(xiàn) Keras 的時(shí)候。那時(shí)候我正在柏林解決 Data Science Retreat 的最后一個(gè)項(xiàng)目,為此我努力進(jìn)入了深度學(xué)習(xí)庫的世界。我在起步時(shí)就已經(jīng)有了足夠的深度學(xué)習(xí)知識(shí),但我沒有時(shí)間自己手動(dòng)編寫功能,也沒有時(shí)間探索和學(xué)習(xí)一個(gè)新的庫(截止時(shí)間不到 2 個(gè)月,而我還有課要上)。然后我發(fā)現(xiàn)了 Keras。 我真的很喜歡 Keras,因?yàn)樗木浞ㄊ窍喈?dāng)明晰的,它的文檔也非常好(盡管相對(duì)較新),而且它支持我已經(jīng)掌握的語言 Python。它的使用非常簡單輕松;我們也能很直觀地了解它的指令、函數(shù)和每個(gè)模塊之間的鏈接方式。 Keras 是一個(gè)非常高層的庫,可以工作在 Theano 和 TensorFlow(可以配置)之上。另外,Keras 強(qiáng)調(diào)極簡主義——你只需幾行代碼就能構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)。在這里你可以比較一下 Keras 和 TensorFlow 實(shí)現(xiàn)相同功能時(shí)所需的代碼。
4 Lasagne
Lasagne 是一個(gè)工作在 Theano 之上的庫。它的使命是簡化一點(diǎn)深度學(xué)習(xí)算法之下的復(fù)雜計(jì)算,同時(shí)也提供了一個(gè)更加友好的接口(也是 Python 的)。這是一個(gè)老牌的庫,并且很長時(shí)間以來它都是一個(gè)擴(kuò)展能力很強(qiáng)的工具;但在我看來,它的發(fā)展速度趕不上 Keras。它們的適用領(lǐng)域都差不多,但 Keras 有更好的文檔、也更完整。
5 Caffe
Caffe 不只是最老牌的框架之一,而是老牌中的老牌。 在我看來,Caffe 有非常好的特性,但也有一些小缺點(diǎn)。起初的時(shí)候它并不是一個(gè)通用框架,而僅僅關(guān)注計(jì)算機(jī)視覺,但它具有非常好的通用性。在我們實(shí)驗(yàn)室的實(shí)驗(yàn)中,CaffeNet 架構(gòu)的訓(xùn)練時(shí)間在 Caffe 中比在 Keras 中(使用了 Theano 后端)少 5 倍。Caffe 的缺點(diǎn)是它不夠靈活。如果你想給它來一點(diǎn)新改變,那你就需要使用 C++ 和 CUDA 編程,不過你也可以使用 Python 或 Matlab 接口進(jìn)行一些小改變。 Caffe 的文檔非常貧乏。你需要花大量時(shí)間檢查代碼才能理解它(Xavier 初始化有什么用?Glorot 是什么?) Caffe 的最大缺點(diǎn)之一是它的安裝。它需要解決大量的依賴包……我曾經(jīng)安裝過 Caffe 兩次,真正痛苦至極。 但要清楚,Caffe 并不是一無是處。在投入了生產(chǎn)的計(jì)算機(jī)視覺系統(tǒng)的工具上,Caffe 是無可爭議的領(lǐng)導(dǎo)者。它非常穩(wěn)健非??焖佟N业慕ㄗh是:用 Keras 進(jìn)行實(shí)驗(yàn)和測試,然后遷移到 Caffe 中進(jìn)行生產(chǎn)。
6 DSSTNE
DSSTNE 的發(fā)音同 Destiny,是一個(gè)酷勁十足的框架卻總是被忽略。為什么?除去其他的因素不談,原因在于這個(gè)框架不具有普適性,不是為一般常見任務(wù)所設(shè)計(jì)的。DSSTNE 框架只做一件事——推薦系統(tǒng),但把這件事做到了極致。既不是為研究而設(shè)計(jì),也不是為測試 idea 而設(shè)計(jì)(來源其官方網(wǎng)站的宣傳語),DSSTNE 框架是為量產(chǎn)而設(shè)計(jì)。 我們已在 BEEVA 上做一些實(shí)驗(yàn)測試了,目前我已經(jīng)感覺到這是一個(gè)運(yùn)行非??斓墓ぞ卟⑶夷軌虻玫椒浅:玫倪\(yùn)行結(jié)果(平均準(zhǔn)確率均值——mAP 很高)。為了達(dá)到這一速度,DSSTNE 框架用 GPU 運(yùn)行,這也是它的弊端之一:不同于篇中分析的其他框架或者庫,這個(gè)框架不支持使用者隨意在 CPU 和 GPU 中切換,而這可能會(huì)對(duì)有些嘗試有用,但我們?cè)?DSSTNE 里做這樣的嘗試時(shí)是不被框架所允許的。 其他的感受就是迄今為止 DSSTNE 還不是一個(gè)足夠成熟的項(xiàng)目,而且它封裝的太嚴(yán)密了(「black box」)。如果我們想深入了解這個(gè)框架的運(yùn)行機(jī)制是什么,我們必須且只能去看它的源碼,并且你需要完成很多必須完成的設(shè)置(「TODO」)才可以看到。同時(shí),關(guān)于這個(gè)框架的在線教程不多,而能讓開發(fā)者進(jìn)行操作嘗試的指導(dǎo)就更少了。我的意見是再等 4 個(gè)月看看 DSSTNE 的最新版本。不能不說 DSSTEN 的確是一個(gè)很有意思的項(xiàng)目但還需要一點(diǎn)成長空間。 還想說明一點(diǎn),這個(gè)框架對(duì)編程能力沒有要求。DSSTNE 框架通過其終端的命令行來執(zhí)行相關(guān)操作。 到目前為止,很多我知道也很流行的框架和庫我還沒有用過,我不能給出更多具體的細(xì)節(jié)。
7 Torch
在這個(gè)世界上每天仍有很多戰(zhàn)爭,但是一個(gè)優(yōu)秀的「勇士」(西班牙語「Guerrero」)必須熟知哪些戰(zhàn)爭是需要去參加作戰(zhàn)的,哪些是可以選擇不參與的。 Torch 是一個(gè)很著名的框架,因巨頭 Facebook 的人工智能研究所用的框架是 Torch,并且在被谷歌收購之前 DeepMind 也是用的 Torch(收購之后 DeepMind 轉(zhuǎn)向了 TensorFlow)。Torch 的編程語言是 Lua,這就是我剛才所談的「戰(zhàn)爭」的具體所指。在目前深度學(xué)習(xí)編程語言絕大部分以 Python 實(shí)現(xiàn)為主的大趨勢下,一個(gè)以 Lua 為編程語言的框架的最大劣勢莫過于此。我從未用使用過這個(gè)語言,如果我想使用 Torch 這個(gè)工具,毫無疑問我需要先學(xué)習(xí) Lua 語言然后才能使用 Torch。這固然是一個(gè)合理的過程,但就我個(gè)人情況來說,我偏向于用 Python、Matlab 或者 C++的實(shí)現(xiàn)。
8 MXNet
mxnet 是一個(gè)支持大多數(shù)編程語言的框架之一,包括 Python,R,C++,Julia 等。但我覺得使用 R 語言的開發(fā)者會(huì)特別偏愛 mxnet,因?yàn)橹两駷橹惯€是 Python 以不可置疑的態(tài)勢稱霸深度學(xué)習(xí)語言的(Python 與 R 的對(duì)決,猜猜我會(huì)站哪邊?:-p) 老實(shí)說,在此之前我并沒有很關(guān)注 mxnet。但是當(dāng)亞馬遜 AWS 宣布選擇 mxnet 作為其深度學(xué)習(xí) AMI 的庫時(shí)觸發(fā)我開始關(guān)注 mxnet。我必須去了解一下。后來我獲知亞馬遜把 mxnet 列為其深度學(xué)習(xí)的參考庫并宣稱其巨大的橫向擴(kuò)展能力。我感覺到這里面有一些新的改變發(fā)生而且我必須深入了解。這也是為什么我們 2017 的 BEEVA 的技術(shù)測試名單里有 mnxet 的原因。 我對(duì)多 GPU 的擴(kuò)展能力有點(diǎn)疑慮并且我很原意去了解這樣實(shí)驗(yàn)的更多細(xì)節(jié),但目前我還是對(duì) mxnet 持懷疑態(tài)度。
9 DL4J
我接觸這一庫,是因?yàn)樗?documentation。當(dāng)時(shí)我正在尋找受限玻爾茲曼機(jī)、自編碼器,在 DL4J 中找到了這兩個(gè) documentation。里面的文件很清楚,有理論,有代碼案例。我必須得說 DL4J 的 documentation 簡直是藝術(shù)品,其他庫在記錄代碼的時(shí)候需要向它學(xué)習(xí)。 DL4J 背后的公司 Skymind 意識(shí)到,雖然在深度學(xué)習(xí)圈內(nèi) Python 是老大,但大部分程序員起自 Java,所以需要找到一個(gè)解決方案。DL4J 兼容 JVM,也適用 Java、Clojure 和 Scala,隨著 Scala 的起起落落,它也被很多有潛力的創(chuàng)業(yè)公司使用,所以我還會(huì)繼續(xù)緊追這個(gè)庫。 此外,Skymind 的 twitter 賬戶非常活躍,不斷公開最新的科學(xué)論文、案例和教程,及其推薦大家關(guān)注。
10 Cognitive Toolkit
認(rèn)知工具包(Cognitive Toolkit)之前被大家所知的縮略是 CNTK,但是最近又重命名回歸到 Cognitive Toolkit,很可能是想沾最近微軟認(rèn)知服務(wù)(Microsoft Cognitive services)的光。在公開的基準(zhǔn)測試上的表現(xiàn)來看,這個(gè)工具似乎很強(qiáng)勁,支持縱向和橫向的推移。 目前為止,Cognitive Toolkit 似乎不是很流行。我并沒有讀到很多關(guān)于使用這個(gè)庫的博客、在線實(shí)驗(yàn)案例或者在 Kaggle 里的相關(guān)評(píng)論。但是對(duì)我來說,一個(gè)背靠微軟研究的框架特別強(qiáng)調(diào)自己的推移能力讓我覺得有些奇怪,畢竟微軟研究團(tuán)隊(duì)可是在語音識(shí)別上打破世界紀(jì)錄并逼近人類水準(zhǔn)。 我在查看他們項(xiàng)目百科的一個(gè)范例的時(shí)候了解到 Cognitive Toolkit 在 Python 上的語法和 Keras 是非常相類似的(Cognitive Toolkit 也支持 C++),這不禁讓我在想(并不是確認(rèn))Keras 才是正確的方式。
總結(jié)
我的結(jié)論是:如果你想進(jìn)入這一領(lǐng)域, 你應(yīng)該首先學(xué)習(xí) Python 。盡管這一領(lǐng)域還支持其它很多語言,但 Python 是應(yīng)用范圍最廣而且最簡單的一個(gè)。但是為什么要選擇 Python 呢——畢竟 Python 速度這么慢?因?yàn)榇蠖鄶?shù)的庫都使用的是符號(hào)式語言(symbolic language)方法而非命令式語言(imperative language)方法。解釋一下也就是說:不是一條接一條地執(zhí)行你的指令,而是根據(jù)你給出的所有指令創(chuàng)建一個(gè)計(jì)算圖(computing graph)。這個(gè)圖被內(nèi)部優(yōu)化和編譯成可執(zhí)行的 C++ 代碼。這樣你就能同時(shí)利用上兩個(gè)世界的最優(yōu)之處:Python 帶來的開發(fā)速度和 C++ 帶來的執(zhí)行速度。 人們對(duì)深度學(xué)習(xí)的興趣越來越大了,但人們并不愿意等待算法訓(xùn)練所需的大量計(jì)算時(shí)間(而且我說的是 GPU,想都不要想只使用 CPU)。這也是多 GPU 支持、多機(jī)器上的水平擴(kuò)展甚至定制硬件最近開始得勢的原因。 深度學(xué)習(xí)領(lǐng)域非?;钴S、易變。很可能我現(xiàn)在所說的在 2017 年的中旬就變了。
建議
我的建議是,如果你是初學(xué)者,使用 Keras,如果不是初學(xué)者,也可以使用它。如果你參加過 Kaggle 比賽,你肯定注意到了 Kaggle 的兩大巨星:Keras 和 XGBoost。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03