如何評價深度學習框架Keras?
Tensorflow, theano, Keras, lasagne, caffe我都用過。由於我做的實驗是很crazy的RNN結構。所以theano和tensorflow用的比較多。但說一下Keras。
四個字,相當不錯。易使用:對於想把它作為黑箱子使用的人,keras超級易上手。擴展性:keras的設計是把大量內部運算都隱藏了。大家很自然而然的就認為它的功能比較狹窄。其實它有的擴展性並不差,有很多辦法實現框架上沒有的功能。用戶始終可以用theano或tensorflow的語句來寫擴展功能並和keras結合使用。theano和tensorflow兩個backend這一點就不用說了。
但是我個人的建議是,至少一次,手動從零開始寫一個神經網路的代碼後,再用keras。否則容易依賴於keras的易使用性而忽略底層原理。並且很多擴展只有在懂得底層原理後才可以實現的。
最近剛開始使用theano, 經驗不多,連個基本的模型都跑不通,於是去看了下Keras,源碼比較簡潔,可以當作theano的示例教程來看,感受如下:1.文檔看似很全,每個layer是幹啥的,每個參數是啥都寫了,但是不去讀代碼,實際很多人是無法從文檔理解其具體用法的。這點看issue里的討論里可以看出。同樣,example似乎很多,而且都能直接run,還都是real world的數據集,看似很好,但是實際上,對於新手,如果需要的模型跟example里的不完全一樣,不容易搞懂到底需要把輸入輸出的數據搞成啥格式。舉個例子,example都是做的classification的,沒有做sequence labeling的例子,如果想拿來做個pos tagging,不知道數據如何組織。當然,這些其實花一天讀下代碼或者好好翻翻issue討論就可以解決了,但我相信不少人不會去認真讀代碼或者看討論,而是直接換個工具。我感覺目前的doc只有懂了代碼的人才能看懂,不懂得看文檔還是沒啥用。2.項目很簡單所以開發者不多,但是很活躍,每天都有新東西加進去。今天增加了一個新的分支後端可以用theano或者tensorflow了,不過貌似由於不支持scan,backend用tensorflow的沒實現recurrent layer。他們也意識到文檔的問題,覺得需要為小白用戶多加點tutorial而不是光給develop看。我沒用過其他的framework,僅說keras
- 拿來學習theano基本用法,很不錯
- 庫本身的代碼,比較簡單易讀,我作為python菜鳥,也能看懂。目前model有sequential和grapgh兩種,前者並不是指recurrent而是說網路是一層層堆的(也包括recurrent).其他的主要概念包括layer,regularizer, optimizer,objective都分離開。layer用於build每層的輸出函數,model會用最後一層的輸出,根據objective和每個layer的regularizer來確定最終的cost,然後在update時用optimizer來更新參數。把這四個看下加上model里的fit函數,就會用theano啦。
- 很多模型都能cover,seq2seq這種也有現成的可用。建議不要光看example,多看看github上的 issues討論,實在找不到,直接提問。
- 效率方面,我不懂theano怎麼優化,感覺keras的這種封裝,沒什麼成本,跟自己用原生theano是一樣的。當然,theano本身就好慢啊。。估計是我不懂用吧。。
這幾年一直在用TensorFlow和Theano,說點個人感受 :D
優點:
1、Keras基於python,backend可以是TensorFlow或Theano,人氣比較旺。2、和其他high-level API一樣,都是直接提供上層的框架,很快可以搞出個神經網路原型。
缺點:
1、不支持seq2seq,搞不了高級點的nlp(現在好像支持了)。不過我發現tflearn,lasagne 都不支持seq2seq。目前只知道torch7支持。2、在TensorFlow backend時,跑同樣的模型比純TensorFlow要慢一倍。。。3、沒有增強學習工具箱,自己修改實現很麻煩。4、封裝得太高級,訓練細節不能修改、penalty細節很難修改、不合適演算法研究。5、用TensorFLow backend時速度比純TensorFLow 下要慢很多。6、最近更新很慢。綜上所述,我個人覺得:Keras 適合快速體驗 ,但若想學紮實一點則用 Tensorlayer 或者直接使用 TensorFlow 和 Theano。
首先必須要說的就是,不管你要做什麼,只要是deep leanring有關的,那麼tensorflow是你不可能繞過的,就不說現在很多人論文用tensorflow,工業界用tensorflow的也很多,而且Google推出了tpc,毫無疑問有了tpu,tensorflow速度肯定會更快,可以很明顯的感覺到Google在強推tensorflow,而tensorflow目前也算是默認的老大地位。
有了這一點,我們就可以來談談keras了,因為keras的後端有tensorflow,也就是說要使用tensorflow可以用keras來簡單的代替。我之前一直覺得keras封裝的太高級,不夠靈活,而tensorflow又顯得很笨重,所以對keras和tensorflow一直有點抵觸,不想有tensorflow或者keras來實現模型。
後面出了pytorch,我就去玩pytorch去了,感覺pytorch特別輕,而且很靈活,突然我發現pytorch有好多地方和keras其實挺像的,於是有回到keras看了看,發現其實可以把keras和tensorflow結合起來用,這樣既輕便,同時也有很強的靈活性,相當於把一些重複性的繁瑣的操作用keras封裝起來,而一些自己需要設計的東西呢還是可以用tensorflow自己設計,可以看看這個鏈接將Keras作為tensorflow的精簡介面 - Keras中文文檔。
pytorch由於動態圖的關係確實很靈活,但是performance應該不算很好,沒有tensorboard可視化,雖然github有人自己想辦法弄出來了,同時也分享了,但是還是略顯麻煩,而且分散式支持應該也不太好,畢竟定位於科研,而caffe2應該是fb強推的工業化框架。
所以keras+tensorflow應該算是比較好的一種解決辦法。對於初學者可以用keras搭搭積木,熟悉之後可以和tensorflow配合起來實現很多複雜功能。所以keras提供了從初學者到高級使用者都可以滿足的功能,所以keras其實還是挺好的。
另外對於速度方面我沒有比較過,不知道keras到底慢在什麼方面,如果用keras+tensorflow,我覺得速度應該和tensorflow相當,畢竟只是使用了幾個簡單的layer封裝,而訓練過程還是暴露在tensorflow下。
個人愚見,以上。
keras的幾大特點:
文檔齊全
上手快速 純Python編寫 更新迅速 論壇活躍 就是運行速度不太快= = 不過我又不在乎速度~另外,歡迎訪問keras中文文檔~Keras中文文檔記得點進github的頁面加顆星哦~
最近一直在用keras,說點個人感受。1、keras根植於python及theano,人氣比較旺。2、提供較為上層的框架,搞個深度學習的原型非常方便。3、更新很快,我記得幾個月前還沒有multi-task的能力,最近再查就提供了graph的對象。4、最重要的,文檔很全。這點超過其它類似的基於theano的框架(Lasagne, Opendeep, Blocks)
感覺不錯,最大的的好處是簡潔 文檔也豐富,examples 也比較合理 包括cv ,nlp都可以用
我認為神經網路工具包的模塊化和靈活性是不可兼得的。你要設計奇奇怪怪的網路結構自然是theano好用,如果是把比較流行的模塊拼起來那就keras啦
用過一段時間的Keras,其最大的優點在於樣例豐富,現有主流模型封裝完美。複雜點的模型可以像搭積木一樣搞出來,適合快速地prototype。我個人感覺其主要問題在於對Graph模型的支持上,貌似現在還不支持一個Layer有多個輸入(可以暫時通過Merge Layer解決)。另外,Keras在編譯Theano函數的時候是『自上而下』(https://github.com/fchollet/keras/issues/666)的,對於較複雜的模型而言會帶來編譯時間過長的問題。不過根據作者的反饋來看,這些問題以後都會慢慢解決。如果你覺得torch好用,但又想換回Python來寫deep learning的model,那麼keras絕對是最容易上手的。
事實上,keras每個Layer一個class,層層疊加搭model的理念正是來自於torch。如今人氣已經反超本家,想來主要還是因為Python加成吧。
我個人還是很看好的。
難調試長遠來說,我覺得用 TensorFlow bankend 是最好的。以前開發 theano 的人,現在都在 Google,甚至 Caffe 的作者也去 Google 開發 TensorFlow 了。未來的趨勢可想而知。而Keras 最開始是為theano開發的,後來才支持 TensorFlow 導致運行速度很慢很慢!
--
找到一個速度比較,當這幾個框架使用相同的機器、 TensorFlow版本、CUDA、cuDNN版本時,Keras的速度很慢很慢。。。另外正如樓上,劉漸江 說的:
keras的數據輸入 沒有敘述的很清楚 到目前為止 並沒有理解keras的時間數據輸入方式keras 不能自己定義 placeholder,很多操作都不透明,只適合簡單的,跑benchmark的例子,遇到高級的情況就hold不住了,然後發現很多東西改不得,自己實現還不如直接用TensorFlow實現,簡直想哭。
我現在在用16年8月份出的 TensorLayer。它的教程其實就是TensorFlow官方教程的模塊化實現:
教程和API描述:Welcome to TensorLayer看這個庫速度很快,一下子就學會演算法原理和如何實現了,不會出現看 TensorFlow 教程時,各種糾結的情況。因為我可以一邊看TensorFlow的教程一邊看TensorLayer的教程。
https://www.tensorflow.org/versions/master/tutorials/index.html跳轉中...TensorFlow官方文檔中文版_TensorFlow中文教程_TensorFlow開發中文手冊[PDF]下載更多請參考 TensorFlow如何入門? - 科技
只是個人觀點,希望對你有用。
只說缺點,難調試,一旦出錯直接定位到了theano, 然後就只能靠運氣改參數了優點:支持python,模型庫全,搭模型快,關注度極高,迭代快,可用GPU加速。
缺點:
內部許多類的抽象不合理。命名略顯混亂。查看中間層輸出不夠直接。模型需要compile這些優缺點很大程度上都是因為現行版本將theano深度耦合,其作者和一些代碼貢獻者也意識到了這個問題,於是計划下一步將theano解藕出來放到單獨的backend模塊里,到時也許可以自由切換其他symbolic引擎。總的來說Keras是一個很有前途的庫。
===============================更新:上周作者fork了一個新的backend分支,計劃Keras將TensorFlow作為第二個backend,現在已進入開發階段,將theano和tensorflow的一些函數抽象為統一的API,詳見backend分支。
最近也剛接觸到這個包,說說體會吧。優點:1 架構靈活,model基於一層層的layer疊加,可插拔性十分強。2 rnn支持的比較全面,各種網路類型,各種網路結構都支持的較好。3 各種新式trick都有,比如Batch normalization,PRuLU等等。4 example很好,作為示範,新手可以很快入門。缺點:要說這個,其實就是theano的缺點了,難調試,中間變數很難去追蹤,觀察起來很費力!總之, keras用著非常舒服,值得一試。功能齊全,文檔齊全,例子齊全,容易上手。
建議直接加入九年制義務教育。
開始吭哧吭哧寫matlab,寫完後發現theano這貨更爽,寫了一會發現keras更爽,這才是做研究必備啊,關注模型,不用去寫細節代碼。效率飛快,幾分鐘實現idea。現在Keras支持TensorFlow了!!!
優點:
搭建模型快,上手快,使用方便缺點:編譯慢、速度慢(TensorFlow快於Theano)、不好調試,不適用於生產環境
Python用的特別多,自然而然地用起了Keras,期待專業人員來一份不同框架之間的深度對比剛開始使用這個keras,在深度學習方面也是新人,簡單說說使用體會。
優點:1.入門相對簡單,有不少示常式序,可以少改一改就能完成很多簡單的任務 2.源碼閱讀起來不算很難,很多時候可以通過閱讀源碼了解很多問題缺點:1.調試較為困難,很多時候也搞不清楚很多層的輸入形式是什麼,比如conv2d的輸入數據形式,遇到此類困難建議參看一些example程序 2.示常式序中有部分必須自己稍微改改代碼才能正常使用,比如我自己發現pretrained_word_embeddings這個示常式序把激活層改成tanh是可以用的,但是用relu就不行,似乎和數據集或者keras的版本有關。
推薦閱讀:
※像讓孩子長大後研究人工智慧,如何培養興趣愛好?
※keras比tensorflow差在哪裡?
※人工智慧是會導致大量失業,還是會創造更多就業機會?
※人工智慧有哪些誤區?
※如何評價人工智慧撰寫的同人小說《哈利·波特與看起來像一大坨灰燼的肖像》?
TAG:人工智慧 | 機器學習 | 如何看待評價X | 深度學習DeepLearning | Keras |