轉自:https://mp.weixin.qq.com/s/vVdT9VoPfIaHexOyO2T_6Q
說明:圖片無法直接復制過來,請查看原文
對於學習數據科學的同學來說,從頭開始實現神經網絡,會讓你理解很多有趣的東西。但是,我並不認為在真實數據集上構建深度學習模型是個明智的做法,除非你有數天或數周的時間來等待模型的構建。那么對於絕大部分無法獲得無限資源的人來說,使用易於使用的開源深度學習框架,我們可以立即實現如卷積神經網絡這樣的復雜模型。
在本文中,我將介紹5個超級有用的深度學習框架,同時比較每個框架,以了解我們何時何地可以使用哪個框架。
目錄
一、什么是深度學習框架
二、TensorFlow
三、Keras
四、PyTorch
五、Caffe
六、DeepLearning4j
七、比較這些深度學習框架
一、什么是深度學習框架
讓我們用一個例子來理解這個概念。 考慮下面的圖像集合:
此圖像中有各種類別,貓、駱駝、鹿、大象等。我們的任務是將這些圖像分類到相應的類(或類別)中。Google搜索告訴我們,卷積神經網絡(CNN)對於此類圖像分類任務非常有效。所以我們需要去實現這個模型,但是如果你開始從頭開始編寫CNN,那么獲得工作模型將是幾天后(甚至是幾周),而這就是深度學習框架真正改變了這尷尬的局面。
無須寫上百行代碼,我們僅僅需要使用一個適合的框架去幫助我們快速建立這樣的模型。以下是良好深度學習框架的一些主要特征:
1. 針對性能進行了優化
2. 易於理解和編碼
3. 良好的社區支持
4. 並行化進程以減少計算
5. 自動計算漸變
二、TensorFlow
TensorFlow由GoogleBrain團隊的研究人員和工程師開發。它是深度學習領域中最常用的軟件庫(盡管其他人正在迅速趕上)。
TensorFlow如此受歡迎的最大原因是,它支持多種語言來創建深度學習模型。比如Python,C++和R語言,它有適當的文檔的演練指導。制作TensorFlow有很多組件,其中比較突出的兩個是:
1. TensorBoard:使用數據流圖幫助實現有效的數據可視化
2. TensorFlow:用於快速部署新算法/實驗
TensorFlow的靈活架構使我們能夠在一個或者多個CPU(以及GPU)上部署我們的深度學習模型。以下是TensorFlow的幾個常見用例:
1. 基於文本的應用程序:語言檢測、文本摘要
2. 圖像識別:圖像字幕、人臉識別、物體檢測
3. 聲音識別
4. 時間序列分析
5. 視頻分析
安裝TensorFlow也是一項非常簡單的任務:
僅適用於CPU:
對於支持CUDA的GPU卡:
從以下綜合教程中學習如何使用TensorFlow構建神經網絡模型
-
An Introduction to Implementing NeuralNetworks using TensorFlow
-
TensorFlow tutorials
三、Keras
對於Python愛好者來說,Keras是你開始深度學習之旅的完美框架。Keras是用Python編寫的,可以運行在TensorFlow(以及CNTK和Theano)之上。TensorFlow接口可能有點挑戰性,因為它是一個低級庫,新用戶可能會很難理解某些實現。另一方面,Keras是一個高級API,開發的重點是實現快速實驗。因此,如果想要快速結果,Keras將自動處理核心任務並生成輸出。 Keras支持卷積神經網絡和遞歸神經網絡。它可以在CPU和GPU上無縫運行。同時,Keras有助於深度學習初學者正確理解復雜的模型,它旨在最大限度地減少用戶操作,並使模型非常容易理解。
我們可以將Keras的模型大致分為兩類:
1.順序:模型的各層以順序方式定義,這意味着當我們訓練深度學習模型時,這些層是按順序實現的。以下是順序模型的示例:
2.Keras功能API:通常用於定義復雜模型,例如多輸出模型或具有共享層的模型,查看以下代碼以實際方式理解:
Keras有多種架構,如下所述,用於解決各種各樣的問題
1. VGG16
2. VGG19
3. InceptionV3
4. Mobilenet和其他更多
你可以參考官方Keras文檔,以詳細了解框架的工作原理:https://keras.io/
僅僅使用一行代碼就能夠安裝Keras:
想要更進一步是如何使用Keras實現神經網絡的可以查看:
-
OptimizingNeural Networks using Keras
四、PyTorch
PyTorch是我所研究的所有框架中最靈活的,它是Torch深度學習框架的一個端口,可用於構建深度神經網絡和執行Tensor計算。Torch是一個基於Lua的框架,而PyTorch是在Python上運行的,使用動態計算圖,它的Autogard軟件包從tensors中構建計算圖並自動計算梯度。Tensors是多維數組,就像numpy的ndarrays一樣,也可以在GPU上運行。
PyTorch不是使用具有特定功能的預定義圖形,而是為我們提供了一個構建計算圖形的框架,甚至可以在運行時更改它們。這對於我們不知道在創建神經網絡時應該需要多少內存的情況很有用。
你可以使用PyTorch處理各種深度學習挑戰,包括:
1. 圖像(檢測、分類等)
2. 文本(NLP)
3. 強化學習
關於PyTorch的安裝步驟和利用PyTorch構建你的第一個神經網絡,可以參考以下文檔:
-
Learn How to Build Quick & AccruateNeural Networks using PyTorch-4 Awesome Case Studies
-
PyTorch tutorials
五、Caffe
Caffe是面向圖像處理領域的另一種流行的深度學習框架。作者是賈揚清,加州大學伯克利的博士,現就職於阿里巴巴,擔任技術副總裁崗位,領導大數據計算平台的研發工作。需要注意的是,Caffe對循環網絡和語言建模的支持不如上述三個框架。但是,Caffe脫穎而出的是處理和學習圖像的速度。這很容易成為主要的USP。(USP指的是UniqueSelling Proposition,又稱創意理論,其特點是必須向受眾陳述產品的特點,同時這個特點必須是獨特的、必須能夠引起銷售)
Caffe為C、C++、Python、Matlab等接口以及傳統的命令行提供了堅實的支持。Caffe Model Zoo(大量的在大數據集上預訓練的可供下載的模型)框架允許我們訪問可用於解決深度學習問題的預訓練網絡、模型和權重。這些模型適用於以下任務:
1. 簡單回歸
2. 大規模的視覺分類
3. 用於圖像相似性的暹羅網絡(Siamese Networks)
4. 語音和機器人應用
你可以查看Caffe的安裝和文檔以獲取更多詳細信息。
六、DeepLearning4j
對於Java程序員,這是理想的深度學習框架。DeepLearning4j在java中實現,因此與Python相比更高效,它使用稱為ND4J的張量庫,提供了處理n維數組的能力。這個框架還支持GPU和CPU。
DeepLearning4j將加載數據和訓練算法的任務視為單獨的過程,這種功能分離提供了很大的靈活性。它同時也適用於不同的數據類型:
1. 圖片
2. CSV
3. 純文本等
你可以使用DeepLearning4j構建的深度學習模型是:
1. 卷積神經網絡(CNN)
2. 遞歸神經網絡(RNN)
3. 長短記憶(LSTM)和許多其他架構
你可以查看DeepLearning4j的安裝和文檔以獲取更多詳細信息。
七、五個深度學習框架的對比
我們已經介紹了五個最流行的深度學習框架。每個都有它自己獨特的功能集,有些框架可以很好地處理圖像數據,但無法解析文本數據。其他框架在圖像和文本數據方面表現良好,但其內部工作可能難以理解。下面我們將使用以下標准比較我們的五個深度學習框架:
1. 社區支持
2. 它們用到的語言
3. 接口
4. 支持預訓練模型
下面這個表格是這些框架的對比:
所有這些框架都是開源的,支持CUDA並且有預訓練模型來幫助您入門。但是,什么應該是正確的起點,你應該選擇哪個框架來構建你的(初始)深度學習模型?
1. TensorFlow
TensorFlow適用於圖像和基於序列的數據。如果您是深度學習的初學者,或者對線性代數和微積分等數學概念缺乏扎實的理解,那么TensorFlow的陡峭學習曲線可能會讓人望而生畏。對於剛剛起步的人來說,這方面可能很復雜。我的建議是繼續練習,繼續探索社區。一旦您對框架有了很好的理解,實現深度學習模型對您來說將非常容易。
2. Keras
Keras是一個非常可靠的框架,可以開始您的深度學習之旅。如果您熟悉Python並且沒有進行一些高級研究或開發一些特殊類型的神經網絡,那么Keras就適合您。它更多的是讓你取得成果,而不是陷入模型錯綜復雜的困境。 因此,如果您獲得與圖像分類或序列模型相關的項目,請從Keras開始,因為你可以非常快速地獲得工作模型。
Keras也集成在TensorFlow中,因此您也可以使用tf.keras構建模型。
3. PyTorch
與TensorFlow相比,PyTorch更直觀。一個包含這兩個框架的快速項目將使這一點非常清晰。即使你沒有扎實的數學或純機器學習背景,你也可以理解PyTorch模型。 隨着模型的進行,您可以定義或操作圖形,這使得PyTorch更加直觀。PyTorch沒有像TensorBoard這樣的可視化工具,但你可以隨時使用像matplotlib這樣的庫。
4. Caffe
當我們在圖像數據上構建深度學習模型時,Caffe非常有效。但是當涉及到遞歸神經網絡和語言模型時,Caffe落后於我們討論過的其他框架。Caffe的主要優勢在於,即使您沒有強大的機器學習或微積分知識,您也可以構建深度學習模型。Caffe主要用於構建和部署用於移動電話和其他計算受限平台的深度學習模型。
5. DeepLearning4j
就像我之前提到的,Deeplearning4j是Java程序員的天堂。它為不同的神經網絡提供了大量支持,如CNN,RNN和LSTM。它可以在不犧牲速度的情況下處理大量數據。
八、結束
請記住,這些框架本質上只是幫助我們實現最終目標的工具。明智地選擇它們可以減少大量的精力和時間。下圖是詳細介紹我們所涵蓋的每個深度學習框架的信息圖。你可以選擇下載,打印並在下次構建深度學習模型時使用它!