Keras,Theano,pytorch,caffe2 哪個更好一些,應該怎麼嘗試學習?

已經嘗試了tensorflow和caffe,基本上已經上手跑demo和寫基本小程序
接下來應該嘗試哪個框架呢?
最近pytorch挺火的,之前試過torch,但是lua語言讓人很討厭
caffe2最近也出來了,好像也不錯
theano和tensorflow據說可以做keras的後台

有木有大神給點建議,甩點鏈接什麼的
追問一下,tensorflow 1.0之後,應該怎樣學習TF?好多github資源都要重複改好久。


這是前幾天 cs231n 課上的ppt.

第一張: 幾個框架的關係: caffe2 是caffe的升級版, tensorflow是theano的升級版, pytorch是torch的升級版.

第二張: 作者對幾個框架的選擇建議. 很顯然作者還是偏愛PyTorch(一個輕描淡寫的 best泄漏了自己的心之所屬 滑稽臉).
P.S. 現在cs231n的作業分為PyTorch和TF,學生自己選一個完成(儘管他們的boss是谷歌雲的主管,主推TF, 但他還是把剛發布三個月的PyTorch放進教學內容中---這個決定甚至還要更早, 我老早就在syllabus上看到了PyTorch的名字. 不過這也和jcjohnson/karpathy的喜好有關)

ICLR2017上PyTorch獲得了極大的關注,甚至有壓過TF的勢頭(不知道是不是真的),反正根據我在reddit/twitter/論壇見聞,用過的基本都說棒

下面是我個人的建議:

  • 如果是研究的話,keras不推薦。現在keras在國外的名聲也越來越差了(和作者的一些行為有關,最主要還是框架自身的原因,不自由,不靈活,速度還慢)
  • theano也不推薦,因為tensorflow基本上就是theano的升級版,為什麼不用更新的呢?
  • caffe建議升級到caffe2,理由同上,caffe2最吸引人的是速度和部署以及許多model(順便期待一下mask rcnn的代碼)
  • mxnet文檔有點亂,minpy/keras好像放棄開發了。更新: mxnet新介面 gluon, 值得一試 gluon 教程(中文版,李沐大神親自視頻教學哦)!!!!
  • tensorflow是 safe bet。如果沒有特別的偏好,就選當前最流行的,保險嘛。而且被tensorflow虐過的人更能體會到pytorch的優雅之處 (′??_??)

你要是問我最推薦哪一個

Matlab is so 2012.
Caffe is so 2013.
Theano is so 2014.
Torch is so 2015.
TensorFlow is so 2016. :D
--Andrej karpathy?

It"s 2017 now.


(full disclosure:我的組員目前常用的框架是Caffe2和PyTorch,產品線上的Caffe代碼已經完全migrate到C2,已有的Torch代碼正在根據項目情況逐步轉向C2或者PyTorch。)

PyTorch用來做非常dynamic的研究加上對速度要求不高的產品。

Caffe2用來做計算機視覺,HPC和數值優化的研究,加上產品線里的高效部署。

Caffe可以繼續用,不過如果你關注mix precision或者heterogeneous computation或者手機和嵌入式端的話,建議嘗試一下Caffe2。

如果你用Theano,建議轉向TensorFlow,或者PyTorch,後者更靈活一些。

如果你用Torch,強烈建議轉向PyTorch。已有模型可以考慮torch2caffe來部署。

如果你用TensorFlow,開心就好,performance的確是個問題,但是畢竟社區好。

如果你想認真學machine learning,那請不要用keras,我一般收到的反饋是,keras做簡單的東西容易,一旦你要做點真research,就很難改,因為包裝太多。

關於我家Caffe2和PyTorch的關係問題,這是我在ICLR的背包照片,所以請不用擔心。(Caffe2的貼紙我忘在加州了,有興趣的回頭可以找我要)

最後一句話,框架就是個框架,最終要能出活。


強推PyTorch!
首先聲明pytorch已經不是用lua寫的,而是以python為第一語言的了。

Keras的優點是入門和使用簡單,但是畢竟後端是用的tf和theno所以最後要深入改代碼,提高性能之類的,還是得落在後兩者。

