干貨 | 5個常用的深度學習框架
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
?對于學習數(shù)據(jù)科學的同學來說,從頭開始實現(xiàn)神經(jīng)網(wǎng)絡(luò),會讓你理解很多有趣的東西。但是,我并不認為在真實數(shù)據(jù)集上構(gòu)建深度學習模型是個明智的做法,除非你有數(shù)天或數(shù)周的時間來等待模型的構(gòu)建。那么對于絕大部分無法獲得無限資源的人來說,使用易于使用的開源深度學習框架,我們可以立即實現(xiàn)如卷積神經(jīng)網(wǎng)絡(luò)這樣的復雜模型。
在本文中,我將介紹5個超級有用的深度學習框架,同時比較每個框架,以了解我們何時何地可以使用哪個框架。
?
目錄
一、什么是深度學習框架
二、TensorFlow
三、Keras
四、PyTorch
五、Caffe
六、DeepLearning4j
七、比較這些深度學習框架
?
一、什么是深度學習框架
讓我們用一個例子來理解這個概念??紤]下面的圖像集合:

此圖像中有各種類別,貓、駱駝、鹿、大象等。我們的任務(wù)是將這些圖像分類到相應(yīng)的類(或類別)中。Google搜索告訴我們,卷積神經(jīng)網(wǎng)絡(luò)(CNN)對于此類圖像分類任務(wù)非常有效。所以我們需要去實現(xiàn)這個模型,但是如果你開始從頭開始編寫CNN,那么獲得工作模型將是幾天后(甚至是幾周),而這就是深度學習框架真正改變了這尷尬的局面。

無須寫上百行代碼,我們僅僅需要使用一個適合的框架去幫助我們快速建立這樣的模型。以下是良好深度學習框架的一些主要特征:
1.???針對性能進行了優(yōu)化
2.???易于理解和編碼
3.???良好的社區(qū)支持
4.???并行化進程以減少計算
5.???自動計算漸變
?
二、TensorFlow

TensorFlow由GoogleBrain團隊的研究人員和工程師開發(fā)。它是深度學習領(lǐng)域中最常用的軟件庫(盡管其他人正在迅速趕上)。

TensorFlow如此受歡迎的最大原因是,它支持多種語言來創(chuàng)建深度學習模型。比如Python,C++和R語言,它有適當?shù)奈臋n的演練指導。制作TensorFlow有很多組件,其中比較突出的兩個是:
1.???TensorBoard:使用數(shù)據(jù)流圖幫助實現(xiàn)有效的數(shù)據(jù)可視化
2.???TensorFlow:用于快速部署新算法/實驗
TensorFlow的靈活架構(gòu)使我們能夠在一個或者多個CPU(以及GPU)上部署我們的深度學習模型。以下是TensorFlow的幾個常見用例:
1.???基于文本的應(yīng)用程序:語言檢測、文本摘要
2.???圖像識別:圖像字幕、人臉識別、物體檢測
3.???聲音識別
4.???時間序列分析
5.???視頻分析
安裝TensorFlow也是一項非常簡單的任務(wù):
?????? 僅適用于CPU:

?????? 對于支持CUDA的GPU卡:

???????? 從以下綜合教程中學習如何使用TensorFlow構(gòu)建神經(jīng)網(wǎng)絡(luò)模型
An Introduction to Implementing NeuralNetworks using TensorFlow
TensorFlow tutorials
?
三、Keras

對于Python愛好者來說,Keras是你開始深度學習之旅的完美框架。Keras是用Python編寫的,可以運行在TensorFlow(以及CNTK和Theano)之上。TensorFlow接口可能有點挑戰(zhàn)性,因為它是一個低級庫,新用戶可能會很難理解某些實現(xiàn)。另一方面,Keras是一個高級API,開發(fā)的重點是實現(xiàn)快速實驗。因此,如果想要快速結(jié)果,Keras將自動處理核心任務(wù)并生成輸出。Keras支持卷積神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)。它可以在CPU和GPU上無縫運行。同時,Keras有助于深度學習初學者正確理解復雜的模型,它旨在最大限度地減少用戶操作,并使模型非常容易理解。
我們可以將Keras的模型大致分為兩類:
1.順序:模型的各層以順序方式定義,這意味著當我們訓練深度學習模型時,這些層是按順序?qū)崿F(xiàn)的。以下是順序模型的示例:

