8 種主流深度學習框架介紹
**導讀:**近幾年隨着深度學習算法的發展,出現了許多深度學習框架。這些框架各有所長,各具特色。常用的開源框架有 TensorFlow、Keras、Caffe、PyTorch、Theano、CNTK、MXNet、PaddlePaddle、Deeplearning4j、ONNX 等。
作者:謝佳標
來源:大數據 DT(ID:hzdashuju)
-
框架名稱:TensorFlow
-
**主要維護方:**Google
-
**支持的語言:**C++/Python/Java/R 等
-
GitHub 源碼地址:
https://github.com/tensorflow/tensorflow
-
框架名稱:Keras
-
**主要維護方:**Google
-
**支持的語言:**Python/R
-
GitHub 源碼地址:
https://github.com/keras-team/keras
-
框架名稱:Caffe
-
**主要維護方:**BVLC
-
**支持的語言:**C++/Python/Matlab
-
GitHub 源碼地址:
https://github.com/BVLC/caffe
-
框架名稱:PyTorch
-
**主要維護方:**Facebook
-
**支持的語言:**C/C++/Python
-
GitHub 源碼地址:
https://github.com/pytorch/pytorch
-
框架名稱:Theano
-
**主要維護方:**UdeM
-
**支持的語言:**Python
-
GitHub 源碼地址:
https://github.com/Theano/Theano
-
框架名稱:CNTK
-
**主要維護方:**Microsoft
-
**支持的語言:**C++/Python/C#/.NET/Java/R
-
GitHub 源碼地址:
https://github.com/Microsoft/CNTK
-
框架名稱:MXNet
-
**主要維護方:**DMLC
-
**支持的語言:**C++/Python/R 等
-
GitHub 源碼地址:
https://github.com/apache/incubator-mxnet
-
框架名稱:PaddlePaddle
-
**主要維護方:**Baidu
-
**支持的語言:**C++/Python
-
GitHub 源碼地址:
https://github.com/PaddlePaddle/Paddle/
-
框架名稱:Deeplearning4j
-
**主要維護方:**Eclipse
-
**支持的語言:**Java/Scala 等
-
GitHub 源碼地址:
https://github.com/eclipse/deeplearning4j
-
框架名稱:ONNX
-
**主要維護方:**Microsoft/ Facebook
-
**支持的語言:**Python/R
-
GitHub 源碼地址:
https://github.com/onnx/onnx
下面開始對各框架進行概述,讓讀者對各個框架有個簡單的認知,具體的安裝及使用方法不在本文贅述。
01 TensorFlow
谷歌的 TensorFlow 可以說是當今最受歡迎的開源深度學習框架,可用於各類深度學習相關的任務中。TensorFlow = Tensor + Flow,Tensor 就是張量,代表 N 維數組;Flow 即流,代表基於數據流圖的計算。
TensorFlow 是目前深度學習的主流框架,其主要特性如下所述。
-
TensorFlow 支持 Python、JavaScript、C ++、Java、Go、C#、Julia 和 R 等多種編程語言。
-
TensorFlow 不僅擁有強大的計算集羣,還可以在 iOS 和 Android 等移動平臺上運行模型。
-
TensorFlow 編程入門難度較大。初學者需要仔細考慮神經網絡的架構,正確評估輸入和輸出數據的維度和數量。
-
TensorFlow 使用靜態計算圖進行操作。也就是說,我們需要先定義圖形,然後運行計算,如果我們需要對架構進行更改,則需要重新訓練模型。選擇這樣的方法是爲了提高效率,但是許多現代神經網絡工具已經能夠在學習過程中改進,並且不會顯著降低學習速度。在這方面,TensorFlow 的主要競爭對手是 PyTorch。
RStudio 提供了 R 與 TensorFlow 的 API 接口,RStudio 官網及 GitHub 上也提供了 TensorFlow 擴展包的學習資料。
-
https://tensorflow.rstudio.com/tensorflow/
-
https://github.com/rstudio/tensorflow
02 Keras
Keras 是一個對小白用戶非常友好且簡單的深度學習框架。如果想快速入門深度學習, Keras 將是不錯的選擇。
Keras 是 TensorFlow 高級集成 API,可以非常方便地和 TensorFlow 進行融合。Keras 在高層可以調用 TensorFlow、CNTK、Theano,還有更多優秀的庫也在被陸續支持中。Keras 的特點是能夠快速搭建模型,是高效地進行科學研究的關鍵。
Keras 的基本特性如下:
-
高度模塊化,搭建網絡非常簡潔;
-
API 簡單,具有統一的風格;
-
易擴展,易於添加新模塊,只需要仿照現有模塊編寫新的類或函數即可。
RStudio 提供了 R 與 Keras 的 API 接口,RStudio 的官網及 GitHub 上也提供了 Keras 擴展包的學習資料。
-
https://tensorflow.rstudio.com/keras/
-
https://github.com/rstudio/keras
03 Caffe
Caffe 是由 AI 科學家賈揚清在加州大學伯克利分校讀博期間主導開發的,是以 C++/CUDA 代碼爲主的早期深度學習框架之一,比 TensorFlow、MXNet、PyTorch 等都要早。Caffe 需要進行編譯安裝,支持命令行、Python 和 Matlab 接口,單機多卡、多機多卡等都可以很方便使用。
Caffe 的基本特性如下。
-
以 C++/CUDA/Python 代碼爲主,速度快,性能高。
-
工廠設計模式,代碼結構清晰,可讀性和可拓展性強。
-
支持命令行、Python 和 Matlab 接口,使用方便。
-
CPU 和 GPU 之間切換方便,多 GPU 訓練方便。
-
工具豐富,社區活躍。
同時,Caffe 的缺點也比較明顯,主要包括如下幾點。
-
源代碼修改門檻較高,需要實現正向 / 反向傳播。
-
不支持自動求導。
-
不支持模型級並行,只支持數據級並行。
-
不適合非圖像任務。
雖然 Caffe 已經提供了 Matlab 和 Python 接口,但目前不支持 R 語言。caffeR 爲 Caffe 提供了一系列封裝功能,允許用戶在 R 語言上運行 Caffe,包括數據預處理和網絡設置,以及監控和評估訓練過程。該包還沒有 CRAN 版本,感興趣的讀者可以在 GitHub 找到 caffeR 包的安裝及使用的相關內容。
https://github.com/cnaumzik/caffeR
04 PyTorch
PyTorch 是 Facebook 團隊於 2017 年 1 月發佈的一個深度學習框架,雖然晚於 TensorFlow、Keras 等框架,但自發布之日起,其受到的關注度就在不斷上升,目前在 GitHub 上的熱度已經超過 Theano、Caffe、MXNet 等框架。
PyTroch 主要提供以下兩種核心功能:
-
支持 GPU 加速的張量計算;
-
方便優化模型的自動微分機制。
PyTorch 的主要優點如下。
-
**簡潔易懂:**PyTorch 的 API 設計相當簡潔一致,基本上是 tensor、autograd、nn 三級封裝,學習起來非常容易。
-
**便於調試:**PyTorch 採用動態圖,可以像普通 Python 代碼一樣進行調試。不同於 TensorFlow,PyTorch 的報錯說明通常很容易看懂。
-
**強大高效:**PyTorch 提供了非常豐富的模型組件,可以快速實現想法。
05 Theano
Theano 誕生於 2008 年,由蒙特利爾大學的 LISA 實驗室開發並維護,是一個高性能的符號計算及深度學習框架。它完全基於 Python,專門用於對數學表達式的定義、求值與優化。得益於對 GU 的透明使用,Theano 尤其適用於包含高維度數組的數學表達式,並且計算效率比較高。
因 Theano 出現的時間較早,後來湧現出一批基於 Theano 的深度學習庫,並完成了對 Theano 的上層封裝以及功能擴展。在這些派生庫中,比較著名的就是本書要學習的 Keras。Keras 將一些基本的組件封裝成模塊,使得用戶在編寫、調試以及閱讀網絡代碼時更加清晰。
06 CNTK
CNTK(Microsoft Cognitive Toolkit)是微軟開源的深度學習工具包,它通過有向圖將神經網絡描述爲一系列計算步驟。在有向圖中,葉節點表示輸入值或網絡參數,其他節點表示其輸入上的矩陣運算。
CNTK 允許用戶非常輕鬆地實現和組合流行的模型,包括前饋神經網絡(DNN)、卷積神經網絡(CNN)和循環神經網絡(RNN、LSTM)。與目前大部分框架一樣,CNTK 實現了自動求導,利用隨機梯度下降方法進行優化。
CNTK 的基本特性如下。
-
CNTK 性能較好,按照其官方的說法,它比其他的開源框架性能都要好。
-
適合做語音任務,CNTK 本就是微軟語音團隊開源的,自然更適合做語音任務,便於在使用 RNN 等模型以及時空尺度時進行卷積。
微軟開發的 CNTK-R 包提供了 R 與 CNTK 的 API 接口。感興趣的讀者可以通過以下網址進行學習。
-
https://github.com/microsoft/CNTK-R
-
https://microsoft.github.io/CNTK-R/
07 MXNet
MXNet 框架允許混合符號和命令式編程,以最大限度地提高效率和生產力。MXNet 的核心是一個動態依賴調度程序,可以動態地自動並行化符號和命令操作。其圖形優化層使符號執行更快,內存效率更高。
MXNet 的基本特性如下。
-
**靈活的編程模型:**支持命令式和符號式編程模型。
-
**多語言支持:**支持 C++、Python、R、Julia、JavaScript、Scala、Go、Perl 等。事實上,它是唯一支持所有 R 函數的構架。
-
**本地分佈式訓練:**支持在多 CPU/GPU 設備上的分佈式訓練,使其可充分利用雲計算的規模優勢。
-
**性能優化:**使用一個優化的 C++ 後端引擎實現並行 I/O 和計算,無論使用哪種語言都能達到最佳性能。
-
**雲端友好:**可直接與 S3、HDFS 和 Azure 兼容。
08 ONNX
ONNX(Open Neural Network eXchange,開放神經網絡交換)項目由微軟、亞馬遜、Facebook 和 IBM 等公司共同開發,旨在尋找呈現開放格式的深度學習模型。ONNX 簡化了在人工智能不同工作方式之間傳遞模型的過程,具有各種深度學習框架的優點。
ONNX 的基本特性如下。
-
ONNX 使模型能夠在一個框架中進行訓練並轉移到另一個框架中進行預測。
-
ONNX 模型目前在 Caffe2、CNTK、MXNet 和 PyTorch 中得到支持,並且還有與其他常見框架和庫的連接器。
onnx-r 包提供了 R 與 ONNX 的 API 接口。感興趣的讀者可以通過以下網址進行學習。
-
http://onnx.ai/onnx-r/
-
https://github.com/onnx/onnx-r
關於作者:謝佳標,資深 AI 技術專家和數據挖掘專家,擁有超過 14 年的技術研發和管理經驗。精通 Python 和 Keras 等深度學習框架,在數據挖掘和人工智能技術領域有非常深厚的積累。連續 6 年(2017~2022 年)被微軟評爲數據科學和 AI 方向 MVP。資深 R 語言技術專家,“中國現場統計研究會大數據統計分會” 第一屆理事。歷屆中國 R 語言和數據科學大會特邀演講嘉賓,受邀在國內多所高校舉行以數據主題的公益講座。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/likh4sKw_zmp8sL1zT2sSg