深度學習框架的優缺點介紹
Summary:Deep Learning Tools
翻譯:Amusi
來源:easy-tensorflow
.前言:
在本文中,我們將介紹和比較當前最流行的深度學習框架(包括 Caffe、Theano、PyTorch、TensorFlow 和 Keras),這將會幫助你為你的應用來選擇最合適的框架。
1. Caffe:第一個主流產品級深度學習庫,於 2014 年由 UC Berkeley 啟動。
優點:
快速
支持 GPU
支持 Matlab 和 Python 介面
缺點:
不靈活。在 Caffe 中,每個節點被當做一個層,因此如果你想要一種新的層類型,你需要定義完整的前向、後向和梯度更新過程。這些層是網路的構建模塊,你需要在無窮無盡的列表中進行選擇。(相反,在 TensorFlow 中,每個節點被當做一個張量運算例如矩陣相加、相乘或卷積。你可以輕易地定義一個層作為這些運算的組合。因此 TensorFlow 的構建模塊更小巧,允許更靈活的模塊化。)
需要大量的非必要冗長代碼。如果你希望同時支持 CPU 和 GPU,你需要為每一個實現額外的函數。你還需要使用普通的文本編輯器來定義你的模型。真令人頭疼!幾乎每個人都希望程序化地定義模型,因為這有利於不同組件之間的模塊化。有趣的是,Caffe 的主要架構師現在在 TensorFlow 團隊工作(PS:還有在Facebook團隊工作)。
專一性。僅定位在計算機視覺(但做得很不錯)。
不是以 Python 編寫!如果你希望引入新的變動,你需要在 C++和 CUDA 上編程(對於更小的變動,你可以使用它的 Python 和 Matlab 介面)。
糟糕的文檔。
安裝比較困難!有大量的依賴包(如OpenCV、glog和gflags等)。
只有少量種類的輸入格式,僅有一種輸出格式 HDF5(雖然你總是可以使用它的 Python/C++/Matlab 介面來運行,並從中得到輸出數據)。
不適用於構建循環網路(recurrent networks)。
2. Theano:由蒙特利爾大學研究團隊構建。Theano 的頂層構建了數值開源深度庫,包括 Keras、Lasagne 和 Blocks。Yoshua Bengio 在 2017 年 9 月 28 日宣布,Theano 的開發將終止。因此實際上 Theano 已死!
優點:
計算圖很漂亮(可媲美 TensorFlow)
為 CPU 和 GPU 都做了優化
很好地適應數值優化任務
高級封裝(Keras、Lasagne)
缺點:
原始的 Theano 只有比較低級的 API
大型模型可能需要很長的編譯時間
不支持多 GPU
錯誤信息可能沒有幫助(有時候令人懊惱)
3. Pytorch:2017 年 1 月,Facebook 將 Python 版本的 Torch 庫(用 Lua 編寫)開源。
優點:
提供動態計算圖(意味著圖是在運行時生成的),允許你處理可變長度的輸入和輸出,例如,在使用 RNN 時非常有用。
另一個例子是,在 PyTorch 中,可以使用標準 Python 語法編寫 for 循環語句。
大量預訓練模型
大量易於組合的模塊化組件
易於編寫自己的圖層類型,易於在 GPU 上運行
「TensorBoard」缺少一些關鍵功能時,「Losswise」可以作為 Pytorch 的替代品
缺點:
正式文檔以外的參考資料/資源有限
無商業支持
4. TensorFlow:由較低級別的符號計算庫(如 Theano)與較高級別的網路規範庫(如 Blocks 和 Lasagne)組合而成。
優點:
由谷歌開發、維護,因此可以保障支持、開發的持續性。
巨大、活躍的社區
網路訓練的低級、高級介面
「TensorBoard」是一款強大的可視化套件,旨在跟蹤網路拓撲和性能,使調試更加簡單。
用 Python 編寫(儘管某些對性能有重要影響的部分是用 C++實現的),這是一種頗具可讀性的開發語言
支持多 GPU。因此可以在不同的計算機上自由運行代碼,而不必停止或重新啟動程序
比基於 Theano 的選項更快的模型編譯
編譯時間比 Theano 短
TensorFlow 不僅支持深度學習,還有支持強化學習和其他演算法的工具。
缺點:
計算圖是純 Python 的,因此速度較慢
圖構造是靜態的,意味著圖必須先被「編譯」再運行
5. Keras:Keras 是一個更高級、對用戶最友好的 API,具有可配置的後端,由 Google Brain 團隊成員 Francis Chollet 編寫和維護。
優點:
提供高級 API 來構建深度學習模型,使其易於閱讀和使用
編寫規範的文檔
大型、活躍的社區
位於其他深度學習庫(如 Theano、TensorFlow 和 MXNet,可配置)之上
使用面向對象的設計,因此所有內容都被視為對象(如網路層、參數、優化器等)。所有模型參數都可以作為對象屬性進行訪問。
例如:
model.layers[3].output 將提供模型的第三層
model.layers[3].weights 是符號權重張量的列表
缺點:
由於用途非常普遍,所以在性能方面比較欠缺
與 TensorFlow 後端配合使用時會出現性能問題(因為並未針對其進行優化),但與 Theano 後端配合使用時效果良好
不像 TensorFlow 或 PyTorch 那樣靈活
【附件】深度學習工具排名:
Tensorflow, 29.9%
Keras, 22.2%
PyTorch, 6.4%
Theano, 4.9%
Other Deep Learning Tools, 4.9%
DeepLearning4J, 3.4%
Microsoft Cognitive Toolkit (Prev. CNTK), 3.0%
Apache MXnet, 1.5%
Caffe, 1.5%
Caffe2, 1.2%
TFLearn, 1.1%
Torch, 1.0%
Lasagne, 0.3%
溫馨提示:
--------我是可愛的分割線--------
TAG:深度學習與神經網路 |