2.Keras功能API:通常用于定義復雜模型,例如多輸出模型或具有共享層的模型,查看以下代碼以實際方式理解:

Keras有多種架構(gòu),如下所述,用于解決各種各樣的問題
1.???VGG16
2.???VGG19
3.???InceptionV3
4.???Mobilenet和其他更多
你可以參考官方Keras文檔,以詳細了解框架的工作原理:https://keras.io/
僅僅使用一行代碼就能夠安裝Keras:

想要更進一步是如何使用Keras實現(xiàn)神經(jīng)網(wǎng)絡(luò)的可以查看:
OptimizingNeural Networks using Keras
?
四、PyTorch

PyTorch是我所研究的所有框架中最靈活的,它是Torch深度學習框架的一個端口,可用于構(gòu)建深度神經(jīng)網(wǎng)絡(luò)和執(zhí)行Tensor計算。Torch是一個基于Lua的框架,而PyTorch是在Python上運行的,使用動態(tài)計算圖,它的Autogard軟件包從tensors中構(gòu)建計算圖并自動計算梯度。Tensors是多維數(shù)組,就像numpy的ndarrays一樣,也可以在GPU上運行。
PyTorch不是使用具有特定功能的預定義圖形,而是為我們提供了一個構(gòu)建計算圖形的框架,甚至可以在運行時更改它們。這對于我們不知道在創(chuàng)建神經(jīng)網(wǎng)絡(luò)時應(yīng)該需要多少內(nèi)存的情況很有用。
你可以使用PyTorch處理各種深度學習挑戰(zhàn),包括:
1.???圖像(檢測、分類等)
2.???文本(NLP)
3.???強化學習
關(guān)于PyTorch的安裝步驟和利用PyTorch構(gòu)建你的第一個神經(jīng)網(wǎng)絡(luò),可以參考以下文檔:
Learn How to Build Quick & AccruateNeural Networks using PyTorch-4 Awesome Case Studies
PyTorch tutorials
?
五、Caffe

Caffe是面向圖像處理領(lǐng)域的另一種流行的深度學習框架。作者是賈揚清,加州大學伯克利的博士,現(xiàn)就職于阿里巴巴,擔任技術(shù)副總裁崗位,領(lǐng)導大數(shù)據(jù)計算平臺的研發(fā)工作。需要注意的是,Caffe對循環(huán)網(wǎng)絡(luò)和語言建模的支持不如上述三個框架。但是,Caffe脫穎而出的是處理和學習圖像的速度。這很容易成為主要的USP。(USP指的是UniqueSelling Proposition,又稱創(chuàng)意理論,其特點是必須向受眾陳述產(chǎn)品的特點,同時這個特點必須是獨特的、必須能夠引起銷售)

Caffe為C、C++、Python、Matlab等接口以及傳統(tǒng)的命令行提供了堅實的支持。Caffe Model Zoo(大量的在大數(shù)據(jù)集上預訓練的可供下載的模型)框架允許我們訪問可用于解決深度學習問題的預訓練網(wǎng)絡(luò)、模型和權(quán)重。這些模型適用于以下任務(wù):
1.???簡單回歸
2.???大規(guī)模的視覺分類
3.???用于圖像相似性的暹羅網(wǎng)絡(luò)(Siamese Networks)
4.???語音和機器人應(yīng)用
你可以查看Caffe的安裝和文檔以獲取更多詳細信息。
?
六、DeepLearning4j

