這次dmlc發布的深度學習框架mxnet比之caffe有什麼優缺點?
最近在github上面看到dmlc發布了新的深度學習框架mxnet,從官方文檔來看dependency相比caffe要乾淨不少,支持symbol好像很炫酷的樣子。
之前在老闆的帶動下鼓搗過一陣子caffe,感覺不是很好用,依賴好多google開源的東西,但是社區很龐大去google一下問題都能解決。請問與caffe相比mxnet有什麼優勢和劣勢呢?另外cxxnet項目現在是什麼定位?
caffe是很優秀的dl平台。影響了後面很多相關框架。
cxxnet借鑒了很多caffe的思想。相比之下,cxxnet在實現上更加乾淨,例如依賴很少,通過mshadow的模板化使得gpu和cpu代碼只用寫一份,分散式介面也很乾凈。
mxnet是cxxnet的下一代,目前實現了cxxnet所有功能,但借鑒了minerva/torch7/theano,加入更多新的功能。- ndarray編程介面,類似matlab/numpy.ndarray/torch.tensor。獨有優勢在於通過背後的engine可以在性能上和內存使用上更優
- symbolic介面。這個可以使得快速構建一個神經網路,和自動求導。
- 更多binding 目前支持比較好的是python,馬上會有julia和R
- 更加方便的多卡和多機運行
- 性能上更優。目前mxnet比cxxnet快40%,而且gpu內存使用少了一半。
目前mxnet還在快速發展中。這個月的主要方向有三,更多的binding,更好的文檔,和更多的應用(language model、語音,機器翻譯,視頻)。地址在 dmlc/mxnet · GitHub 歡迎使用
這個問題回答的人好少啊
mxnet主要是繼承自Minerva和cxxnet,cxxnet的特性 @李沐 在樓上已經說了,既然Minerva的開發者們不在知乎出現,作為當初的合作者我就冒昧說幾句我知道的吧當初做Minerva的目的是提供一個可以快速實現原型演算法的系統。從前開發演算法一般首先是在小數據集比如MNIST上,用matlab或者python實現一個最基本的結構看效果,之後逐步放大推廣。但這種模式已經跟不上時代了,隨著方法的效果越來越好,MNIST這類小數據集正在逐漸失去檢驗演算法的作用,越來越多的新方法從一開始提出就是運行在GPU和大數據集上的,因此迫切需要能夠快速在並行/GPU上建立演算法原型的工具。因為這些演算法可能是千奇百怪的,所以給用戶足夠的靈活性操縱儘可能多的東西很重要;因為要快速開發和做ML的人精通GPUcoding不容易,所以這個系統要像matlab一樣用起來儘可能簡單和抽象,讓使用者專註到演算法而不是coding細節上去。
正因如此,Minerva最重視的特性是靈活性,使用者可以很自由的控制模型從結構到訓練的絕大部分特性;其次是易用性,比如Minerva對Python(現在有很多別的語言)的介面支持做得很好。我想對靈活性的追求應該是Minerva區別於caffe(實現基礎演算法更方便但開發新演算法不靈活)最大的不同了。(儘管如此,Minerva的效率和可拓展性仍然非常優秀)
技術實現上Minerva(第一個)用了data flow,最後的結果很好的兼顧了靈活性和效率的要求。雖然我完全不懂System,但感覺這是一個很優雅的工作。所有這些應該都被mxnet繼承了(我很久沒有follow過了,所以對近況不是很了解),據說又融合了cxxnet的優點(mxnet的parameter server部分據我了解應該完全屬於cxxnet),我是很期待這個系統的。
最近嘗試把手頭一個項目改到mxnet上來,非常費勁。首先輸入數據問題,例子裡面那個奇怪迭代器的很不直觀,學習曲線比較陡,也許默認都是搞圖像的用吧,輸入數據還是需要一個簡單通用的抽象介面。caffe在這一塊也是很鬱悶的,如果不是搞圖像的,那就要麻煩不少。這塊真可以向keras學習一下,keras真是讓我做到了瞬間上手。一些操作的參數不是很全,或者說,應該設計成參數會更方便,比如每一層自己的學習率。不過這一塊已經比keras強不少了,這貨連實現這一點的機制都沒有。這塊感覺caffe的設計更方便,也許mxnet的symbolic與caffe的layer設計思想不同,但是我想歸根結底都要為了使用簡便直觀服務。對一些常用的需求並沒有直觀的文檔,一切都要去查issue,如果恰好沒有issue,那就苦了,只能看源碼。好吧,如果需要看源碼,那時間成本就太大了。
總之我認為現階段的mxnet不太適合項目壓力大排期緊的工業界。
=====看了lstm python的example,感覺使用起來太麻煩了,不像caffe有人寫好layer之後我只需往配置文件裡面添加一行即可。chainer感覺很好用
推薦閱讀:
※C++什麼情況下,需要重載一個成員函數的const和非const版本?
※為什麼 C++ 有指針了還要引用?
※C語言如何執行buf中的代碼?
※怎樣才是一個基本水平的c++程序員?
TAG:科研 | C | 計算機視覺 | 深度學習DeepLearning |