TensorFlow實(shí)戰(zhàn)之深度學(xué)習(xí)框架的對比
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)。本文節(jié)選自《TensorFlow實(shí)戰(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)度,就會發(fā)現(xiàn)基本上每星期TensorFlow都會有1萬行以上的代碼更新,多則數(shù)萬行。產(chǎn)品本身優(yōu)異的質(zhì)量、快速的迭代更新、活躍的社區(qū)和積極的反饋,形成了良性循環(huán),可以想見TensorFlow未來將繼續(xù)在各種深度學(xué)習(xí)框架中獨(dú)占鰲頭。
表2-1 各個(gè)開源框架在GitHub上的數(shù)據(jù)統(tǒng)計(jì)
觀察表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é)會對各個(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ǎo),用戶不需要再通過反向傳播求解梯度。其核心代碼和Caffe一樣是用C++編寫的,使用C++簡化了線上部署的復(fù)雜度,并讓手機(jī)這種內(nèi)存和CPU資源都緊張的設(shè)備可以運(yùn)行復(fù)雜模型(Python則會比較消耗資源,并且執(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í),可能會帶來影響比較大的延遲。現(xiàn)在TensorFlow還有非官方的Julia、Node.js、R的接口支持。





