加日拉·買(mǎi)買(mǎi)提熱衣木 常富蓉 劉晨 要秀宏
摘要 目前使用的深度學(xué)習(xí)框架較多,每個(gè)框架都有自己的特點(diǎn)。這些深度學(xué)習(xí)框架都完美支持深度神經(jīng)網(wǎng)絡(luò),深度學(xué)習(xí)訓(xùn)練模型通常是建立在大數(shù)據(jù)基礎(chǔ)上,但是性能和訓(xùn)練成本有所不同。本文對(duì)比TensorFlow、Caffe、MXNet等5個(gè)主流的深度學(xué)習(xí)框架,分別簡(jiǎn)述各自的優(yōu)點(diǎn)和缺點(diǎn)。
【關(guān)鍵詞】TensorFlow 深度學(xué)習(xí) Caffe
1 框架對(duì)比
1.1 TensorFlow
對(duì)于剛開(kāi)始學(xué)深度學(xué)習(xí)的人來(lái)說(shuō),它是他們最喜歡的深度學(xué)習(xí)框架,但在這里我想強(qiáng)調(diào)一個(gè)事實(shí)。在它的官網(wǎng)上,它被定義為一個(gè)用于機(jī)器智能的開(kāi)源軟件庫(kù),但我覺(jué)得應(yīng)該這么定義:它是一個(gè)使用數(shù)據(jù)流圖進(jìn)行數(shù)值計(jì)算的開(kāi)源軟件庫(kù)。在這里,他們沒(méi)有將它包含在深度學(xué)習(xí)框架范圍內(nèi),而是和Theano -起被包含在圖編譯器類(lèi)別中。
1.1.1 TensorFlow的優(yōu)點(diǎn)
(1)將科研和產(chǎn)品聯(lián)系在一起。在谷歌,科學(xué)家用它嘗試新的算法,產(chǎn)品團(tuán)隊(duì)則用它來(lái)訓(xùn)練和使用計(jì)算模型,并直接提供給在線用戶。
(2)真正的可移植性。它在CPU和GPU上運(yùn)行,比如說(shuō)可以運(yùn)行在臺(tái)式機(jī)、服務(wù)器、手機(jī)移動(dòng)設(shè)備等等。
(3)高度的靈活性。它不是一個(gè)嚴(yán)格的“神經(jīng)網(wǎng)絡(luò)”庫(kù)。只要你可以將你的計(jì)算表示為一個(gè)數(shù)據(jù)流圖。
(4)支持多種語(yǔ)言。
(5)性能最優(yōu)化。由于它給予了線程、隊(duì)列、異步操作等以最佳的支持。
1.1.2 TensorFlow的缺點(diǎn)
(1)調(diào)試較難,調(diào)試時(shí)出現(xiàn)各種古怪的小問(wèn)題較多。
(2)底層接口寫(xiě)起來(lái)繁瑣,高層接口又不靈活,而且它的高層封裝不好實(shí)現(xiàn)。
(3)它主要面向超大數(shù)據(jù)量的訓(xùn)練,因此計(jì)算速度相對(duì)較慢。
(4)各個(gè)版本之間的兼容性較差,需要進(jìn)一步完善。
1.2 Keras
Keras是一個(gè)高層神經(jīng)網(wǎng)絡(luò)API,它由純Python編寫(xiě)而成并基Tensorflow、Theano以及CNTK后端。它的句法是相當(dāng)明晰的,學(xué)習(xí)文檔也非常好,而且它支持Python語(yǔ)言。我們也能很直觀地了解它的指令、函數(shù)和每個(gè)模塊之間的鏈接方式。用它實(shí)現(xiàn)一個(gè)功能非常簡(jiǎn),只需幾行代碼就能構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)。
1.2.1 Keras的優(yōu)點(diǎn)
(1)簡(jiǎn)易和快速的原型設(shè)計(jì)。
(2)支持CNN和RNN,或二者的結(jié)合。
(3)無(wú)縫CPU和GPU切換。
(4)學(xué)習(xí)較容易。
1.2.2 Keras的缺點(diǎn)
(1)不支持seq2seq,因此實(shí)現(xiàn)NLP功能較復(fù)雜。
(2) 在TensorFlow backend時(shí),
比TensorFlow較慢。
(3)沒(méi)有增強(qiáng)學(xué)習(xí)工具箱,自己修改實(shí)現(xiàn)很麻煩。
(4)封裝得較高級(jí),訓(xùn)練細(xì)節(jié)不能修改,不合適算法研究。
1.3 Caffe
它不只是最老牌的框架之一,而是老牌中的老牌。起初的時(shí)候它并不是一個(gè)通用框架,而僅僅關(guān)注計(jì)算機(jī)視覺(jué),但它具有非常好的通用性。平時(shí)CaffeNet架構(gòu)的訓(xùn)練時(shí)間在它中比在Keras中少5倍。如果想給它來(lái)一點(diǎn)新改變,那就需要使用C++和CUDA編程,不過(guò)也可以使用Python或Matlab接口進(jìn)行一些小改變。它在圖像處理、視頻處理領(lǐng)域廣泛應(yīng)用。
1.3.1 Caffe的優(yōu)點(diǎn)
(1)速度快。谷歌數(shù)據(jù)標(biāo)準(zhǔn)提升了效率。
(2)采用此模型的論文較多。
(3)相對(duì)穩(wěn)定。
(4)遷移性較好。
1.3.2 Caffe的缺點(diǎn)
(1)安裝調(diào)試較難。
(2)各個(gè)版本之間的兼容性較差。
(3)學(xué)習(xí)文檔較少。
(4)不夠靈活。
1.4 MXNet
它致力于提供兼顧性能與靈活性的深度學(xué)習(xí)框架。作為亞馬遜的優(yōu)秀深度學(xué)習(xí)框架,它也算是性能最好的深度學(xué)習(xí)框架之一。它提供了類(lèi)似于Theano與TensorFlow的數(shù)據(jù)流圖,并且支持多GPU配置,提供了類(lèi)似于Lasagne與Blocks的相對(duì)高階的模型構(gòu)建快,還能運(yùn)行在多種硬件設(shè)備上。它提供了基于Python、R、Julia、C++、Scala、Matlab、JavaScript的多種接口。如果專(zhuān)注于效率,那么它是較好的選擇。
1.4.1 MXNet的優(yōu)點(diǎn)
(1)相當(dāng)快的評(píng)測(cè)結(jié)果。
(2)徹底的靈活性。
(3)支持多GPU訓(xùn)練。
(4)支持多種設(shè)備。
1.4.2 MXNet的缺點(diǎn)
(1)學(xué)習(xí)社區(qū)較小,學(xué)習(xí)文檔較少。
(2)數(shù)據(jù)流圖比Theano差。
(3)安裝調(diào)試較麻煩。
1.5 CNTK
它是微軟公司在深度學(xué)習(xí)與人工智能領(lǐng)域的研究成果計(jì)算網(wǎng)絡(luò)工具。據(jù)微軟研究員說(shuō)法,它在語(yǔ)音和圖像辨識(shí)能力方面。在公開(kāi)的基準(zhǔn)測(cè)試上的表現(xiàn)來(lái)看,這個(gè)工具似乎很強(qiáng)勁,支持縱向和橫向的推移。它目前支持的語(yǔ)言是C++,微軟將來(lái)會(huì)推出支持C#和Python語(yǔ)言的版本。
1.5.1 CNTK的優(yōu)點(diǎn)
(1)速度較快。
(2)支持多GPU訓(xùn)練。
(3)很容易上手。
(4)學(xué)習(xí)文檔較規(guī)范。
1.5.2 CNTK的缺點(diǎn)
(1)學(xué)習(xí)社區(qū)較小。
(2)不支持移動(dòng)設(shè)備。
(3)只支持C++語(yǔ)言。
參考文獻(xiàn)
[1]何希平,劉波,深度學(xué)習(xí)理論與實(shí)踐[M].北京:科學(xué)出版社,2017.
[2]張重生,深度學(xué)習(xí):原理與應(yīng)用實(shí)踐[M].北京:電子工業(yè)出版社,2016,
[3]阿布胥嘉幸,機(jī)器學(xué)習(xí)之路[M].北京:電子工業(yè)出版社,2017.
[4] Antonio Gulli. Deep Learning withKeras [M]. Packt Publishing, 2017.
[5]樂(lè)毅.深度學(xué)習(xí) Caffe之經(jīng)典模型詳解與實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社.2016.
[6]謝梁.Keras快速上手:基于Py thon的深度學(xué)習(xí)實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社.2017.