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