深度学习框架的比较(MXNet, Caffe, TensorFlow, Torch, Theano)
1. 基本概念
1.1 MXNet相關概念
? ? 深度學習目標:如何方便的表述神經網絡,以及如何快速訓練得到模型
? ? CNN(卷積層):表達空間相關性(學表示)
? ? RNN/LSTM:表達時間連續性(建模時序信號)
? ? 命令式編程(imperative programming):嵌入的較淺,其中每個語句都按原來的意思執行,如numpy和Torch就是屬于這種
? ? 聲明式語言(declarative programing):嵌入的很深,提供一整套針對具體應用的迷你語言。即用戶只需要聲明要做什么,而具體執行則由系統完成。這類系統包括Caffe,Theano和TensorFlow。命令式編程顯然更容易懂一些,更直觀一些,但是聲明式的更利于做優化,以及更利于做自動求導,所以都保留。??
| ? | 淺嵌入,命令式編程 | 深嵌入,聲明式編程 |
| 如何執行a=b+1 | 需要b已經被賦值。立即執行加法,將結果保存在a中。 | 返回對應的計算圖(computation graph),我們可以之后對b進行賦值,然后再執行加法運算 |
| 優點 | 語義上容易理解,靈活,可以精確控制行為。通常可以無縫的和主語言交互,方便的利用主語言的各類算法,工具包,bug和性能調試器。 | 在真正開始計算的時候已經拿到了整個計算圖,所以我們可以做一系列優化來提升性能。實現輔助函數也容易,例如對任何計算圖都提供forward和backward函數,對計算圖進行可視化,將圖保存到硬盤和從硬盤讀取。 |
| 缺點 | 實現統一的輔助函數和提供整體優化都很困難。 | 很多主語言的特性都用不上。某些在主語言中實現簡單,但在這里卻經常麻煩,例如if-else語句 。debug也不容易,例如監視一個復雜的計算圖中的某個節點的中間結果并不簡單。 |
1.2 深度學習的關鍵特點
? ? ? (1)層級抽象
? ? ? (2)端到端學習
2. 比較表
| 比較項 | Caffe | Torch | Theano | TensorFlow | MXNet |
| 主語言 | C++/cuda | C++/Lua/cuda | Python/c++/cuda | C++/cuda | C++/cuda |
| 從語言 | Python/Matlab | - | - | Python | Python/R/Julia/Go |
| 硬件 | CPU/GPU | CPU/GPU/FPGA | CPU/GPU | CPU/GPU/Mobile | CPU/GPU/Mobile |
| 分布式 | N | N | N | Y(未開源) | Y |
| 速度 | 快 | 快 | 中等 | 中等 | 快 |
| 靈活性 | 一般 | 好 | 好 | 好 | 好 |
| 文檔 | 全面 | 全面 | 中等 | 中等 | 全面 |
| 適合模型 | CNN | CNN/RNN | CNN/RNN | CNN/RNN | CNN/RNN? |
| 操作系統 | 所有系統 | Linux, OSX | 所有系統 | Linux, OSX | 所有系統 |
| 命令式 | N | Y | N | N | Y |
| 聲明式 | Y | N | Y | Y | Y |
| 接口 | protobuf | Lua | Python | C++/Python | Python/R/Julia/Go |
| 網絡結構 | 分層方法 | 分層方法 | 符號張量圖 | 符號張量圖 | ? |
注:1)使用符號張量圖描述模型,增加新的層更加方便;而分層方法增加新的層需要自己實現(forward,backward和gradient更新函數)。
3.詳細描述
3.1 MXNet
? ?MXNet的系統架構如下圖所示:
?
? ? 從上到下分別為各種主語言的嵌入,編程接口(矩陣運算,符號表達式,分布式通訊),兩種編程模式的統一系統實現,以及各硬件的支持。
? ??MXNet的設計細節包括:符號執行和自動求導;運行依賴引擎;內存節省。
3.2 Caffe ? ?
? ? 優點:
? ? 1)第一個主流的工業級深度學習工具。
? ? 2)它開始于2013年底,由UC Berkely的Yangqing Jia老師編寫和維護的具有出色的卷積神經網絡實現。在計算機視覺領域Caffe依然是最流行的工具包。
? ? 3)專精于圖像處理
? ? 缺點:? ??
? ? 1)它有很多擴展,但是由于一些遺留的架構問題,不夠靈活且對遞歸網絡和語言建模的支持很差。
? ? 2)基于層的網絡結構,其擴展性不好,對于新增加的層,需要自己實現(forward, backward and gradient update)
3.3 TensorFlow
? ?優點:
? ?1) Google開源的其第二代深度學習技術——被使用在Google搜索、圖像識別以及郵箱的深度學習框架。
? ?2)是一個理想的RNN(遞歸神經網絡)API和實現,TensorFlow使用了向量運算的符號圖方法,使得新網絡的指定變得相當容易,支持快速開發。
? ?3)TF支持使用ARM/NEON指令實現model decoding
? ?4)TensorBoard是一個非常好用的網絡結構可視化工具,對于分析訓練網絡非常有用
? ?5)編譯過程比Theano快,它簡單地把符號張量操作映射到已經編譯好的函數調用
? ?缺點:
? ?1) 缺點是速度慢,內存占用較大。(比如相對于Torch)
? ?2)支持的層沒有Torch和Theano豐富,特別是沒有時間序列的卷積,且卷積也不支持動態輸入尺寸,這些功能在NLP中非常有用。
? ??
? ?
3.4 Torch
? ? 優點: ? ?
? ? 1)Facebook力推的深度學習框架,主要開發語言是C和Lua
? ? 2)有較好的靈活性和速度
? ? 3)它實現并且優化了基本的計算單元,使用者可以很簡單地在此基礎上實現自己的算法,不用浪費精力在計算優化上面。核心的計算單元使用C或者cuda做了很好的優化。在此基礎之上,使用lua構建了常見的模型
? ? 4)速度最快,見convnet-benchmarks
? ? 5)支持全面的卷積操作:
? ? ? ? ? - 時間卷積:輸入長度可變,而TF和Theano都不支持,對NLP非常有用;
? ?? ? ? ?- 3D卷積:Theano支持,TF不支持,對視頻識別很有用
? ? 缺點
? ? 1)是接口為lua語言,需要一點時間來學習。
? ? 2)沒有Python接口
? ? 3)與Caffe一樣,基于層的網絡結構,其擴展性不好,對于新增加的層,需要自己實現(forward, backward and gradient update)
? ? 4)RNN沒有官方支持
3.5 Theano
? ? 優點:
? ? 1)2008年誕生于蒙特利爾理工學院,主要開發語言是Python
? ? 2)Theano派生出了大量深度學習Python軟件包,最著名的包括Blocks和Keras
? ? 3)Theano的最大特點是非常的靈活,適合做學術研究的實驗,且對遞歸網絡和語言建模有較好的支持
? ? 4)是第一個使用符號張量圖描述模型的架構
? ? 5)支持更多的平臺
? ? 6)在其上有可用的高級工具:Blocks, Keras等
? ? 缺點:
? ?1)編譯過程慢,但同樣采用符號張量圖的TF無此問題
? ?2)import theano也很慢,它導入時有很多事要做
? ?3)作為開發者,很難進行改進,因為code base是Python,而C/CUDA代碼被打包在Python字符串中
參考資料:
1)MXNet設計和實現簡介
2)Evaluation of Deep Learning Toolkits
3)TensorFlow vs. Theano vs. Torch comparison
總結
以上是生活随笔為你收集整理的深度学习框架的比较(MXNet, Caffe, TensorFlow, Torch, Theano)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下VS2015配置caff
- 下一篇: caffe-fast-rcnn(Caff