俗話說:工欲善其事,必先利其器!在開始深度學(xué)習(xí)之前,選擇一個合適的框架,不僅讓你贏在起跑線,更能夠令你事半功倍。
話不多說,接下來小課給大家介紹介紹目前市面上流行的幾款深度學(xué)習(xí)框架!
Caffe
和TensorFlow名氣一樣大的是深度學(xué)習(xí)框架Caffe,由加州大學(xué)伯克利的Phd賈揚(yáng)清開發(fā),全稱是Convolutional Architecture for Fast Feature Embedding,是一個清晰而高效的開源深度學(xué)習(xí)框架,目前由伯克利視覺學(xué)中心(Brekeley Vision and Learning Center)進(jìn)行維護(hù)。
從其名字就可以看出它對卷積網(wǎng)絡(luò)的支持特別好,同時也是用C++寫的,但是并沒有提供Python接口,只提供C++的接口。
Caffe之所以流行,是因為之前很多ImageNet比賽里面使用的網(wǎng)絡(luò)都是用Caffe寫的,所以如果你想使用這些比賽里面的網(wǎng)絡(luò)模型就只能使用Caffe,這也就導(dǎo)致了很多人直接轉(zhuǎn)到Caffe這個框架下面。
Caffe的缺點(diǎn)是不夠靈活,同時內(nèi)存占用高,只提供C++接口。目前Caffe的升級版本Caffe2已經(jīng)開源了,修復(fù)了一些問題,同時工程水平得到了進(jìn)一步提供。
TensorFlow
Google開源的TensorFlow,這是一款使用C++語言開發(fā)的開源數(shù)學(xué)計算軟件,使用數(shù)據(jù)流圖(Data Flow Graph)的形式進(jìn)行計算。圖中的節(jié)點(diǎn)代表數(shù)學(xué)運(yùn)算,而圖中的線條標(biāo)識多維數(shù)據(jù)數(shù)組(tensor)之間的交互。TensorFlow靈活的架構(gòu)可以部署在一個或多個CPU、GPU的臺式及服務(wù)器中,或者使用單一的API應(yīng)用在移動設(shè)備中。TensorFlow初是由研究人員和Google Brain團(tuán)隊針對機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)進(jìn)行研究而開發(fā)的,目前開源之后幾乎可以在各種領(lǐng)域使用。
目前TensorFlow是全世界使用人數(shù)多、社區(qū)為龐大的一個框架,因為Google公司出品,所有維護(hù)和更新也比較頻繁,并且有著Python和C++的接口,教程也非常完善。同時很多論文復(fù)現(xiàn)的第一個版本都是基于TensorFlow寫的,所以是深度學(xué)習(xí)界框架默認(rèn)的老大。
由于其語言太過于底層,目前有很多基于TensorFlow的第三方抽象庫將TensorFlow的函數(shù)進(jìn)行封裝,使其變得簡潔。目前比較有名的幾個是Keras、Tflearn、tfslim以及TensorLayer。
Theano
Theano于2008年誕生于蒙特利爾理工學(xué)校,其派生出來大量深度學(xué)習(xí)Python軟件包,著名的包括Blocks和Keras。Theano的核心是一個數(shù)學(xué)表達(dá)式的編譯器,他知道如何獲取你的結(jié)構(gòu),并使之成為一個使用numpy、高效本地庫的高效代碼,如BLAS和本地代碼(C++),在CPU或GPU上盡可能快地運(yùn)行。它是為深度學(xué)習(xí)中處理大型神經(jīng)網(wǎng)絡(luò)算法所學(xué)的計算而專門設(shè)計的,是這類庫的首創(chuàng)之一(發(fā)展始于2007年),被認(rèn)為是深度學(xué)習(xí)研究和開發(fā)的行業(yè)標(biāo)準(zhǔn)。
但目前開發(fā)Theano的研究人員大多去了Google參與TensorFlow的開發(fā),所以從某種程度來講TensorFlow就像是Theano的孩子。
Torch
Torch是一個有大量機(jī)器學(xué)習(xí)算法支持的科學(xué)計算框架,其誕生已經(jīng)有十年之久,但真正起勢得益于Facebook開源了大量的Torch的深度學(xué)習(xí)模塊和擴(kuò)展。Torch的特點(diǎn)在于特別靈活,但是另外一個特殊之處是采用Lua,在目前深度學(xué)習(xí)大部分以Python為編程語言的大環(huán)境之下,一個以Lua為編程語言的框架有著更多的劣勢,這一小眾語言增加了學(xué)習(xí)使用Torch這個框架的成本。
PyTorch的前身便是Torch,其底層和Torch框架一樣,但是使用Python重寫了很多內(nèi)容,不僅更加靈活,支持動態(tài)圖,也提供了Python接口。
PyTorch
PyTorch是由Torch7團(tuán)隊開發(fā)的,從名字就可以看出,它跟Torch的不同之處在于PyTorch使用了Python作為開發(fā)語言。所謂“Python first”,同樣說明它是一個以Python優(yōu)先的深度學(xué)習(xí)框架,不僅能夠?qū)崿F(xiàn)強(qiáng)大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò),這是現(xiàn)在很多駐留框架比如TensorFlow等都不支持的。
PyTorch既可以看做加入了GPU支持的numpy,同時也可以看成一個擁有自動求導(dǎo)功能的強(qiáng)大的深度神經(jīng)網(wǎng)絡(luò)。
特點(diǎn)
PyTorch有以下特點(diǎn):
支持GPU
動態(tài)神經(jīng)網(wǎng)絡(luò)
Python優(yōu)先
命令式體驗
輕松擴(kuò)展
MXNet
MXNet的主要作者是李沐,早就是幾個人抱著純粹對技術(shù)和開發(fā)的熱情做起來的興趣項目,如今成為了亞馬遜的官方框架,有著非常好的分布式支持,而且性能特別好,占用顯存低,同時其開發(fā)的語言接口不僅僅有Python和C++,還有R、MATLAB、Scala、JavaScript等等,可以說能夠滿足使用任何語言的人。
但MXNet的缺點(diǎn)也很明顯,教程不夠完善,使用的人不夠多導(dǎo)致社區(qū)不大,同時每年很少有比賽和論文是基于MXNet實現(xiàn)的,這就使得MXNet的推廣力度和知名度不高。
除了上述介紹的框架,目前流行的深度學(xué)習(xí)框架還有很多很多,如Apache MXnet、Microsoft Cognitive Toolkit、DeepLearning4J等等。
研究者們使用各種不同的框架來達(dá)到不同的研究目的,很難說哪種好哪種不好。這也從側(cè)面印證了深度學(xué)習(xí)領(lǐng)域真的是萬紫千紅、百花齊放。相信通過我的介紹,讓你對深度學(xué)習(xí)的框架做到心中有數(shù),能夠選擇好自己手中的格斗武器。