文檔亂、調試難…TensorFlow有那麼多缺點,但為何我們依然待它如初戀?
雷鋒網AI科技評論按:作為谷歌AlphaGo背後的強大推動力,於2015年底開源的TensorFlow一經推出便受到極大關注。目前在所有機器學習框架中,如果它宣稱使用普及率第二,沒人敢說自己是第一。
雖說有谷歌的背書,社區好,資源多,但同學們在使用TensorFlow的過程中,常常會一不小心跳進坑裡,嚴重影響體驗。
近日一位同學就在知乎上提了一個問題【TensorFlow有哪些令人難以接受的地方?】,表達了TensorFlow在使用過程中的不便,順便問了大家有沒有什麼更優雅的方法繞過那些坑。短短一個月的時間,該問題的瀏覽量已經達到10萬+,關注者也達上千人。
作為問題的提出者,這位同學也試著拋磚引玉作了回答,他表示提出這個問題的初衷是希望引發大家對TF少一些盲目的推崇,多些理性的思考和進一步的討論。而在全部42個回答中,雷鋒網AI科技評論也總結了一些有意思的現象。
TensorFlow的「吐槽大會」
結合知乎上網友的回答,以及業內相關人士對TensorFlow的評價,AI科技評論整理了TensorFlow目前被「吐槽」頻率比較高的一些問題。
文檔和介面混亂
因為它的API發展太快,經常更新,所以有一些常用的函數方法會不斷挪位置,例如rnn就從之前的nn介面移到contrib介面,寫代碼時需要常常翻閱文檔。底層介面寫起來繁瑣,高層介面不靈活,且封裝混亂。
默認佔用所有GPU的所有內存
在實驗過程中,並不是所有人都有多塊GPU可用。tf在GPU不可用時會自動改在CPU上跑,這樣一方面會導致速度變慢,另一方面,在共用顯卡的情況下,你根本就不知道是在CPU上跑。雖說tf會列印設備信息,但是tf啟動的時候輸出的信息太雜了,沒法每次都仔細看一遍。
使用繁瑣
明明有其他更通用的模塊能用,可事無巨細都要去使用tf的模塊。例如雖然有默認的python庫argparse可以用,但在很多tf示例代碼中使用tf.app.flags。
做流程式控制制非常難以理解
語句中存在條件分支,例如當a>0時執行一步,a
調試困難
TensorFlow作為靜態圖框架,api經常變,列印中間結果必須要藉助Session運行才能生效,或者學習額外的tfdbg工具。而如果是用PyTorch這樣的動態框架的話,就不需要多學一個額外的工具,只需要用正常的Python調試工具如ipdb就可以了。
綜合看來,在使用TF的過程中,確實存在很多不夠人性化的地方。不過,每個工具都不是完美的,雖說TF缺陷很多,但是對框架使用情況的統計數據最能說明問題,正所謂「TF虐我千萬遍,我待TF如初戀」嘛。
TF普及率遙遙領先
下表為各個開源框架在GitHub上的數據統計(數據統計於 2017 年 9月 6 日),可以看到 TensorFlow 在 star 數量、fork 數量、contributor 數量這三個數據上都完勝其他對手。
此外,特斯拉AI負責人Andrej Karpathy2017年初通過分析過去五年arxiv上的論文數據,對比了各種深度學習框架的使用情況,看圖說話:
下圖是從2012年1月到2017年3月各框架的使用隨時間的發展趨勢。
下圖對比了2017年3月在arxiv上提交的論文中提到深度學習框架的情況。
結合上面兩張圖,可以看到,自15年底谷歌開源TensorFlow以來,它的用戶數增長穩定,而且一直處於高速的增長中,到17年3月,已經處於不可撼動的地位。(pytorch於2017年1月才開源,此處不做對比)
AI科技評論也總結了TensorFlow的幾點優勢。
背靠谷歌這座大山,目前TensorFlow的文檔最全,資源最多,很多模型都有tf的源碼實現。而且用戶基數龐大,一旦出問題很容易找到解決方案。
TensorFlow有功能強大的可視化組件TensorBoard,能可視化網路結構和訓練過程,對於觀察複雜的網路結構和監控長時間、大規模的訓練很有幫助。
雖然TensorFlow是靜態圖操作,會給調試帶來困難,但會大大方便部署。除了caffe,目前還沒有其他架構能支持靜態圖操作,但是caffe編程要比TF複雜。
而有意思的是,caffe作者賈揚清也在知乎上為TensorFlow正名。
他提到,TF是目前唯一一個在核心設計層面上支持dynamic control flow的框架,也是極少幾個經歷大規模多應用部署考驗的框架之一。TensorFlow能直面實際應用中的限制條件,部署到真正核心的產品裡面,它支持大規模推薦系統和移動端產品的部署,而這點對於很多框架來說沒法實現。
「TF的確難,但是它給你提供了真正可以產品化的可能性。很多問題只看見一棵樹的時候簡單,看見森林的時候,解決方法就不一樣了。」
細數完優點和缺點,問題來了。對於哪些實在忍受不了TensorFlow缺點的人,在考慮是否應該換個框架了。而對於那些還沒入坑的同學,到底該用哪種框架?
當前主流框架大對比
主流框架的對比一直是個長期被討論的話題,相關的帖子和文章也層出不窮。而在今年三月的斯坦福大學cs231n中,李飛飛、Justin Johnson和 Serena Yeung 也對當前幾種主流框架進行了對比,並給出了建議。
TensorFlow雖然不完美,但是利於部署,有穩定的社群。此外它還擁有很多庫,比如Keras和Sonnet等。
PyTorch很適合用於研究,但是它很新,因此你可能有很多坑要填。
除了TensorFlow,caffe、caffe2也可以用於產品部署。
手機端可以考慮TensorFlow或caffe2。
此外,北大的吳秉哲同學在知乎上也給出了很好的解答,他之前用Pytorch,Tensorflow,Mxnet這三個模型都做過項目,認為應該根據自己的需求選擇模型。
在需要快速驗證一下自己某些想法的時候,我一般會用Pytorch快速實現,而且Pytorch的底層計算的代碼是C寫的,並且和Torch共用一套底層計算代碼,想要閱讀原碼並做定製化修改比較容易上手。
在做一些數據量比較大的long term的訓練的時候,我會用tensorflow,比如它提供的tensorboard的訓練監督,還有自帶的profiling和debug功能比較方便,還有個原因就是它可以很方便的把模型deploy到手機上,現在caffe2出來了,或許可以是一個比較好的替代。
另外選擇框架的時候還得參考一下你所做的項目,比如做person re id大多數的工作都是基於caffe修改的,這個時候需要考慮遷移這些工作到其他框架下時不時會遇到坑。
如果做物體定位,Mxnet已經提供了一些操作的高效實現。
他還強調,「現在框架迭代得也越來越快,mxnet在近期推出gluon的介面,API仿照Pytorch設計。不久之後Tensorflow也會有相應的介面推出。」
總結
很多同學在實驗過程中,總是對框架過多考慮。這個框架的速度怎麼樣?好用程度程度怎麼樣?為什麼文檔這麼亂?為什麼用起來這麼不順手?隨之而來就是一系列的吐槽。而他們往往忽略了最關鍵的東西,框架只是個手段,重要的是你想解決的是什麼問題,以及你解決問題的思路。
此處借用賈揚清一句話,「框架就是個框架,最終要能出活。」
雷鋒網 AI科技評論。雷鋒網。
點擊展開全文
※智能穿戴依舊火爆、家電智能白熱化、教育機器人興起|IFA 2017
※iOS也不安全?高危漏洞威脅近半果粉!
※IBM Watson AI副總裁:IBM Watson是如何為客戶找到AI解決方案的?
※高通沈勁:前沿科技四大領域的發展現狀與趨勢
※一位開發者的離開,網傳WePhone開發者蘇享茂被逼自殺
TAG:雷鋒網 |