對于Java程序員,這是理想的深度學習框架。DeepLearning4j在java中實現(xiàn),因此與Python相比更高效,它使用稱為ND4J的張量庫,提供了處理n維數(shù)組的能力。這個框架還支持GPU和CPU。
DeepLearning4j將加載數(shù)據(jù)和訓練算法的任務(wù)視為單獨的過程,這種功能分離提供了很大的靈活性。它同時也適用于不同的數(shù)據(jù)類型:
1.???圖片
2.???CSV
3.???純文本等
你可以使用DeepLearning4j構(gòu)建的深度學習模型是:
1.???卷積神經(jīng)網(wǎng)絡(luò)(CNN)
2.???遞歸神經(jīng)網(wǎng)絡(luò)(RNN)
3.???長短記憶(LSTM)和許多其他架構(gòu)
你可以查看DeepLearning4j的安裝和文檔以獲取更多詳細信息。
?
七、五個深度學習框架的對比
我們已經(jīng)介紹了五個最流行的深度學習框架。每個都有它自己獨特的功能集,有些框架可以很好地處理圖像數(shù)據(jù),但無法解析文本數(shù)據(jù)。其他框架在圖像和文本數(shù)據(jù)方面表現(xiàn)良好,但其內(nèi)部工作可能難以理解。下面我們將使用以下標準比較我們的五個深度學習框架:
1.???社區(qū)支持
2.???它們用到的語言
3.???接口
4.???支持預訓練模型
下面這個表格是這些框架的對比:

所有這些框架都是開源的,支持CUDA并且有預訓練模型來幫助您入門。但是,什么應(yīng)該是正確的起點,你應(yīng)該選擇哪個框架來構(gòu)建你的(初始)深度學習模型?

1.???TensorFlow
TensorFlow適用于圖像和基于序列的數(shù)據(jù)。如果您是深度學習的初學者,或者對線性代數(shù)和微積分等數(shù)學概念缺乏扎實的理解,那么TensorFlow的陡峭學習曲線可能會讓人望而生畏。對于剛剛起步的人來說,這方面可能很復雜。我的建議是繼續(xù)練習,繼續(xù)探索社區(qū)。一旦您對框架有了很好的理解,實現(xiàn)深度學習模型對您來說將非常容易。
2.???Keras
Keras是一個非常可靠的框架,可以開始您的深度學習之旅。如果您熟悉Python并且沒有進行一些高級研究或開發(fā)一些特殊類型的神經(jīng)網(wǎng)絡(luò),那么Keras就適合您。它更多的是讓你取得成果,而不是陷入模型錯綜復雜的困境。因此,如果您獲得與圖像分類或序列模型相關(guān)的項目,請從Keras開始,因為你可以非??焖俚孬@得工作模型。
Keras也集成在TensorFlow中,因此您也可以使用tf.keras構(gòu)建模型。
3.???PyTorch
與TensorFlow相比,PyTorch更直觀。一個包含這兩個框架的快速項目將使這一點非常清晰。即使你沒有扎實的數(shù)學或純機器學習背景,你也可以理解PyTorch模型。隨著模型的進行,您可以定義或操作圖形,這使得PyTorch更加直觀。PyTorch沒有像TensorBoard這樣的可視化工具,但你可以隨時使用像matplotlib這樣的庫。
4.???Caffe
當我們在圖像數(shù)據(jù)上構(gòu)建深度學習模型時,Caffe非常有效。但是當涉及到遞歸神經(jīng)網(wǎng)絡(luò)和語言模型時,Caffe落后于我們討論過的其他框架。Caffe的主要優(yōu)勢在于,即使您沒有強大的機器學習或微積分知識,您也可以構(gòu)建深度學習模型。Caffe主要用于構(gòu)建和部署用于移動電話和其他計算受限平臺的深度學習模型。
5.???DeepLearning4j
就像我之前提到的,Deeplearning4j是Java程序員的天堂。它為不同的神經(jīng)網(wǎng)絡(luò)提供了大量支持,如CNN,RNN和LSTM。它可以在不犧牲速度的情況下處理大量數(shù)據(jù)。
?
八、結(jié)束
請記住,這些框架本質(zhì)上只是幫助我們實現(xiàn)最終目標的工具。明智地選擇它們可以減少大量的精力和時間。下圖是詳細介紹我們所涵蓋的每個深度學習框架的信息圖。你可以選擇下載,打印并在下次構(gòu)建深度學習模型時使用它!

交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
