主流深度学习框架对比(TensorFlow、Keras、MXNet、PyTorch)
近幾年來,深度學習的研究和應用的熱潮持續高漲,各種開源深度學習框架層出不窮,包括TensorFlow,Keras,MXNet,PyTorch,CNTK,Theano,Caffe,DeepLearning4,Lasagne,Neon,等等。Google,Microsoft等商業巨頭都加入了這場深度學習框架大戰,當下最主流的框架當屬TensorFlow,Keras,MXNet,PyTorch,接下來我對這四種主流的深度學習框架從幾個不同的方面進行簡單的對比。
一、 簡介
TensorFlow:
TensorFlow是Google Brain基于DistBelief進行研發的第二代人工智能學習系統,其命名來源于本身的運行原理,于2015年11月9日在Apache 2.0開源許可證下發布,并于2017年12月份預發布動態圖機制Eager Execution。?
Keras:?
Keras是一個用Python編寫的開源神經網絡庫,它能夠在TensorFlow,CNTK,Theano或MXNet上運行。旨在實現深度神經網絡的快速實驗,它專注于用戶友好,模塊化和可擴展性。其主要作者和維護者是Google工程師Fran?oisChollet。?
MXNet:?
MXNet是DMLC(Distributed?Machine?Learning?Community)開發的一款開源的、輕量級、可移植的、靈活的深度學習庫,它讓用戶可以混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,目前已經是AWS官方推薦的深度學習框架。MXNet的很多作者都是中國人,其最大的貢獻組織為百度。?
PyTorch:?
PyTorch是Facebook于2017年1月18日發布的python端的開源的深度學習庫,基于Torch。支持動態計算圖,提供很好的靈活性。在今年(2018年)五月份的開發者大會上,Facebook宣布實現PyTorch與Caffe2無縫結合的PyTorch1.0版本將馬上到來。?
有關四個框架的一些基本屬性的比較如表1-1所示:?
?
表1-1 各個框架的相關屬性
二、 流行度
四個深度學習庫均為開源,我們可以通過其在Github上的數據看出他們在行業中的流行程度,截止到2018年6月17日Github上數據如表2-1、表2-2所示。?
?
表2-1?
?
表2-2
三、 靈活性
TensorFlow主要支持靜態計算圖的形式,計算圖的結構比較直觀,但是在調試過程中十分復雜與麻煩,一些錯誤更加難以發。但是2017年底發布了動態圖機制Eager Execution,加入對于動態計算圖的支持,但是目前依舊采用原有的靜態計算圖形式為主。TensorFlow擁有TensorBoard應用,可以監控運行過程,可視化計算圖。?
Keras是基于多個不同框架的高級API,可以快速的進行模型的設計和建立,同時支持序貫和函數式兩種設計模型方式,可以快速的將想法變為結果,但是由于高度封裝的原因,對于已有模型的修改可能不是那么靈活。?
MXNet同時支持命令式和聲明式兩種編程方式,即同時支持靜態計算圖和動態計算圖,并且具有封裝好的訓練函數,集靈活與效率于一體,同時已經推出了類似Keras的以MXNet為后端的高級接口Gluon。?
PyTorch為動態計算圖的典型代表,便于調試,并且高度模塊化,搭建模型十分方便,同時具備及其優秀的GPU支持,數據參數在CPU與GPU之間遷移十分靈活
四、 學習難易程度
對于深度學習框架的學習難易程度以及使用的簡易度還是比較重要的,我認為應該主要基于框架本身的語言設計、文檔的詳細程度以及科技社區的規模考慮。對于框架本身的語言設計來講,TensorFlow是比較不友好的,與Python等語言差距很大,有點像基于一種語言重新定義了一種編程語言,并且在調試的時候比較復雜。每次版本的更新,TensorFlow的各種接口經常會有很大幅度的改變,這也大大增加了對其的學習時間;Keras是一種高級API,基于多種深度學習框架,追求簡潔,快速搭建模型,具有完美的訓練預測模塊,簡單上手,并能快速地將所想變現,十分適合入門或者快速實現。但是學習會很快遇到瓶頸,過度的封裝導致對于深度學習知識的學習不足以及對于已有神經網絡層的改寫十分復雜;MXNet同時支持命令式編程和聲明式編程,進行了無縫結合,十分靈活,具備完整的訓練模塊,簡單便捷,同時支持多種語言,可以減去學習一門新主語言的時間。上層接口Gluon也極其容易上手;PyTorch支持動態計算圖,追求盡量少的封裝,代碼簡潔易讀,應用十分靈活,接口沿用Torch,具有很強的易用性,同時可以很好的利用主語言Python的各種優勢。對于文檔的詳細程度,TensorFlow具備十分詳盡的官方文檔,查找起來十分方便,同時保持很快的更新速度,但是條理不是很清晰,教程眾多;Keras由于是對于不同框架的高度封裝,官方文檔十分詳盡,通俗易懂;MXNet發行以來,高速發展,官方文檔較為簡單,不是十分詳細,存在讓人十分迷惑的部分,框架也存在一定的不穩定性;PyTorch基于Torch并由Facebook強力支持,具備十分詳細條理清晰的官方文檔和官方教程。對于社區,龐大的社區可以推動技術的發展并且便利問題的解決,由Google開發并維護的TensorFlow具有最大社區,應用人員團體龐大;Keras由于將問題實現起來簡單,吸引了大量研究人員的使用,具有很大的用戶社區;MXNet由Amazon,Baidu等巨頭支持,以其完美的內存、顯存優化吸引了大批用戶,DMLC繼續進行開發和維護;PyTorch由Facebook支持,并且即將與Caffe2無縫連接,以其靈活、簡潔、易用的特點在發布緊一年多的時間內吸引了大量開發者和研究人員,火爆程度依舊在不斷攀升,社區也在不斷壯大。
五、 性能
為了比較四個框架的性能(主要是運行速度),我進行了三個不同的實驗,對于不同的神經網絡以及不同類型的數據集在分別在CPU、GPU環境下進行了測試。?
CPU環境:Ubuntu14.04 內存 32GB AMD Opteron(tm) Processor 4284?
GPU環境1:Ubuntu16.04 內存 32GB Quadro P2000(5GB顯存)?
Intel(R) Xeon(R) CPU E5-2637 v4 @ 3.50GHz?
GPU環境2:Ubuntu16.04 內存 16GB Tesla K40(12GB顯存)?
Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz?
代碼地址:https://github.com/CircleXing001/DL-tools?
以下實驗時間均為總訓練時間,GPU環境下包括數據由內存復制到GPU的時間,不包括數據讀入內存所需的時間。
實驗一:基于北京pm2.5數據集的多變量時序數據預測問題
數據集:https://archive.ics.uci.edu/ml/datasets/Beijing+PM2.5+Data?
模型:簡單的單層LSTM+全連接層,如下圖所示:?
?
進行訓練50epoches,實驗結果如表5-1所示:?
?
表5-1?
實驗二:基于Mnist數據集的分類問題?
模型:兩層卷積神經網絡+全連接層,如下圖所示:?
?
進行訓練10epoches,實驗結果如表5-2所示:?
?
表5-2?
實驗三:基于DAQUAR數據集的視覺問答問題?
數據集:https://www.mpi-inf.mpg.de/departments/computer-vision-and-multimodal-computing/research/vision-and-language/visual-turing-challenge/?
模型:卷積神經網絡+LSTM,具體如下圖所示:?
將數據縮放至50*50,進行訓練5epoches,實驗結果如表5-3所示:?
?
表5-3?
在GPU環境2(Ubuntu16.04+內存 16GB +Tesla K40(12GB顯存)+?
Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz)?
對上述實驗三中224*224數據進行實驗,對比四種框架對于硬件(GPU)的利用率,結果見表5-4。?
?
表5-4?
通過上述實驗我們可以發現,不同的深度學習框架對于計算速度和資源利用率的優化存在一定的差異:Keras為基于其他深度學習框架的高級API,進行高度封裝,計算速度最慢且對于資源的利用率最差;在模型復雜,數據集大,參數數量大的情況下,MXNet和PyTorch對于GPU上的計算速度和資源利用的優化十分出色,并且在速度方面MXNet優化處理更加優秀;相比之下,TensorFlow略有遜色,但是對于CPU上的計算加速,TensorFlow表現更加良好。
---------------------?
作者:Circle邢?
來源:CSDN?
原文:https://blog.csdn.net/Circlecircle3/article/details/82086396?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的主流深度学习框架对比(TensorFlow、Keras、MXNet、PyTorch)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu中linux内核的编译、更换
- 下一篇: 深度学习框架对比