keras比tensorflow差在哪裡?

keras作為tensorflow更上層的api,為啥受眾面積不如tf廣泛,就業前景貌似也不如,求分析一下!


定位問題,什麼的使用場景確定了你使用什麼框架。

首先keras也有它的pros and cons,好處在於可以很快地實現網路模型的搭建,數據輸入輸出也很方便,不像tf那樣各種編碼解碼才能輸入數據,讓用戶專註於網路模型本身,而不是花大量時間去學tf那些構建圖的各種編程套路。新手一上來就學tf是很痛苦的,龐大的代碼文檔庫,如果之前沒有編程經驗是比較慢上手的(起碼我碰到的許多人一開始花在tf上的時間太多了,當別人還在搞懂怎麼輸入數據的時候我都可以跑通模型調參優化了),所以還是建議新手使用keras(後面我會說什麼時候用tf)。

最大缺點就是,慢!作為高層API,慢是必然的了,推理速度等等肯定沒tf,mxnet那些那麼快,而且由於高度封裝,你想hack源碼實現自己的功能也不是那麼容易的事(當然也有辦法)。

把keras作為一個獨立框架去與tf、mxnet、pytorch這些框架直接對比是不公平的,因為keras本身就是tf、theano、cntk的高層API,換句話說它的性能最根源還是決定於它的後端框架,作為高層API自然不能像這些low level框架那樣去使用,下面我說說keras的使用場景。

1.需要快速搭建常見模型進行驗證想法的,所謂「常見」的意思是那些被廣泛使用的卷積層、損失函數等等,因為這些都是即插即用,代碼量比其它框架少太多了!當然你要自定義層、損失函數這些就除外。

2.對速度要求不高的工業應用場景。我目前在公司實現的項目全部都是使用keras(超解析度項目就用了tf),因為項目都是內部使用,對響應速度要求不高,但你用了GPU基本上都是毫秒級,然而框架帶來的速度提升應該會有一點吧。至於訓練速度,在知乎上看到有人用paddlepaddle和keras進行了對比,同一個卷積網路對mnist進行訓練,每輪keras需要30多秒,paddlepaddle只需5秒,可見框架對於訓練速度加成應該是有的,而且幅度還不小。

3.當你用keras的時候發現速度滿足不了要求了,或者沒辦法用自帶的api進行自定義層了,那就敢敢的學tf吧!因為這個時候你已經對keras有很深刻的理解了,去學習使用後端框架也很容易了。

keras為什麼目前還排在github最受歡迎框架的第二名以及tf整合了tf.keras,是因為keras本身就定位在快速使用的場景上,tensorflow團隊也非常支持新手先使用keras或者estimator,如果滿足不了需求了再去使用tensorflow,這也非常符合人類的學習路線,自上而下學習總是能讓你保持興趣去繼續學習的(否則tensorflow會嚇跑很多新手的)。

另外,題主說的就業場景,我覺得這個不是問題,當初找工作的時候很多公司要求會使用tensorflow,然而我當時只會keras照樣找到工作了,剛進公司的時候我用keras在5天內完成了人體識別的項目,其中花了3天在標註數據上。針對像我這類公司,老闆才不管你用什麼框架,只要又快又好地給我出成果就行。當然如果整個公司都已經全面使用tensorflow,那你就得學了,而且有位前輩說得好,「不要把自己定位成什麼tensorflow開發者、安卓開發者,語言框架只是工具,並不能成為你不願學習的借口。」如果公司要求你會某種語言框架,你說不會就不幹了,那不好意思,你還沒準備好去工作,真正有經驗的工作者都是想辦法去解決問題的,既然不會,就讓老闆看見你的決心和能力去學習、去融入你的工作。當然找工作是一個相互的過程,如果你的技能不匹配這家公司的需求,那就換一家有啥大不了的,強求不來。

互勉。


額,稍微唱個反調吧。其實你要是把from keras import 改成from tf.keras import 就能消除大部分偏見了。

