作者:魏溪含 涂銘 張修鵬 如需轉(zhuǎn)載請(qǐng)聯(lián)系華章科技 01 TheanoTheano是在BSD許可證下發(fā)布的一個(gè)開源項(xiàng)目,是由LISA集團(tuán)(現(xiàn)MILA)在加拿大魁北克的蒙特利爾大學(xué)開發(fā)的,其是以一位希臘數(shù)學(xué)家的名字命名的。 Theano是一個(gè)Python庫(kù),可用于定義、優(yōu)化和計(jì)算數(shù)學(xué)表達(dá)式,特別是多維數(shù)組(numpy.ndarray)。它的誕生是為了執(zhí)行深度學(xué)習(xí)中的大規(guī)模神經(jīng)網(wǎng)絡(luò)算法,從本質(zhì)上而言,Theano可以被理解為一個(gè)數(shù)學(xué)表達(dá)式的編譯器:用符號(hào)式語(yǔ)言定義程序員所需的結(jié)果,并且Theano可以高效地運(yùn)行于GPU或CPU中。 在過(guò)去很長(zhǎng)一段時(shí)間內(nèi),Theano是深度學(xué)習(xí)開發(fā)與研究的行業(yè)標(biāo)準(zhǔn)。而且,由于出身學(xué)界,它最初是為學(xué)術(shù)研究而設(shè)計(jì)的,這也導(dǎo)致深度學(xué)習(xí)領(lǐng)域的許多學(xué)者至今仍在使用Theano。 但隨著Tensorflow在Google的支持下強(qiáng)勢(shì)崛起,Theano日漸式微,使用Theano的人也越來(lái)越少。這個(gè)轉(zhuǎn)變的標(biāo)志性事件是:創(chuàng)始者之一的Ian Goodfellow放棄Theano轉(zhuǎn)而去Google開發(fā)Tensorflow了。 盡管Theano已退出歷史舞臺(tái),但作為Python的第一個(gè)深度學(xué)習(xí)框架,它很好地完成了自己的使命,為深度學(xué)習(xí)研究人員的早期拓荒提供了極大的幫助,同時(shí)也為之后的深度學(xué)習(xí)框架的開發(fā)奠定了基本的設(shè)計(jì)方向:以計(jì)算圖為框架的核心,采用GPU加速計(jì)算。
02 Tensorflow2015年11月10日,Google宣布推出全新的機(jī)器學(xué)習(xí)開源工具Tensorflow。Tensorflow最初是由Google機(jī)器智能研究部門的Google Brain團(tuán)隊(duì)開發(fā),基于Google 2011年開發(fā)的深度學(xué)習(xí)基礎(chǔ)架構(gòu)DistBelief構(gòu)建起來(lái)的。 Tensorflow是廣泛使用的實(shí)現(xiàn)機(jī)器學(xué)習(xí)以及其他涉及大量數(shù)學(xué)運(yùn)算的算法庫(kù)之一。Google幾乎在所有應(yīng)用程序中都使用Tensorflow來(lái)實(shí)現(xiàn)機(jī)器學(xué)習(xí)。例如,如果你使用過(guò)Google照片或Google語(yǔ)音搜索,那么你就間接使用了Tensorflow模型。它們?cè)诖笮虶oogle硬件集群上工作,在感知任務(wù)方面,功能非常強(qiáng)大。 Tensorflow在很大程度上可以看作是Theano的后繼者,不僅因?yàn)樗鼈冇泻艽笠慌餐拈_發(fā)者,而且它們還擁有相近的設(shè)計(jì)理念:它們都是基于計(jì)算圖實(shí)現(xiàn)自動(dòng)微分系統(tǒng)。Tensorflow使用數(shù)據(jù)流圖進(jìn)行數(shù)值計(jì)算,圖中的節(jié)點(diǎn)代表數(shù)學(xué)運(yùn)算,圖中的邊則代表在這些節(jié)點(diǎn)之間傳遞的多維數(shù)組(tensor)。 Tensorflow編程接口支持Python和C++。隨著1.0版本的公布,Java、Go、R和Haskell API的alpha版本也得到支持。此外,Tensorflow還可在Google Cloud和AWS中運(yùn)行。 Tensorflow還支持Windows 7、Windows 10和Windows Server 2016。由于Tensorflow使用C++ Eigen庫(kù),所以庫(kù)可在ARM架構(gòu)上進(jìn)行編譯和優(yōu)化。這也就意味著用戶可以在各種服務(wù)器和移動(dòng)設(shè)備上部署自己的訓(xùn)練模型,而無(wú)須執(zhí)行單獨(dú)的模型解碼器或者加載Python解釋器。 作為當(dāng)前最流行的深度學(xué)習(xí)框架,Tensorflow獲得了極大成功,但在學(xué)習(xí)過(guò)程中讀者需要注意下面這些問(wèn)題。
03 MXNetMXNet是亞馬遜(Amazon)的李沐帶隊(duì)開發(fā)的深度學(xué)習(xí)框架。它擁有類似于Theano和Tensorflow的數(shù)據(jù)流圖,為多GPU架構(gòu)提供了良好的配置,有著類似于Lasagne和Blocks的更高級(jí)別的模型構(gòu)建塊,并且可以在你想象的任何硬件上運(yùn)行(包括手機(jī))。 對(duì)Python的支持只是其功能的冰山一角,MXNet同樣提供了對(duì)R、Julia、C++、Scala、Matlab、Golang和Java的接口。 MXNet以其超強(qiáng)的分布式支持,明顯的內(nèi)存、顯存優(yōu)化為人所稱道。同樣的模型,MXNet往往占用更小的內(nèi)存和顯存,并且在分布式環(huán)境下,MXNet展現(xiàn)出了明顯優(yōu)于其他框架的擴(kuò)展性能。 MXNet的缺點(diǎn)是推廣不給力及接口文檔不夠完善。MXNet長(zhǎng)期處于快速迭代的過(guò)程中,其文檔卻長(zhǎng)時(shí)間未更新,這就導(dǎo)致新手用戶難以掌握MXNet,老用戶則需要常常查閱源碼才能真正理解MXNet接口的用法。
04 KerasKeras是一個(gè)高層神經(jīng)網(wǎng)絡(luò)API,由純Python語(yǔ)言編寫而成,并使用Tensorflow、Theano及CNTK作為后端。Keras為支持快速實(shí)驗(yàn)而生,能夠?qū)⑾敕ㄑ杆俎D(zhuǎn)換為結(jié)果。 Keras應(yīng)該是深度學(xué)習(xí)框架之中最容易上手的一個(gè),它提供了一致而簡(jiǎn)潔的API,能夠極大地減少一般應(yīng)用下用戶的工作量,避免用戶重復(fù)造輪子,而且Keras支持無(wú)縫CPU和GPU的相互轉(zhuǎn)換。 為了屏蔽后端的差異性,Keras做了層層封裝,導(dǎo)致用戶在新增操作或是獲取底層的數(shù)據(jù)信息時(shí)過(guò)于困難。同時(shí),過(guò)度封裝也使得Keras的程序過(guò)于緩慢,許多bug都隱藏于封裝之中。 另外就是學(xué)習(xí)Keras十分容易,但是很快就會(huì)遇到瓶頸,因?yàn)樗鄙凫`活性。另外,在使用Keras的大多數(shù)時(shí)間里,用戶主要是在調(diào)用接口,很難真正學(xué)習(xí)到深度學(xué)習(xí)的內(nèi)容。
05 PyTorchPyTorch是一個(gè)Python優(yōu)先的深度學(xué)習(xí)框架,能夠在強(qiáng)大的GPU加速的基礎(chǔ)上實(shí)現(xiàn)張量和動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)。 PyTorch是一個(gè)Python軟件包,其提供了兩種高層面的功能,具體如下。
如有需要,你也可以復(fù)用你喜歡的Python軟件包(如Numpy、scipy和Cython)來(lái)擴(kuò)展PyTorch。 相對(duì)于Tensorflow,PyTorch的一大優(yōu)點(diǎn)是,它的圖是動(dòng)態(tài)的,而Tensorflow等都是靜態(tài)圖,不利于擴(kuò)展。同時(shí),PyTorch非常簡(jiǎn)潔,方便使用。
06 CaffeCaffe是基于C++語(yǔ)言編寫的深度學(xué)習(xí)框架,作者是中國(guó)人賈揚(yáng)清。它開放源碼(具有Licensed BSD),提供了命令行,以及Matlab和Python接口,清晰、可讀性強(qiáng)、容易上手。 Caffe是早期深度學(xué)習(xí)研究者使用的框架,由于很多研究人員在上面進(jìn)行開發(fā)和優(yōu)化,因此其現(xiàn)今也是流行的框架之一。Caffe也存在不支持多機(jī)、跨平臺(tái)、可擴(kuò)展性差等問(wèn)題。初學(xué)者使用Caffe時(shí)還需要注意下面這些問(wèn)題。
Caffe2出自Facebook人工智能實(shí)驗(yàn)室與應(yīng)用機(jī)器學(xué)習(xí)團(tuán)隊(duì),但賈揚(yáng)清仍是主要貢獻(xiàn)者之一。Caffe2在工程上做了很多優(yōu)化,比如運(yùn)行速度、跨平臺(tái)、可擴(kuò)展性等,它可以看作是Caffe更細(xì)粒度的重構(gòu),但在設(shè)計(jì)上,其實(shí)Caffe2與TensorFlow更像。目前代碼已開源。
|
|