TF不用多說,現在最火的框架了,Google爸爸出的,質量有保證,而且已經出1.0了,整個系統很完善,值得好好用。社區也很強大。但是缺點是:整個系統抽象層次比較高,有些臃腫,而且改層不方便啊

Caffe和Caffe2,大神@賈揚清 已經現身,該說的都說了。Caffe現在大多論文還在用,但是Caffe2畢竟更新,設計理念也更好。不過,我CPP不好啊,改層寫起來也不順手啊(主要自己太菜)

最後,PyTorch優點一大堆,入門簡單,上手快,堪比Keras。代碼清晰,設計直觀,符合人類直覺。FB爸爸出的,質量也不用擔心。而且定位就是快速實驗研究,所以可以直接用python寫新層。Dynamic的設計要實現一點crazy的東西簡直不能再爽。當然也有缺點,畢竟新出的框架,有點小bug,但是整體不影響使用。而且有問題在forum上提出來,作者很快就會解答,互動很強烈哦~

所以綜合而言,如果你想快速入門,方便研究,那麼歡迎入坑PyTorch

=======================補充=========================

經 @陳明傑 同學提醒,專門去找來了CS231n查看了一下,對各個框架講得很全,很細,推薦大家去看一下,選擇最適合自己的

(http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture8.pdf)

具體意見,陳明傑已經貼了,我貼一張其中的代碼對比圖吧,大家感受一下PyTorch的簡潔~


最近看到了李沐大神的mxnet,感覺也挺厲害的,貌似民間評價文檔不好,可以去玩玩,據說非常efficiency,而且節約顯存

原答案
################################如果嘗試過tensorflow和caffe,可以再嘗試一下pytorch,特別是如果你喜歡python的簡潔,那麼pytorch是非常推薦嘗試的,入門非常簡單,比tensorflow簡單多了,所以你不需要太高的時間成本就能夠基本了解這個框架,多嘗試一下也沒有什麼壞處,說不定你能找到你喜歡的框架。

theano就不推薦了,畢竟tensorflow出來就可以用tensorflow了。

caffe2目前才剛剛開源,如果想嘗鮮可以去玩玩。

另外不推薦keras,開始的時候用keras玩一玩,基本入個門,之後還是用底層框架是最好的,你做著心裡也踏實,畢竟神經網路就已經是一個黑箱了,你還用一個黑箱框架把自己架得高高的,做著心裡能不虛嗎?除非你能把keras的源碼大概看看,有這功夫自己就可以用底層框架跑了。

可以看看我這篇文章對pytorch的介紹https://zhuanlan.zhihu.com/p/26635366


如果是自己做 research 的話,應該都去學 (caffe/caffe2, pytorch, tf),因為畢竟別人放出來的代碼什麼版本的都有。

在做一個 idea 之前,先想想有什麼特性需要實現,這種特性用什麼框架寫最簡單/有現成的。從我的角度來看,detection / segmentation 用 Caffe 的很多,畢竟歷史原因在那裡擺著,GAN 什麼的各種都是 torch / tf,畢竟當時 pytorch 還沒有出來。

之所以盡量找別人 release 的代碼是因為,有很多時候,自己 re-implement 就是沒有原 paper 的效果,可能是因為各框架 optimizer 實現不一樣或者就是自己寫出了 bug。Anyway 為了快速實現以及試驗 idea,最好是能直接無縫改你所找到的,作者實現出來的 baseline model。為了這一目的, (caffe/caffe2, pytorch, tf) 應該都去學

以上論述不適用於 research group(可能有限定框架)或者做完全沒有 codebase 的 idea 時候的選擇


轉兩個圖,基本就可以回答LZ的問題了:

如果把arxiv上最近5年發表的所有28303篇論文拿出來分析現狀和趨勢,會有什麼樣的結論?

各framework的現狀數據:

各Framework的發展趨勢:


