講道理,我覺得TensorFlow太遜了
原作:Nico Jimenez
安妮 編譯自 Nico』s Blog
量子位 出品 | 公眾號 QbitAI
本文作者Nico Jimenez。自2015年從斯坦福輟學後,他創造了圖像處理API Mathpix,每月為全球數百萬用戶處理近2000萬張圖像。此外,他還創造了Mathpix內部機器學習監測和分析方案Losswise。目前,Losswise公開可用。
這篇文章譯自Nico的博客,原文標題為《Tensorflow sucks》。在這篇文章中,作者詳細論述了「為什麼我覺得TensorFlow很遜」這個有趣問題。
本文為作者觀點,不代表量子位立場。
Nico Jimenez
每隔幾個月,我都會在谷歌上搜索關鍵詞「TensorFlow太遜了」或者「f*TensorFlow」,希望能找到觀點一致的夥伴。這可沒那麼幸運,雖然TensorFlow已經開源兩年了,但始終沒有找到讓我滿意的怒懟。
這就有點不太科學了。從本質上看,讚揚TensorFlow的力量可被分為幾波,但都可以被歸因為「谷歌深深的嫉妒」現象。這個現象由世界各地的工程師們假設得出:
谷歌員工可能比你更聰明,能力更高
TensorFlow用的6更容易在谷歌找到深度學習相關工作!
平凡無奇的創業公司用了TonsorFlow並在博客上讚美它,可能更容易被谷歌收購
如果你沒用TensorFlow得到你想要的直觀設計,那就是你自己的問題了
現在,我們將這些假設拋掉,客觀地評判一下TensorFlow。
結束噩夢?
TensorFlow出現時,我們一度認為它能結束爛設計和深度學習框架的噩夢。但我們實際得到的,是一個和Java差不多的深度學習框架,它比Java少了一些趣味性,並且是純聲明性的開發方式。但這款產品的反饋出奇地好,看起來像谷歌做了一個滿足所有人的框架,到底哪裡不對?
對研究人員來說,TensorFlow有些難學和難用。靈活性在研究中至關重要,但在TensorFlow中缺乏靈活性是個深層次的問題。
舉個例子,想從神經網路的中間層中提取相應值?首先,你需要定義一個函數圖像,之後將其作為dictionary執行,當然不要忘記將中間層作為圖像的輸出,否則你無法檢索到它們的值。
想要有條件地執行卷積層?比如當生成一個EOS token時,RNN會停止運行。在你完成這個任務的時候,其他人已經用Pytorch創立第3個AI公司了。
對於像我這樣的機器學習實踐者來說,TensorFlow也不是一個很好的選擇,框架的聲明性特性使調試更加困難。能在Android和iOS上運行模型看起來很棒,直到你發現這個框架的二進位文件至少20MB,C++文檔幾乎不存在,資源少時原本很管用的條件網路也無法執行。
與其他框架的對比
無法否認TensorFlow的開發人員一定是個天才,但目前TensorFlow的原作者中可能最出名的一個:賈揚清,已經離開谷歌加入Facebook了,並且加速開發了Caffe2框架。和TensorFlow不一樣,Caffe2允許用戶在一行代碼中執行一層數據,這一點讓人興奮。
此外,Pytorch在頂尖AI研究者中迅速普及。儘管Torch用戶因編寫Lua代碼執行簡單字元串受挫,但他們並沒有使用TensorFlow,轉而使用了Pytorch。看來,對於頂級人工智慧實驗室來說,TensorFlow是不夠的。
對我來說,最有趣的問題是為什麼純聲明式開發方式有明顯缺陷,谷歌還是要選擇它。他們是否認為將所有計算都封裝在一個計算圖中,可以簡化TPU的執行模型,這樣他們就能從雲端深度學習應用程序中節省數百萬美元的英偉達晶元費用?很難說。
總的來說,TensorFlow並不像一個純粹的開源項目。如果他們的設計合理,我將不會有任何問題。與谷歌開源的其他項目(如Protobuf、Golang和Kubernetes)相比,TensorFlow的使用人群並不活躍。
雖然聲明式開發方式對於UI編程很有益,但對於深度學習來說,做出這個選擇的原因有很多。
以標準的互動式Web應用程序React Javascript庫為例,在React中,數據流通過應用程序的複雜性有助於隱藏開發人員,因為Javascript的執行順序通常比更新DOM快得多。React開發人員不想擔心傳播狀態,只要最終用戶體驗足夠好就可以了。
另一方面,在深度學習中,單層網路可以執行數十億的FLOP!深度學習研究人員非常關心計算機制,並希望進行精細地控制,因為它們不斷地推動可能的邊緣(例如動態網路),並希望輕鬆訪問中間結果。
具體示例
不如看一個簡單的例子,訓練一個模型,將其輸入乘以3。
首先,讓我們看一下TensorFlow的示例:
再來看看在Pytorch上如何執行同樣的任務:
儘管Pytorch的例子中只有幾行代碼,但執行結果卻更精確,並且訓練循環中的語法更遵循實際的學習進程:
前向輸入
產生的損失
計算梯度
反向傳播
而在TensorFlow中,核心操作是sess.run訪問。
所以,我們為什麼要編寫更多行、更難於理解和維護的代碼呢?Pytorch的界面比TensorFlow的界面要好得多。
結論
對於快速開發原型來說,TensorFlow太低層了。在但在前沿研究或資源受限的生產環境中使用又看起來層次又太高。
事實上,當你有大約6個開源的高級庫建立在級別已經很高的庫上,如果想使你的庫可用,有些地方就會出問題:
http://tflearn.org/
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim
https://github.com/fchollet/keras
https://github.com/fchollet/keras
https://github.com/tensorflow/skflow
最後,我承認TensorBoard(Tensorflow的監測工具)是個不錯的選擇。如果你想要一個漂亮的監測解決方案,你的機器學習項目包含高級的模型比較功能,可以到Losswise上看看(https://losswise.com)。這是我自己開發的,開發人員可以從使用的機器學習庫中跟蹤模型性能,這是TensorBoard不提供的。
—完—
加入社群
量子位AI社群9群開始招募啦,歡迎對AI感興趣的同學,加小助手微信qbitbot3入群;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進群請加小助手微信號qbitbot3,並務必備註相應群的關鍵詞~通過審核後我們將邀請進群。(專業群審核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。
量子位QbitAI
? ? ? 追蹤AI技術和產品新動態
※一個基於區塊鏈的AI平台即將ICO:這可以說是今年最潮的項目了
※陳天奇團隊發布NNVM編譯器,性能優於MXNet,李沐撰文介紹
※DeepMind成立了一個新的秘密小組,還是研究AI與道德
※一文看盡Google新品發布會:手機、音箱、筆記本,硬體全面AI化
※Waymo冰火兩重天:無人計程車最快今秋推出,高管團隊嫌隙嚴重
TAG:量子位 |