這篇文章我想來比較一下Theano和mxnet,Torch(Torch基本沒用過,所以只能說一些直觀的感覺)。我主要從以下幾個方面來計較它們:
1.學習框架的成本,接口設計等易用性方面。
三個框架的學習成本在我看來是
Theano>Torch>mxnet
因為Torch底層語言是lua,一種類似python和js的腳本語言,熟悉python或者js的同學學起來應該挺容易(可我偏偏不會腳本語言),但畢竟lua是一種比較小眾的語言,所以對於大多數人來說還是需要花費一定的學習成本,因為我實在是沒有太多的接觸過,所以我只能憑感覺把它排在第二。對於剛從Theano轉到mxnet的我來說,第一各感覺就是編程變的容易了,舉一個非常簡單的例子,在Theano中,定義一個Symbolic scalar還得先查查文檔向量對應什么,矩陣對應什么(簡直難受的要命),而mxnet中對應的symbolic variable只有一個方法。下圖僅僅是Theano Symbolic scalar類型的一部分,當一個初學者使用時會帶來極大的不便。
我為什么會覺得mxnet最容易學的一個重要原因是:雖然mxnet底層是由c++實現,但它提供了python,lua,R,Go和js等多種語言接口(最近好像還加入了jvm語言scala的接口),這使得使用不同語言的人都可以快速的使用上mxnet而不需要跨過一個語言的鴻溝。這也是為什么我覺得mxnet上手最容易。
2.框架的社區活躍程度,普及性
首先我們來看看三個框架在github上的star和fork數:
然后是貢獻熱度圖:
三個框架中,最老牌的要數Theano,框架出現的時間最久,貢獻熱度也穩定。torch是三個中star數最多的,但是貢獻熱度確不是很高,mxnet是一個新興的框架,這個框架的貢獻者熱情非常高漲,一些新近出現的模型可以找到(今天就有新加上了14年的一個比較新的神經語言模型)。所以,三個框架theano和troch已經比較穩定,而且也有大量的論文實驗都是基於着兩個框架的,mxnet出現的時間不久,但社區熱情很高,一些前沿的算法和模型都有mxnet的實現版本。
3.框架性能和可擴展性
三個框架中,theano和torch都只支持單機版,mxnet支持分布式,mxnet還強調能可以在多種設備上使用。從這個角度來看,theano和torch更適合於研究來使用,而mxnet是有可能和google的tensorflow一樣應用到實際的生產環境中去的。
左右兩張圖分別比較了mxnet與torch和torch與theano的運行速度,雖然這只是在特點例子下的比較,但還是可以清楚的看到,torch和mxnet結合gpu加速計算的能力高於theano。
以上就是我對這三個框架的一些比較,純屬個人愚見,每個框架都有自己的好處和不足,真正使用哪個框架完全取決於個人的情況,希望我這點比較能提供一點幫助。