在眾多的神經網路框架如chainer, caffe, torch,mxnet等之間如何做選擇?

神經網路框架有很多,它們之間實際的對比效果如何,怎樣選擇合適的框架。


喜歡c++並且追求代碼效率,可以考慮caffee, mxnet

喜歡python,並且對網路有較高的個性化定製需求,推薦theano

喜歡python但是只需要使用cnn,rnn等標準模塊.,強烈推薦keras

如果不會python,喜歡靈活架構的,可以考慮torch,使用的是lua這個入門比較簡單的腳本語言,keras很多借鑒的就是torch


分散式就dmlc,caffe都是在跟dmlc里mxnet的腳步

可以考慮keras,拓展性好


哪家例子多,就用哪家呀


cudnn


首先不要有layer的概念。

一個layer承擔的功能太多了。所以不方便復用。你要搞不同的功能,就免不了要寫個layer,麻煩啊。同時也使得這些框架的代碼過於複雜。Convolution和Pooling就是同一個東西,還是有不少框架在這兩個功能上重複了很多代碼的。只考慮一維的情況,兩者在J語言里,就是 +/ 和 &>./ 的區別。

layer往往會隱藏一些東西,使得本來很容易看懂的,變得很難看懂了,讓大忽悠有了存在的可能,說是什麼模仿人腦云云。RGB圖像在CNN中如何進行convolution? - lixin liu 的回答

有了layer往往會意志不堅定,選擇back-propagation,而不是實現自動求導,這會使得寫一個新的的layer更麻煩。

二要引入統一的rank概念。否則操作多維數組會非常麻煩,不得不使用循環。numpy中是否有什麼辦法擴展dot函數? - 知乎用戶的回答

三是不要引入mutable。畢竟一般數學公式里的變數都是immutable的,和編譯器中用到的SSA形式是一樣的。你引入了mutable,回頭編譯的時候還要再分析成immutable的,多此一舉啊。

比如mxnet搞的那個symbolic api,儘管還是沒有完全丟掉layer的概念,也是在往這個方向努力。只可惜他們編譯原理都沒考及格。提出了什麼computation graph的概念。SSA形式下,變數之間自然就構成了DAG了。哪裡需要自創新概念啊。古時候有個SISAL同樣也是叫graph,除了沒有自動求導,不知道比mxnet高到哪裡去了。這也導致了mxnet的並行啊,節省內存啊,只能做粗粒度的,不能做細粒度的。

四是不要搞什麼explicit parallelism。公式歸公式計算歸計算。不能因為你換了GPU,就要去改公式啊。torch那個nn就是個反例。

這樣一來,好像就沒的選了 ...


個人現在主要用Caffe,主要都是c++寫的,代碼結構簡潔清晰,容易在此基礎上移植開發,debug。Mxnet相比caffe,內存/顯存使用更省一些,對分散式支持更靈活一些。

順便轉貼MSR的一個ML Scientist, Kenneth Tran做過的一個深度學習工具箱的主觀上的對比,這裡面簡單對比了幾個有名的深度學習工具箱: Caffe, CNTK, Tensorflow, Theano, Torch,可以大體上有個對比了解,mxnet 沒有進行對比,四個月前就有人提出更新對比,現在我看還沒有對比更新過。

https://github.com/zer0n/deepframeworks

最後,說說個人看法:caffe, mxnet, torch都是很優秀的,發展比較成熟,且社區支持都比較好的深度學習框架,目前都已支持cnn, LSTM, auto-encoder等深度網路結構,建議題主先結合自己擅長的編程語言從這幾個框架里選一個用起來,遇到問題相信大部分都會在網上找到相關的解決方案(因為用的人多)。


個人感覺Caffe的工業化應用比較多,資料也多;Torch較學術,社區好;Tensorflow由Google開發的,文檔齊全規範。另外,下面給出Karpathy的評價:

  1. 特徵提取或者在已知的模型上進行fine-tuning,用Caffe
  2. 在已經訓練好的模型上進行更加複雜的應用,用Torch
  3. 自己寫各個網路層,用Torch
  4. 大量的使用RNNs的話,用Theano或者Tensorflow
  5. 大規模的模型訓練,或者並行的模型訓練,用Tensorflow


日經貼,先學tensor flow,基本能復現所有論文思路,如果效率不滿意,再去學習其他框架。這樣的問題這麼多還在問,說明你很躊躇,怕吃虧。動起來,做!甚至你都學又有什麼阻礙呢


如果想先寫寫神經網路玩,推薦用基於theano的lasagne或keras,函數封裝的好,文檔全,有許多示例。

如果是完美主義者,torch各方面都很不錯,但是你得先會lua。

caffe速度是快,但是如果想自定義layer的話最好會cuda編程,用python和matlab介面都會降低速度。還有就是裝起來很麻煩。

tensorflow現在還不是很完善,但是有google支持,發展很快。


為什相同的參數、網路架構。。 相同的數據,只是初始化有一定隨機性。。但是最後得到的模型Caffe常常不入MxNet?(Caffe比MxNet訓練也要慢很多。。。)


我選擇了caffe,因為比較簡單,而且這方面資料,博客比較多。這我就得吐槽一下我當時安裝caffe時,教程比較少,所以安裝時問題一大堆。現在據說微軟已經出了caffe的Windows版本了,唉,感覺心好塞啊


torch。

先選一個。

先就業,再擇業。


推薦閱讀:

你在訓練RNN的時候有哪些特殊的trick?
有沒有可能運用人工神經網路將一種編程語言的代碼翻譯成任意的另一種編程語言,而不經過人工設計的編譯過程?
怎麼選取訓練神經網路時的Batch size?
模式識別、機器學習、神經網路、(泛函分析?)的學習順序
機器學習中梯度下降演算法公式是不是有問題?

TAG:神經網路 | 深度學習DeepLearning | Caffe深度學習框架 | mxnet | Torch深度學習框架 |