恍惚又看到了當年語言、Web框架之爭,問題里的各位大神已經詳細闡述了框架的優缺點了,我也不再多說。教條式的勸導可能無法說服大家,首先"不帶著立場"去感受一下各個框架,才是最好的做法。反正做一個模型走一遍產品流程 也不花多少時間

另外:

  1. 學術研究者
  2. 演算法改進者
  3. 工業實現者

三個角色的立場本來就不一樣,大家自行判斷在哪一層

當年的語言、Web框架之爭,當然現在也在各種地方持續著。確切的說,大家都有優劣,一意孤行選擇一個是不是會導致自己所在項目的難以持續?。。。結論應該是:技術的選擇 本身不會導致項目的倒閉,項目自己的反饋機制才是根本(遇到了坑怎麼辦,解決or繞過?無法繞過怎麼辦?重構帶來的工作量和項目推進如何平衡?)

  1. 簡單
  2. 正確
  3. 性能

(還有個什麼來著?) 這些問題在語言之爭上面已經講過無數次了,從過往的經驗來看,簡單是最有傳播性的病毒(?),快速迭代,小步快跑 才是項目活力的來源。。然後這個病毒會因為快速的開發逐漸蔓延開來。。(我還記得我看了這篇文章的,不過瀏覽器歷史裡沒翻到。

不同的地方的要求是不一樣的,上面的這三個也不是不能同時達到(不可能三角什麼的),選擇是一件說難也難,說不難也不難的事情,主觀因素雖然也很有力,但希望各位初學者或者各位大大內心有一桿秤並且讓這桿秤發揮作用:你要的是什麼?如果不能兼得,你是否可以堅持原來的立場


最後我還是給點參考意見吧。。。我只用過TF、PyTorch、Keras三種,我的考慮優先順序是:簡單&>性能。快速的實現模型驗證想法第一,快速的訓練出來這個模型第二。機器學習框架講究正確性嗎?沒有研究過所以沒用這個變數

在簡單的角度來看,TF&

Keras的基線在簡單,藉助backend的封裝使得開發和維護很簡單,實際上也可以直接使用下面的backend 例如tf,同時使用keras自己的設計。實現過於頂層了,我還挺喜歡它的插拔插件的設計的,和Web開發中的middleware挺像。。如果要做一個系統,我也會再這樣做上一套模型觀察者的插拔插件。。。

TF應該走在了產品化這條線,。它的可視化界面來看圖的結構、做各種數據的採集和顯示也挺方便的。。分散式生產環境的模型的訓練和部署也有比較好的方案。但實現非常頭疼,折騰了半天tensor的傳遞,雖然弄好了,但可讀性和後續的維護性很糟糕

PyTorch在中間,現在看還沒有在分散式系統中的相關工具,所以只是自己玩玩。。。

torch.distributed is a highly experimental package

看路線圖還在追趕tensorflow。Python代碼質量還不錯。。謹慎看好。。


我怎麼過了四個月才看到這個問題……

我個人長期比較看好PyTorch和Caffe2,Tensorflow畢竟早了一兩年,開發起來太痛苦,Google帶起來的節奏被Facebook搶了風頭去。今天新鮮的新聞:微軟和Facebook合作開發Caffe2和PyTorch的生態,提出了一個神經網路模型交換的協議,其實就是讓PyTorch和Caffe2可以共享訓練好的模型,這樣就可以用適合探索新模型的PyTorch寫代碼做實驗,用效率更高的Caffe2來部署了:

Facebook and Microsoft introduce new open ecosystem for interchangeable AI frameworks

做為IBM/pytorch-seq2seq的維護者(是的這是一個硬廣),我反正是長期在IBM Research里安利PyTorch,一般實習生買賬比較快,年輕的研究員和開發們比較願意嘗試,至於一些還在還在用Java手寫Matrix Factorization的上古神話,那就開心就好吧。


寫寫我自己的一些體會吧,我之前用Pytorch,Tensorflow,Mxnet做過一些項目。我覺得最好是根據自己的需求選擇。在需要快速驗證一下自己某些想法的時候,我一般會用Pytorch快速實現,而且Pytorch的底層計算的代碼是C寫的,並且和Torch共用一套底層計算代碼,想要閱讀原碼並做定製化修改比較容易上手。

在做一些數據量比較大的long term的訓練的時候,我會用tensorflow,比如它提供的tensorboard的訓練監督,還有自帶的profiling和debug功能比較方便,當然在其他框架也可以遷移tensorboard,不過自己比較懶,不想去折騰。我自己用trnsorflow還有個原因就是它可以很方便的把自己的model deploy到手機上,現在caffe2出來了,或許可以是一個比較好的替代。

我覺得選擇框架的時候還得參考一下你所做的項目,比如做person re id大多數的工作都是基於caffe修改的,這個時候遷移這些工作到其他框架下時不時會遇見坑,如果你是一個人在做的話,會比較花時間。比如做物體定位,Mxnet已經提供了一些操作的高效實現。

總之,框架不是主要的,現在這個時候相比以前寫個卷積操作都需要自己寫一些cuda代碼已經好很多了,多試試新東西,選擇自己用得順手的框架就好。


心疼Dynet...


感覺 PyTorch 最合我意,可惜目前它和學校的 cluster 兼容性還很差,越train越慢,還經常卡死。。。不過未來還是看好 PyTorch。


Pytorch很適合我們煉丹師。使用起來和numpy相差無幾。雖然現在文檔還不是特別完善,但discuss那裡彌補了這塊。fb的研發大大們回復的超快,有什麼疑難雜症直接上去問就好了。這個框架入手只需要一周,門檻很低,而且支持動態修改你的model,好用


謝邀。

目前在用keras,感覺還不錯。


Theano 應該很容易排除出去,無論無論是速度還是文檔還是社區都比其餘三個有所欠缺。

Caffe2 是一個新的框架還沒來得及看。。

PyTorch 和 tf 的 主要區別大概就在於 PyTorch 的 Dynamic Computational Graph, 雖然 tf 也有 tf.fold 最近支持了DCG,然而實際用起來還是很麻煩。

另外 tf 的一個問題在於速度,同樣的網路結構,我用 tf 跑 2.4 ms 一輪,PyTorch 只有0.7 ms。雖然對比可能不嚴謹,但是 tf 的速度問題一直是飽受詬病的點。

tf 的優勢是成熟的API,較成熟的文檔,以及龐大的社區:很多結構都有 tf 實現,這些是 PyTorch 作為一個新框架比不了的。

Justin 說 在Facebook 內部,PyTorch 用於 Research,Caffe2 用於 Production,而 Google 的 Research 和 Production 都是 Tensorflow。


至於嘗試學習,我很推薦之前沒有Deep Learning 基礎的人寫寫 cs231n 的作業,如果掌握了任何一個框架,231的作業就過於基礎,這時候學習新框架的時候看看model zoo就好了。


本來,框架好壞的爭論毫無意義,數據比框架重要多了。但既然提到了這個問題,說說無妨。每每在中文社區出現這個問題,tf的作者不是中國人不可能來說;mxnet的作者不屑於來說,人家框架的設計就是高明還沒有歷史架子;而唯一剩下的,就只有caffe的作者自帶大V光環的暗示了(當然值得慶幸的是,除了很外行的新手,沒幾個人會上知乎來問這個)?這樣很不好,不是嗎?

那句「用tensorflow的,你們開心就好」,看來真是自大自負到無可救藥了。這句話的意思莫非用tf都是傻子,就用你家caffe的才是真正明白效率速度的成功人士?用tensorflow的人就只知道在茫茫黑暗中傻開心?這地圖炮水平,感情caffe真是世界人民的救世主啊。。

還是看看tf,torch,caffe和mxnet的用戶數據分布圖再來說吧。

呵呵

所以我覺得需要其他方面的人來多說幾句。另外,最好把jeff dean也叫來,教他讓學一點點中文;這位作者最好對著jeff dean正面剛,別只敢對著萌新洗腦。否則這一言堂啊,貽害無窮。


現在流行的往往不是因為技術先進,而是因為背後金主支持,易用度和有無獨特的特性。

譬如那個tensorflow吧,經常被以「performance不好「為理由嘲諷。其實說的沒錯,tensorflow的設計導致其並不是做到最快為目的,但是資源豐厚,分散式計算紮實,最先一批支持rnn,lstm庫也是人家的優勢。這個都要劈頭蓋臉的否認,那就沒意思了。

caffe2而言,相比caffe取得了長足的進步,借鑒tf設計的時候保留了自己的特點(也可能因此對tf的缺陷如數家珍,念念不忘,倒背如流,堅守十年),對新硬體新設備的支持也可圈可點,和業內大廠緊密合作。總的來說,是一款不錯的業內產品部署框架,重點在於能用,能跑,新。但是其編碼的過程冗雜繁複,模型類別的支持和涵蓋不如tf,讓一線寫模型和調試的同仁有苦難言,沸反盈天也不是誇張。畢竟並不是所有人,都是那位被拿出來點名表揚的高盛天才小哥好嗎。普通群眾,又不是抱著搞數學競賽的心態去寫模型,也不想為了寫一個帶有attention的rnn要一天寫幾千行代碼。

其實這種設計上的取捨帶來的「缺陷」,我們還可以理解。不過讓我特別憤慨的,則是這位作者每每抓有利於自己的例子,誇自己而貶別人,這就不厚道了,證據就是他對於tensorflow的速度缺陷,冷嘲暗諷,而且幾十年如一日(起碼已經持續了1年),似乎該作者只知道tf的這一個缺陷,且默認tf在其他方面超過了caffe2,讓人唏噓。這樣王婆賣瓜,自賣自誇,雙重標準,毫不臉紅的技術,怎麼不去快手做新聞發言人呢。浪費了人才。

又比如,碰到別人給出的優勝跑分,每次第都一個站出來暗示評測沒有意義,卻沒見tf的發言人出來說過什麼,暗示什麼,撇清什麼--因為公道自在人間啊。你這麼急於澄清,恰恰說明不足和在乎。好比現在的北朝鮮,在國際舞台天天嘩眾取寵。

誰跳得越好,恰恰說明誰處於劣勢,誰最急。畢竟,某框架現在是某人事業上安家立命之本了。無奈,世界上還有更聰明的人,還有更開放更全面更先進的框架,還有人心胸更加寬廣,從不靠貶損競爭對手為生。對於這些事迹,我們只能說,「人在做,天在看」。

面對競爭對手給出的跑分圖,口頭禪就是「跑分沒意義,跑分的定義難以界定測試數據可以人為操縱」,否定競爭對手的努力。跑分沒有意義,那請問什麼有意義?否定別人努力的時候高高在上雲淡風輕,被人質疑的時候就惱羞成怒出口成臟罵人「傻逼」。您真厲害!


如果跑分不重要,那為什麼還用這些評分說明caffe2超過了caffe呢,彰顯caffe升級的成果呢?這樣的雙標,真的好嘛?退一萬步說,評分沒意義,使用難度有意義嗎?那麼在使用難度上,caffe又做得如何?我想大家,心知肚明。mxnet在某些scalability上的跑分已經超過caffe2。


似乎在公司里,在網上,在知乎誇caffe,貶tf甚至mxnet,近年來已經成為一種政治正確。caffe出的早,給國內碼農帶來了福利,這是事實,我們實事求是。但近年來已經被tf強勢趕超,mxnet也是異軍突起,在並行計算的體系設計上就超過了caffe,這就無法承認(然後用跑分無意義拍磚?)?這是端正的態度嗎?這種一言堂的行事風格,武斷專橫的言語態度,難道某人想做李達康嘛?承認一下自己的不足就有多麼難?又不是fb的所有技術都是世界第一。AI領域被google吊打幾十年,人民群眾還不知道?不知道,也別被恐嚇被忽悠。

事實上,如果不是你想成為fb圈子裡的一員,或者成為fb的供應商,你根本沒有理由用caffe。caffe的定位是讓fb的模型在裝了fb的手機上跑的產品部署框架,而不是讓你的模型在你的電腦上跑實驗做研究,你開公司還是fb的合作夥伴,要部署產品?就算是,我也我建議你轉去tf,或者mxnet。pytorch研究上用得更好。具體選哪個看你的硬體條件。

自從加入fb,caffe就不再是一個單純的開放通用化框架了。他現在已經儼然是fb內部員工訓練模型和部署產品的官方指定框架。在外部的社區支持程度遠遠落後於tf,連python的各類前端都沒有其後端。現在caffe2名以上是開源軟體,其實開源水平和社區支持程度,遠不如tf。

因此到處去罵tf速度慢(多慢?您給個數,最新版哦),用「開心就好」對tf用戶群冷嘲熱諷,極盡嘲笑之能事,開地圖炮,看來也是這位作者唯一的路數了。

mxnet,不做評價。但是內情人士透露,設計者是體系設計科班出身,在並行上有優勢。那麼最後能否超越fb,也只能看amazon的後台有多硬了。mxnet已經用來做amazon雲計算的後台了,技術實力應該是無可指摘的。話說這幾大公司,也就只有fb沒有自己的雲平台了,遑論機器學習。這還不能說明什麼嗎?fb最大的貢獻其實是php(hack)。torch,caffe都是挖人來搞的。

我相信,不管這幾位作者怎麼說,事實會證明一切的。表面上說誰勝誰負不重要,大家都是好朋友。實際上在PR上的言語態度,還是很誠實的么。

如今看來,tf的支持度一片大好。如果caffe的編碼難度再不友好一點的話,就那麼幾個百分比的速度優勢,捫心自問,真的有說服力嗎?這是就是歷史趨勢。打哈哈沒用,你做的不夠好,就會被tf,甚至被屢屢打壓的mxnet淘汰。而mxnet的作者,可是堪比google jeff dean的科班出身計算機體系設計天才。結局如何,我們拭目以待。

最後說幾句,最後的贏家其實是nvda。


1.Keras不推薦使用。Keras+tf的普及率很高,也算是DL入門門檻最低的一種,但是容易給初學者留下DL就是堆幾個layer搭搭積木的錯誤印象。一旦要在模型上面做一點改進,比如加個loss,或者需要復用你的computation graph中的一些節點,Keras的問題就突出了:除了搭積木,靈活性基本為0。事實上,Keras最大的價值在於實現的高層的operator封裝,但是現在能勝任這個角色的庫太多了,prettytensor/tflearn/tf.slim/tensorlayer還有官方的contrib,Keras的目標定位只會越來越尷尬。

2.Theano。可以算作tf的前身,都是symbolic gradient+autodiff的代表,因為據說tf就是Google挖了theano的組的人來做的,所以在有tf的今天,新人學習theano的價值估計不大。但是據說在rnn上效率有優勢,不過個人沒有嘗試過。

3.PyTorch。算是DL框架裡面的新星吧。之前Torch流行的一個門檻就是要用Lua寫,很多人包括我覺得為了用一個框架去學習一個非主流的語言,這個成本有點大,所以對於Torch比較敬而遠之。PyTorch一舉解決了這個問題,又合併加入了autograd的功能。框架本身很輕量級,而且因為dynamic的特性,做rnn還有樹結構甚至recursive的網路,這些需要動態的unroll graph的應用,就大大的勝過靜態建圖的tf系框架,對於快速原型實現一些比較非常規的想法來說非常有吸引力,所以很受研究人員的歡迎。缺點是目前還比較新,可能要自己去趟坑。

4.Caffe[2]。對於新人不推薦,這種把模型用配置文件,而不是實際代碼來表述的路線放到今天感覺比較過時。當然,在一些需要實時性的領域,Caffe的作用還是不可替代的。

5.TF。終於說道這個elephant in the room了。為什麼這麼說呢?因為所有的框架都會拿自己和TF比,其實也是對於TF現在是DL框架領域老大的一個默認,這也是我個人最熟悉用得最多的框架。TF對於程序員入門DL應該是非常友好的,說到底就是用操作符串出一個數據流(dataflow)的圖,這個圖裡不同節點之間是用過tensor作為數據格式交流的。Tensor+Flow,非常的言簡意賅。對於TF的一些批評,比如過於「工程」,比較「重」什麼的,我覺得反倒是對於軟工背景的人來說是個優點,沒那麼玩具的感覺。當然最大的缺點還是不能迴避,就是目前對於動態graph的支持很差,rnn的代碼封裝得很黑箱,看著很彆扭,不過也有一些項目在跟進解決這些問題,比如前些日子的TF Fold。總的來說,如果你對於DL所知不多,從TF開始學習是風險最小的選擇,相關的文檔非常完善。分散式也是TF的另一個亮點,這個相對於單機訓練,其實還是一個比較大的坑,TF本身在分布上的文檔也不是特別詳盡,但是相對其他框架也算是聊勝於無了。

6.MXNet。MXNet本來我比較關注,但是PR和Marketing做得真是差啊差啊,這DL框架的戰爭打得如此紅火,Google和FB都是拿出渾身解數來推廣,特別是TF,tutorial做得這麼精細簡直就是喂到你的嘴裡,MXNet卻一直像一個安靜的美男子一樣,靜靜的等著自己的崇拜者找上門來。看看Reddit ML版,貼上去的Project,有多少是MXNet實現的呢?現在傍上了AWS這個大款,希望能在PR和Marketing上有些改進,否則過了這村就沒這店,其他框架也在快速的進化和武裝,不發力吆喝就會被邊緣化,很現實。

7.CNTK/Paddle/Chainer/etc。這些都是屬於others的框架,說實話很少見人說或者用。Chainer比較好玩,因為是日本人自己開發的框架,所以很多日本人用,不過出了日語圈,似乎並沒有太多的traction。


角度不一樣,用的人就不一樣.


想入門的,挑個快速的搭建的,可以快速熟悉流程;

入門之後,為了設計一些特殊結構,就得考慮拓展性,tf,mxnet, pytorch, caffe,都可以,caffe2我還沒用過.接下來就根據需求選框架,那句話說得好,你不會的東西會成為你的瓶頸.現在各種框架的代碼很多,你不能保證只會一個框架就可以一直走下去.

所以,跟著潮流走,你用RNN,lstm多,就用這些性能好的框架,做cv就用cv用的比較廣泛的框架,比如caffe,mxnet的pre-train weight還是比較豐富的,當然現在很多轉換的工具.我覺得每個框架都是為了某個需求提出來的,如果各個方面都好,那麼這個框架反而有些平庸.

看需求選框架,而不要看代碼量選框架,畢竟寫出來的代碼是要跑起來的,找一個易上手的上手,上手之後轉功能強大的框架,寫厲害的網路,豈不美姿姿


不是號稱ICLR-17使用pytorch的已經超過tf了嘛》_》.

PyTorch中文文檔!馬上就完善了。


20170512補充

猛然發現TensorFlow並不支持OpenCL,我大Theano不死哈哈哈哈哈哈哈哈~

20170509補充

對於Multiple GPUs上,TF是有官方支持的,基本上套著官方的tutorial就能很快寫一個Multiple GPUs的應用;說Theano不支持Multiple GPUs,個人覺得有些武斷:Theano本身支持Multiple GPUs的應用,官方也提供了example供大家參考,但是針對於神經網路的訓練,官方卻沒有相應的技術支持(至少我沒有看到tutorial和相應github代碼),有個第三方庫Platoon為Theano Multiple GPUs的App提供了技術支持。

其實,如果了解TF對Multiple GPUs的實現原理,Theano相應的代碼應該也不難寫:TF將數據map到各個GPU上進行計算梯度,之後由CPU進行reduce,平均梯度之後修正網路,之後將參數和梯度送回到GPU上進行下一輪計算。Theano相應代碼可以用Python的多線程multiprocessing進行實現,實現細節和TF略有不同,一語難盡敬請見諒。如果想知道更多相應細節,歡迎來fork小弟對以上原理的實現:92xianshen/lasagne-multi-processing。

最後想吐個槽,Theano的scan實在是太讓人傷心了,別說姥姥不親舅舅不愛,自己親爹都說不清道不明的~

#######################這是分割線#######################

小透明來說一下,大神不要拍磚~

據我觀察,這幾個「框架」本身定位不同,很難對其進行橫向比較,故余以為首先應該按照需求和功能將其分個類,再介紹相應的特點。

首先,Theano和TensorFlow應該能歸屬到一類,這兩個都是比較底層的符號計算庫,解決的問題包括但不限於深度學習網路。官方文檔對於Theano的介紹為:

Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently.

TF官方文檔的slogan為:

An open-source software library for Machine Intelligence

在編碼方式上,個人感覺更喜歡Theano一點,原因是其編碼風格十分規範,從符號變數定義,到定義計算,通過theano.function編譯成函數,最後到主程序調用相應函數進行計算,程序書寫規規矩矩,按部就班,讓人深深地感覺到編寫程序的「建築美」。TensorFlow有Google為其背書,自然風頭更勝;再有活躍社區和完善文檔的加持,目前已是青出於藍。但這兩個框架都非常底層,所以用這兩個框架來實現自己的特定需求,尤其是做標準架構,會比較麻煩,需要投入的精力會比較多;但如果做一些非標準的架構,針對於自己需求對網路結構有特定要求的,這兩個相對底層的庫的優勢就非常明顯了。針對於快速構造各種神經網路,兩個庫各有不同的toolkit對其進行封裝,比如老前輩級別的lasagne和後起之秀TensorLayer,用這些庫寫標準網路是非常爽的,很快就能實現需求,剩下的就是等著程序跑出來了~

Keras應該是構築在Theano和TensorFlow之上的庫,應該是對Theano和TF做了封裝,能夠更快構造出已經定義好的標準結構(比如Inception和ResNet之類的)。當然,對底層封裝越好,面向需求的開發就越快,庫相對來說就越不靈活,很難去完成一些比較特殊的需求。

至於PyTorch和Caffe2, @賈揚清 大神的回答已經非常完善了,PyTorch的Tutorial小弟只跟了幾個,確實覺得方便,如果要說一點個人體驗的話,還需要深入研究,請見諒;Caffe2雖不了解,但Caffe是非常經典卷積神經網路庫,經典到吸鐵粉無數,很多人去閱讀其源代碼來學習卷積神經網路,這些都要歸因於 @賈揚清 大神的天才設計。剛才看了官網,Caffe2應該是加入了RNN和LSTM的支持,應該也是一個不錯的選擇。

最後說說我自己的體驗吧,如果想入門,了解一下各個標準架構,甚至想直接拿標準架構直接fine-tune一下實現自己需求的,建議是在了解Theano和TensorFlow之後用其上層封裝,比如Lasagne或者TensorLayer,屏蔽底層細節,需求實現比較快;如果想深度定製,TF是目前比較好的選擇;PyTorch不太了解,可以看看Tutorial。總之,Python下的各個框架各有千秋,還需要跟據題主的需求進行選擇。

最後還想說一句,所有脫離需求推薦框架都是耍流氓,哈哈~


去年11月份我在其他網站上做過一次公開課,真後悔沒來開Live收學費。最近按照更新發展的情況更新在書里啦。

AI 從業者該如何選擇深度學習開源框架丨硬創公開課

基本上比較的維度包括了: 現有平台、生態的整合難易程度;其他應用方面;社區成熟程度。

http://static.leiphone.com/uploads/new/article/740_740/201611/58380f110f75d.png?imageMogr2/format/jpg/quality/90

過了幾個月看來深度學習平台發展還是很快的,基本上TensorFlow 一家獨大的格局已經沒說的了,如果懶的話前端用Keras。

其他平台基本上是每個大公司配一套,萬年互不往來。基本上大家初學可以TensorFlow入門,一不小心去了Facebook再學PyToch,去了微軟學CNTK,去了亞馬遜學MXNet / DSSTNE。如果TensorFlow熟練了,其他幾項也就是半天時間就可以上手。。。


推薦閱讀:

TAG:深度學習(Deep Learning) | TensorFlow | keras | PyTorch | Caffe2 |