當前位置:
首頁 > 最新 > 文檔亂、調試難…TensorFlow有那麼多缺點,但為何我們依然待它如初戀?

文檔亂、調試難…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:雷鋒網 |