TensorFlow實(shí)戰(zhàn)之深度學(xué)習(xí)框架的對(duì)比
Google近日發(fā)布了TensorFlow 1.0候選版,這第一個(gè)穩(wěn)定版將是深度學(xué)習(xí)框架發(fā)展中的里程碑的一步。自TensorFlow于2015年底正式開(kāi)源,距今已有一年多,這期間TensorFlow不斷給人以驚喜。在這一年多時(shí)間,TensorFlow已從初入深度學(xué)習(xí)框架大戰(zhàn)的新星,成為了幾近壟斷的行業(yè)事實(shí)標(biāo)準(zhǔn)。本文節(jié)選自《TensorFlow實(shí)戰(zhàn)》第二章。
主流深度學(xué)習(xí)框架對(duì)比深度學(xué)習(xí)研究的熱潮持續(xù)高漲,各種開(kāi)源深度學(xué)習(xí)框架也層出不窮,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon,等等。然而TensorFlow卻殺出重圍,在關(guān)注度和用戶數(shù)上都占據(jù)絕對(duì)優(yōu)勢(shì),大有一統(tǒng)江湖之勢(shì)。表2-1所示為各個(gè)開(kāi)源框架在GitHub上的數(shù)據(jù)統(tǒng)計(jì)(數(shù)據(jù)統(tǒng)計(jì)于2017年1月3日),可以看到TensorFlow在star數(shù)量、fork數(shù)量、contributor數(shù)量這三個(gè)數(shù)據(jù)上都完勝其他對(duì)手。
究其原因,主要是Google在業(yè)界的號(hào)召力確實(shí)強(qiáng)大,之前也有許多成功的開(kāi)源項(xiàng)目,以及Google強(qiáng)大的人工智能研發(fā)水平,都讓大家對(duì)Google的深度學(xué)習(xí)框架充滿信心,以至于TensorFlow在2015年11月剛開(kāi)源的第一個(gè)月就積累了10000+的star。其次,TensorFlow確實(shí)在很多方面擁有優(yōu)異的表現(xiàn),比如設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的代碼的簡(jiǎn)潔度,分布式深度學(xué)習(xí)算法的執(zhí)行效率,還有部署的便利性,都是其得以勝出的亮點(diǎn)。如果一直關(guān)注著TensorFlow的開(kāi)發(fā)進(jìn)度,就會(huì)發(fā)現(xiàn)基本上每星期TensorFlow都會(huì)有1萬(wàn)行以上的代碼更新,多則數(shù)萬(wàn)行。產(chǎn)品本身優(yōu)異的質(zhì)量、快速的迭代更新、活躍的社區(qū)和積極的反饋,形成了良性循環(huán),可以想見(jiàn)TensorFlow未來(lái)將繼續(xù)在各種深度學(xué)習(xí)框架中獨(dú)占鰲頭。
表2-1 各個(gè)開(kāi)源框架在GitHub上的數(shù)據(jù)統(tǒng)計(jì)
觀察表1還可以發(fā)現(xiàn),Google、Microsoft、Facebook等巨頭都參與了這場(chǎng)深度學(xué)習(xí)框架大戰(zhàn),此外,還有畢業(yè)于伯克利大學(xué)的賈揚(yáng)清主導(dǎo)開(kāi)發(fā)的Caffe,蒙特利爾大學(xué)Lisa Lab團(tuán)隊(duì)開(kāi)發(fā)的Theano,以及其他個(gè)人或商業(yè)組織貢獻(xiàn)的框架。另外,可以看到各大主流框架基本都支持Python,目前Python在科學(xué)計(jì)算和數(shù)據(jù)挖掘領(lǐng)域可以說(shuō)是獨(dú)領(lǐng)風(fēng)騷。雖然有來(lái)自R、Julia等語(yǔ)言的競(jìng)爭(zhēng)壓力,但是Python的各種庫(kù)實(shí)在是太完善了,Web開(kāi)發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)預(yù)處理、數(shù)據(jù)庫(kù)連接、爬蟲(chóng)等無(wú)所不能,有一個(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所示為對(duì)主流的深度學(xué)習(xí)框架TensorFlow、Caffe、CNTK、Theano、Torch在各個(gè)維度的評(píng)分,本書(shū)2.2節(jié)會(huì)對(duì)各個(gè)深度學(xué)習(xí)框架進(jìn)行比較詳細(xì)的介紹。
表2-2 主流深度學(xué)習(xí)框架在各個(gè)維度的評(píng)分
圖2-1 主流深度學(xué)習(xí)框架對(duì)比圖
各深度學(xué)習(xí)框架簡(jiǎn)介在本節(jié),我們先來(lái)看看目前各流行框架的異同,以及各自的特點(diǎn)和優(yōu)勢(shì)。
TensorFlow
TensorFlow是相對(duì)高階的機(jī)器學(xué)習(xí)庫(kù),用戶可以方便地用它設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),而不必為了追求高效率的實(shí)現(xiàn)親自寫(xiě)C++或CUDA代碼。它和Theano一樣都支持自動(dòng)求導(dǎo),用戶不需要再通過(guò)反向傳播求解梯度。其核心代碼和Caffe一樣是用C++編寫(xiě)的,使用C++簡(jiǎn)化了線上部署的復(fù)雜度,并讓手機(jī)這種內(nèi)存和CPU資源都緊張的設(shè)備可以運(yùn)行復(fù)雜模型(Python則會(huì)比較消耗資源,并且執(zhí)行效率不高)。除了核心代碼的C++接口,TensorFlow還有官方的Python、Go和Java接口,是通過(guò)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++代碼提供各種語(yǔ)言的接口,因此其他腳本語(yǔ)言的接口未來(lái)也可以通過(guò)SWIG方便地添加。不過(guò)使用Python時(shí)有一個(gè)影響效率的問(wèn)題是,每一個(gè)mini-batch要從Python中feed到網(wǎng)絡(luò)中,這個(gè)過(guò)程在mini-batch的數(shù)據(jù)量很小或者運(yùn)算時(shí)間很短時(shí),可能會(huì)帶來(lái)影響比較大的延遲?,F(xiàn)在TensorFlow還有非官方的Julia、Node.js、R的接口支持。