TensorFlow評述:最佳深度學(xué)習(xí)庫,且仍在不斷演進
譯文【51CTO.com快譯】隨著r1.5版本的推出,谷歌的這套開源機器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)庫迎來更為強大的功能、更高成熟度以及更低的學(xué)習(xí)與使用門檻。
如果大家去年關(guān)注過TensorFlow深度學(xué)習(xí)框架,就會發(fā)現(xiàn)其上手難度很高且成熟度有限。但如今,這套由谷歌打造的方案已經(jīng)徹底改頭換面。
自從2016年10月評測TensorFlow r0.10版本以來,谷歌的這套開源深度學(xué)習(xí)框架已經(jīng)變得更為成熟,實現(xiàn)了更多算法與部署選項,且編程難度也大大降低。TensorFlow如今已經(jīng)迎來r1.4.1版本(穩(wěn)定版本與Web說明文檔)、r1.5版本(候選發(fā)行版)以及預(yù)發(fā)布r1.6版本(主分支與每日構(gòu)建版本)。
TensorFlow項目可謂***活力。粗略計算來看,GitHub上的TensorFlow庫目前擁有2.7萬項提交,8.5萬顆星評以及4.2萬個fork。這些數(shù)字令人印象深刻,且直觀反映出人們對于TensorFlow項目的高度關(guān)注——甚至超越了Node.js庫的人氣。相比之下,由Amazon公司支持的另一套競爭性框架MXNet則活躍度相對較低:提交量不足7000條,星廉政約為1.3萬顆,fork則不足5000。2017年2月TensorFlow r1.0版本發(fā)布時的另一項統(tǒng)計數(shù)據(jù)顯示,TensorFlow目前在超過6000個在線開源代碼庫當中得到使用。
在今天的評測當中,我將集中討論截至2018年1月的TensorFlow發(fā)展現(xiàn)狀,同時展示去年其新增的各項重要功能。
TensorFlow功能
TensorFlow能夠?qū)崿F(xiàn)手寫數(shù)字分類、圖像識別、單詞嵌入、遞歸神經(jīng)網(wǎng)絡(luò)、序列到序列機器翻譯模型、自然語言處理以及基于PDE(即偏微分方程)模擬。另外,其還支持CPU與英偉達GPU。sequence-to-sequence項目可運行在Ubuntu Linux、MacOS、Android、iOS以及Windows(運行效果遠超以往)之上。其亦可支持配合訓(xùn)練當中所使用的模型實現(xiàn)規(guī)?;a(chǎn)性預(yù)測,且靈活性更高。再有,其仍然保留了自動微分功能、在TensorBoard中提供一款模型可視化工具,并為Python語言提供***支持效果(抱歉了,R與Scala程序員們)。
自r0.10版本以來,TensorFlow陸續(xù)發(fā)布了眾多改進、增強以及額外功能,同時亦修復(fù)了各種bug。下面我將選擇其中一些重點問題作出說明——舉例來說,各版本升級了對CUDA及cuDNN庫的支持,并采用***英偉達GPU優(yōu)化代碼以提升性能。另外,其還實現(xiàn)了DHFS(Hadoop文件系統(tǒng))支持能力,Windows實現(xiàn)效果提升,并迎來新的求解器與更好的Go支持性。經(jīng)過幾個月的期待,TensorFlow圖形性能改進方案XLA(一款專用編譯器)與一款TensorFlow調(diào)試器得以發(fā)布。與此同時,TensorFlow項目還獲得了與PyPl以及pip等標準Python基礎(chǔ)架構(gòu)的更佳對接能力,亦能夠契合在科學(xué)計算領(lǐng)域得到廣泛使用的NumPy工具包。
我們還看到RNN(常用于自然語言處理類遞歸神經(jīng)網(wǎng)絡(luò))支持能力以及新的英特爾MKL(數(shù)學(xué)內(nèi)核庫)集成能力,這顯著提升了CPU在深度學(xué)習(xí)領(lǐng)域的性能表現(xiàn)。在編程易用性方面,內(nèi)置估算器(預(yù)定義模型層)被添加至為當中,其中包括多款回歸器與分類器。TensorFlow中新增的多套庫可用于統(tǒng)計分布、信號處理基元以及圖像的可微分重新采樣。作為TensorFlow的一套特定實現(xiàn)方案,Keras(提供專門的高級神經(jīng)網(wǎng)絡(luò)API,亦可運行在MXNet、Deeplearning4j、微軟Cognitive Tooltit以及Teano之上)被開發(fā)出來。社區(qū)開發(fā)進程顯示,其目前已經(jīng)能夠提供出色的實效——多個相關(guān)貢獻模塊已被納入內(nèi)核庫,另有一套服務(wù)器庫可實現(xiàn)生產(chǎn)部署優(yōu)化。
TensorFlow項目迎來一套訓(xùn)練數(shù)據(jù)集庫,且可實現(xiàn)向下兼容;這一切對用于開發(fā)標準訓(xùn)練數(shù)據(jù)集的新模型而言非常重要。此外,Java支持能力已經(jīng)實現(xiàn)并得到多次強化。***,在TensorFlow r 1.5當中,急切執(zhí)行(一個實驗性接口,可令TensorFlow實現(xiàn)對NumPy等命令式編程風(fēng)格的支持)與TensorFlow Lite(面向移動與嵌入式設(shè)備實現(xiàn)預(yù)測能力)的預(yù)覽版本正式到來。
TensorFlow安裝
總的來說,TensorFlow的安裝方式已經(jīng)得到了明顯改善。與以往一樣,TensorFlow仍然提供多種安裝方法,包括使用Python虛擬環(huán)境、“原生”pip、Docker以從來源處構(gòu)建。TensorFlow團隊建議使用虛擬環(huán)境進行安裝; 我個人則選擇使用“原生”pip,因為我之前將其安裝在自己的MacBook Pro上,我可不希望在磁盤空間不足以處理麻煩的卸載工作。
IDG
為Mac安裝一套TensorFlow每晚構(gòu)建版本,這是一種相對較新的安裝選項,且運行效果良好。在安裝/升級之后,我以交互方式對其標準TensorFlow功能進行了測試。
除了各發(fā)行版本的二進制文件外,TensorFlow團隊現(xiàn)在還為Linux、Mac以及Windows提供每晚構(gòu)建主分支的二進制代碼。使用以下命令即可輕松在Mac上進行每晚安裝:
- sudo pip install tf-nightly
盡管目前的master分支文檔聲稱,這三個平臺的CPU與GPU庫版本皆擁有每晚構(gòu)建資源,但我無法使用Mac-pip找到并安裝Mac平臺的GPU版本。根據(jù)我的經(jīng)驗,Mac GPU版本應(yīng)該會嘗試進行安裝,但始終無法成功; 直到r 1.2版本時,Mac GPU版本被正式放棄。我不太確定r1.6版本是否有計劃恢復(fù)Mac GPU版本,或者說TensorFlow團隊發(fā)布的每晚構(gòu)建說明文檔中存在錯誤。無論如何,在不改變當前安裝條件的前提下,目前的GPU版本快速安裝效果確實比以往更好。
盡管如此,MacBook Pro顯然并不是利用TensorFlow進行深度學(xué)習(xí)模型訓(xùn)練的理想設(shè)備。您可以使用包含一個或者多個新型高端英偉達GPU的Linux設(shè)備達成更出色的效果。此外,您也可以花個幾千美元組裝出自己的深度學(xué)習(xí)專用PC。如果您只是偶爾需要進行模型訓(xùn)練,則可在AWS、Azure、Google Compute Engine或者IBM Cloud上輕松利用配備GPU的實例運行TensorFlow。
使用TensorFlow
一年之前,TensorFlow項目主要存在兩個問題——難于學(xué)習(xí),而且代碼編寫量太大。如今,這兩個問題都已經(jīng)得到了解決。
為了簡化TensorFlow的學(xué)習(xí)門檻,TensorFlow團隊制作出更多學(xué)習(xí)資料,同時改進了現(xiàn)有入門教程。另外,亦有一些第三方推出自己的TensorFlow教程。此外,目前已經(jīng)付梓出版的TensorFlow書籍亦所在多有,外加一系列大線TensorFlow課程。大家甚至可以關(guān)注斯坦福大學(xué)的TensorFlow for Deep Learning Research(CS 20)課程,其在線提供全部演示文稿與講義內(nèi)容。
TensorFlow庫中的幾個新增部分還開始提供編碼要求更低的模型創(chuàng)建與訓(xùn)練接口。其中包括tf.kera,其提供引擎中立Keras工具包的一套純TensorFlow版本,外加負責(zé)提供多種高級模型處理功能的tf.estimator——可用于線性的回歸器與分類器、深層神經(jīng)網(wǎng)絡(luò)(簡稱DNN)、線性與DNN結(jié)合,外加一個可用于建立自有估算器的基類。此外,Dataset API允許用戶立足簡單且可復(fù)用的片段構(gòu)建復(fù)雜的輸入管道——意味著大家不再需要被迫選擇其一。正如TensorFlow-Keras教程中所言,您可以輕松將tf.keras、tf.data.dataset以及tf.estimator配合使用。
TensorFlow Lite
TensorFlow Lite目前正處于開發(fā)者預(yù)覽階段,屬于TensorFlow的一套輕量化版本,能夠運行在移動與嵌入式設(shè)備當中,從而以低延遲與低資源需求實現(xiàn)設(shè)備上的機器學(xué)習(xí)推理(但無法進行訓(xùn)練)。TensorFlow Lite還支持Android Neural Networks API的硬件加速機制。TensorFlow Lite模型非常小巧,足以運行在移動設(shè)備之上,甚至可以支持離線用例。
IDG
TensorFlow Lite允許小巧的神經(jīng)網(wǎng)絡(luò)模型運行在Android與iOS設(shè)備之上,甚至能夠?qū)崿F(xiàn)脫機執(zhí)行。該庫目前仍處于開發(fā)者預(yù)覽階段,且不保證向上或向下兼容性。
TensorFlow Lite的基本思路在于,當用戶訓(xùn)練出一套完整的TensorFlow模型,并將其轉(zhuǎn)換為TensorFlow Lite格式之后,即可在Android或iOS上的移動應(yīng)用當中使用轉(zhuǎn)換得到的文件。
當然,大家也可以利用經(jīng)過預(yù)告訓(xùn)練的TensorFlow Lite模型實現(xiàn)圖像分類或智能答復(fù)。智能答復(fù)會利用上下文信息提供高相關(guān)性消息,其在本質(zhì)上與谷歌在Gmail客戶端當中提供的回復(fù)預(yù)測功能完全一致。
另一個使用方式選項則是利用新的標記數(shù)據(jù)集對現(xiàn)有模型進行重新訓(xùn)練,這將顯著降低訓(xùn)練時間。
TensorFlow Serving
TensorFlow Serving是一套靈活且性能出色的服務(wù)系統(tǒng),專門面向機器學(xué)習(xí)模型且適用于生產(chǎn)環(huán)境。其不僅能夠提供單一模型,您亦可配同時使用servables的多個版本,且客戶端將直接使用***版本或者根據(jù)特定版本ID調(diào)用特定模型——這將顯著簡化您嘗試新型算法的實驗過程。
您也可以將復(fù)合模型表示為多個獨立servables或單一復(fù)合servables。對servables的訪問由sources控制,而sources能夠從任意存儲系統(tǒng)當中發(fā)現(xiàn)servables。
TensorFlow Eager
急切執(zhí)行為TensorFlow 推出的一個實驗性接口,提供類似于NumPy的命令式編程風(fēng)格。當您啟用急切執(zhí)行功能時,TensorFlow 操作將立即得到執(zhí)行——意味著您無需使用Session.run()來執(zhí)行預(yù)先構(gòu)建的圖形。
這種辦法能夠有效簡化TensorFlow矩陣運算與模型代碼,不過其目前尚不提供具備向上與向下兼容性保證的預(yù)覽/前置版本。相較于運行會話,急切執(zhí)行也將有效簡化TensorFlow代碼的調(diào)試流程。
急切執(zhí)行兼容NumPy數(shù)組、GPU加速、自動微分以及在tf.layers模塊中使用的Keras風(fēng)格Layer類。您可以發(fā)布摘要并在TensorBoard中使用,但需要使用summary類的一套全新分布式版本。急切執(zhí)行說明文檔中警告稱,“在分布式與多GPU訓(xùn)練以及CPU性能方面,我們?nèi)栽诜e極工作以實現(xiàn)支持。”
TensorFlow與其它競爭對手
總體而言,TensorFlow始終處于機器學(xué)習(xí)與深度學(xué)習(xí)框架的前沿。正如之前所提到,過去一年以來,TensorFlow已經(jīng)在性能、部署、易學(xué)易用性、編程簡易性以及對常見Python庫及實用程序的兼容性等方面迎來巨大提升。
不過就在同一時段之內(nèi),其它作為競爭對手的深度學(xué)習(xí)框架也在不斷改進。MXNet已經(jīng)被納入Apache基金會麾下,且在功能與性能方面實現(xiàn)改進。微軟Cognitive Toolkit亦在多方面取得進展,包括實現(xiàn)對Keras以及TensorBoard的支持能力。Facebook公司的Caffe2是對Caffe的一次重要改寫,其在圖像處理卷積網(wǎng)絡(luò)當中增加了遞歸與LSTM(長短期記憶)網(wǎng)絡(luò)支持。
開源H2O.ai預(yù)測引擎憑借著優(yōu)秀的專有超參數(shù)調(diào)整與功能工程層得到強化,并迎來了資源消耗極高但卻物有所值的特征工程層Drverless AI。Scikit-learn繼續(xù)在其專長的機器學(xué)習(xí)(而非深度學(xué)習(xí))領(lǐng)域順利發(fā)展。對于已經(jīng)在使用Spark且不需要訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)的用戶而言,Spark MLlib也是個很好的選擇。
只要您擁有TensorFlow編程所必需的技能儲備,那么TensorFlow絕對是您進行深度學(xué)習(xí)模型構(gòu)建、訓(xùn)練以及生產(chǎn)的***選擇。但如果您剛剛接觸TensorFlow,請首先嘗試tf.keras、tf.data.dataset以及tf.estimator提供的高級API。如果需要更低級的API,您可能先得提升對這套平臺的熟悉度,而后方可順暢使用。
使用成本:基于Apache Licesne 2.0版本的自由開源項目。
適用平臺:推薦使用Ubuntu 14.04+、MacOS 10.11+、Windows 7+、英偉達GPU與CUDA。大多數(shù)云方案現(xiàn)在支持TensorFlow與英偉達GPU配合使用。TensorFlow Lite可立足Android與iOS設(shè)備運行預(yù)訓(xùn)練模型。
項目總覽
TensorFlow r1.5:谷歌公司的這套深度學(xué)習(xí)開源框架已經(jīng)愈發(fā)成熟、可實現(xiàn)更多算法與部署選項,且編程難度亦有所下降。
優(yōu)勢:
- 多種模型與算法
- 配合GPU或TPU硬件實現(xiàn)出色的性能表現(xiàn)
- 對Python提供良好支持,且現(xiàn)在可與NumPy順利集成
- 出色的說明文檔
- 提供優(yōu)秀的計算網(wǎng)絡(luò)圖形顯示軟件
缺點:
- 仍然難于學(xué)習(xí),但難度較此前有所下降
- 對Java、C以及Go語言的支持落后于Python
- 不支持R或Lua語言
原文鏈接:https://www.infoworld.com/article/3250165/machine-learning/tensorflow-review-the-best-deep-learning-library-gets-better.html
更多AI內(nèi)容,請關(guān)注公眾號:AI推手
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】