keras 其實很靈活,一個複雜的層(對,沒錯,就是層!)其實可以用Model定義,有時候要提取高級視覺特徵,一個x = resnet50(x)就搞定了。

原來官方推崇slim,結果現在slim 命名向keras.layer靠攏....

還有,其實keras 是可以支持tf.data作為input 的,複雜的輸入變換可以在dataset的map函數中集成。

關於inference,只了解線上模型。keras 訓練完後其實可以從backend中取出sess保存成pb文件的。放到tensorflow serving 中後快慢其實是取決於tf和你的gpu的。。。

對了,最近keras官方支持多gpu數據並行了


速度不行,而且封裝之後不靈活


不明白為什麼那麼多人說keras缺乏靈活性,keras本身也是開源的,要實現什麼功能完全可以繼承Layer然後使用tensorflow的API來實現想要的運算。

換句話說,你可以在享受keras方便性的同時,完全不影響你發揮底層api的強大功能。


謝室友邀。

作為一個初學者也來談一談這兩個工具吧。

如果說構建深度學習的網路模型就像是搭房子,那麼tensorflow提供的就是造房子所需要的完整一磚一瓦還有支撐房子的鋼筋混凝土等等。而Keras則讓模型設計者從宏觀上制定網路結構,比如說我要一個大的方的客廳,裡面有沙發電視機,客廳旁邊是小的餐廳,諸如此類。

Keras的實現,也是依賴於tensorflow或者theano等工具的。至於哪個好,我覺得要看場景。如果旨在建模一個神經網路系統並解決實際問題,keras無疑是高效的選擇,而如果旨在搭出最新潮的、或者最結實的房子,大概還需要自己tensorflow一步一步來呢~


其實任何一個框架深入進去都沒有什麼易用不易用的問題,還是要各種角度多了解。個人理解tensorflow仿的theano,keras設計時像torch靠攏。猶記得當時入門theano,想寫一個最簡單的lenet5,那個費勁,看了很久不得要領。但是keras這方面確實很有優勢,入門很快。如果keras要深入,那確實需要backend的知識了,不過絕大部分功能都封裝了。你要自己修改一個網路,也不是多費勁的事。其實就跟計算機語言的發展一樣,最開始彙編,後來c,後來各種面向對象,動態語言。絕大部分人用高級語言就ok,用彙編確實能加深理解,不過不符合技術發展的趨勢。另外我覺得,tensorflow你得從底層學,所以學明白了,對原理性的東西理解更好,而keras是自頂向下的,所以對原理理解上是偏差的。不過那種東西工程上理解個大概就行,只要你不熱衷於刨根究底就成。另外工業界keras+tensorflow是必然趨勢,而且tf2.4已經tf.keras了。畢竟都是谷大哥家的,做生態。

光了解一點就批評不太好~以上個人理解


封的挺好的,但同時封的比較死。。。

所以我選擇tensorlayer蛤蛤


用tensorflow做keras的後台,我覺得速度沒有太大差別,其實tensorflow的slim模塊和keras也差不多。


靈活性太差,開發原型的話很受限


keras用了一年多了。如果用它實現一些常見的模型倒挺方便的,新手可以快速上手,但要碼一個自己設計的模型就很痛苦了。你必須熟悉它的layer定義,並借鑒keras中一些相似模型的寫法才能寫出自己的模型。相對tf這些框架,keras必須繞一大圈才能寫出自定義的模型,對新手進一步學習深度學習不太方便。


哎呀我的天啊,輸出一個tensor,想split一下都不行

速度還比TF慢了3倍有餘……

誰用誰知道


推薦閱讀:

人工智慧是會導致大量失業,還是會創造更多就業機會?
人工智慧有哪些誤區?
如何評價人工智慧撰寫的同人小說《哈利·波特與看起來像一大坨灰燼的肖像》?
如何評價 Elon Musk 啟動的 OpenAI 項目?
中文房間思想實驗是什麼?它是否成功地否決了圖靈測試的有效性?

TAG:人工智慧 | 計算機專業 | 深度學習DeepLearning | TensorFlow | Keras |