常用深度學習框——Caffe/ TensorFlow / Keras/ PyTorch/MXNet
一.概述
近幾年來,深度學習的研究和應用的熱潮持續高漲,各種開源深度學習框架層出不窮,包括TensorFlow,Keras,MXNet,PyTorch,CNTK,Theano,Caffe,DeepLearning4,Lasagne,Neon,等等。Google,Microsoft等商業巨頭都加入了這場深度學習框架大戰,當下最主流的框架當屬TensorFlow,Keras,MXNet,PyTorch,Caffe接下來對這四種主流的深度學習框架從幾個不同的方面進行簡單的對比。
選擇框架,建議幾個點考慮:
1)框架能不能解決你的問題。比如某些框架對rnn或者lstm支持不足。
這個是必要條件。下面的都附加條件。
2)框架的資源是否足夠。比如文檔,社區,開源的項目支持。
3)框架是否易於上手,學習曲線如何。這個就因人而異了。
4)框架應用是否和現有系統匹配。這個也是根據你自己的具體情況了。
二. Caffe
Caffe作為入門級的深度學習框架,對於一般的深度學習任務,如圖像分類/ 目標檢測/ 實例分割等,存在已有的代碼供大家參考,使得上手很快,需要新手修改的地方一般為配置文件,基本不需要書寫代碼。而且Caffe是基於C++的代碼,因此訓練方面很快。因此,作為新手入門這是一個很好的框架。適合新手作為入門,了解深度學習,以及深度學習任務中的各參數。
1) 優點
i). 上手快,無需編寫大量代碼,即可遷移到自己的數據集
ii). 能快速了解入門深度學習
iii). 基於C++的開發,訓練速度快
但是Caffe的不足也很嚴重,主要有一下幾個方面:
2) 不足
i) 首先,雖然能較快入門,但對深度學習的細節認識不深,如果要深入理解,需要閱讀源碼,相比其他框架,比較困難
ii) 如果要修改代碼,需要對CPU版和GPU版同時修改,而且修改代碼的時間相對較長,不利於快速實現新的想法
iii) 最后,最讓人頭疼的是GPU版本的安裝問題
對於Caffe的安裝,很是讓人頭疼,如果感興趣,可以參考的博客: Caffe 安裝 ubuntu14 + CUDA8.0 + CUDNN5.0(基於anaconda的環境)。
三. Keras
Keras是基於Theano或者TensorFlow的高級深度學習框架,使用Keras有助於快速構建神經網絡。不需要去理會TensorFlow底層基於權值和偏值的構建。Keras是一個用Python編寫的開源神經網絡庫,它能夠在TensorFlow,CNTK,Theano或MXNet上運行。旨在實現深度神經網絡的快速實驗,它專注於用戶友好,模塊化和可擴展性。其主要作者和維護者是Google工程師FrançoisChollet。
1) 優點
i) 快速構建網絡,實現自己的想法
ii) 不用拘泥於底層的一些細節
2) 不足
i) 對於新的領域,可能更新較慢,此時自己寫一些層或者其他東西,比較困難,如權值的共享,比較困難
ii) 訓練速度相對較慢
四. TensorFlow
TensorFlow是Google Brain基於DistBelief進行研發的第二代人工智能學習系統,其命名來源於本身的運行原理,於2015年11月9日在Apache 2.0開源許可證下發布,並於2017年12月份預發布動態圖機制Eager Execution。 TensorFlow有高級的API,也有從零開始新建的權值和偏值,適合深入理解學習。
1) 優點
i) 既有高級的API,可以快速建立網絡,如將Keras整合到TensorFlow中,tf.keras,也有TFLearn/ Slim等高級API供使用
ii) 又能基於底層開始構建神經網絡,適合深入學習,和添加一些新的網絡層或者建立新的Loss函數
iii) Google的大力支持,所以有很多學習資源
2) 不足
i) 網絡基於靜態圖,所有資源的計算都在圖中計算,調試較麻煩,不容易找bug
ii) 個人感覺TensorFlow中對於同一個功能的函數存在多個,可能會導致新手學習時,不知所措
iii) 國內IP不能訪問英文版TensorFlow官網,將導致不能查看API,這個很難受
五. PyTorch
PyTorch是Facebook於2017年1月18日發布的python端的開源的深度學習庫,基於Torch。支持動態計算圖,提供很好的靈活性。在2018年五月份的開發者大會上,Facebook宣布實現PyTorch與Caffe2無縫結合的PyTorch1.0版本。
PyTorch,封裝得很好,構建自己的網絡較快,適合新手。
1) 優點
i) 能較快構建網絡,新手入手較快
ii) 將代碼遷移至GPU較快,功能封裝高
2) 不足
封裝過於高級,導致函數調用不清楚,不利於深入理解
MXNet:
MXNet是DMLC(Distributed Machine Learning Community)開發的一款開源的、輕量級、可移植的、靈活的深度學習庫,它讓用戶可以混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,目前已經是AWS官方推薦的深度學習框架。MXNet的很多作者都是中國人,其最大的貢獻組織為百度。
優點:
靈活性以及使用的語言比較喜歡python,它可以使用命令式編程,它自己有很好的一些模型訓練工具以及優化工具。
缺點
文檔不夠詳細。
六.性能對標
各個框架的相關屬性
基於DAQUAR數據集的視覺問答問題 。模型:卷積神經網絡+LSTM,具體如下圖所示:
將數據縮放至50*50,進行訓練5epoches。對上述實驗三中224*224數據進行實驗,對比四種框架對於硬件(GPU)的利用率。結果如下表所示:
框架(TF和Keras設置為按需占用顯存) |
GPU占用(MB) |
每次迭代時間(s) |
tensorflow |
8345 |
644.5518 |
Keras(tf) |
10930 |
827.2875 |
MXNet |
6526 |
470.7210 |
PyTorch |
6570 |
630.9932 |
框架 |
CPU(s) |
GPU(s) |
tensorflow |
Nan |
90.1354 |
Keras(tf) |
Nan |
108.6438 |
MXNet |
Nan |
85.3432 |
PyTorch |
Nan |
87.5231 |
七. 總結
新手可以使用Caffe快速進行訓練,新手使用Keras或者PyTorch進行快速構建自己的網絡,想深入了解或者修改代碼的可以學習TensorFlow。當然如果對C++情有獨鍾,學習Caffe是個不錯的選擇。