TensorFlow 2。0 正式版上線兩月有餘,迎來的卻是瘋狂吐槽。網友們評價:「你看看人家 PyTorch!」

機器之心報道,參與:一鳴、張倩。

TensorFlow 被吐槽不好用,也不是一天兩天了。TensorFlow 2。0 的釋出似乎將這種「民怨」推上了高潮。

昨天,一位 reddit 網友說自己正在嘗試從 PyTorch 轉到 TF 2。 0(雖然沒有說為什麼這麼想不開),但他吐槽說:真是「太難了」。

這篇吐槽 TensorFlow 2。0 的帖子,讓深有同感的網友們瘋狂點贊。

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

切換之後,TF 2。0 給他的最大感覺是:這個庫本身沒有什麼問題,真正的問題在於缺乏官方指南、詳細的說明文件以及來自官方開發團隊的答疑。

首先,ta 感覺 TensorFlow 資訊不全:很多在使用者中非常常見的 pipeline 都要自己動手做。而且,無論做什麼似乎都有很多種方法。令人頭疼的是,這些方法都有細微的差別,但官方文件並沒有告訴你有哪些差別,你只能苦哈哈地翻他們的 GitHub issue,找不找得到全憑運氣。

其次,ta 發現,medium 上有很多非正式的 TF 2。0 相關部落格,但這些部落格中包含很多錯誤資訊,還有一些是廣告。

最後,ta 發現網上有很多關於 TF 的提問,但卻沒人回答,有些甚至是一年前提出的。這些問題質量很高,而且都是官方文件裡沒有提及的。相比之下,PyTorch 有一個論壇,在上面問問題可以得到 PyTorch 開發人員的解答,這方面要比 TensorFlow 好太多。

發帖者還對比了一下 TensorFlow 和 PyTorch 積壓的問題,發現

PyTorch 積壓未回答的問題只有 2101 個,但 TensorFlow 卻達到了 24,066 個

。差距之大觸目驚心。

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

所以,作者的總體感覺是,TensorFlow 架構本身問題不大,但給人的使用者體驗是在是太差了。

最後,這位網友不禁發出了靈魂追問:「

如果不提供足夠的資訊讓使用者掌握最佳的使用方式,東西做得再好又有什麼用呢?

所謂一石激起千層浪。這位網友的抱怨引來了大批 TFboys(girls)的共鳴,該貼也成為 TF2。0 的大型吐槽現場。

TF2.0 遭遇瘋狂吐槽

除了贊同發帖者提出的幾個問題外,跟帖的網友還指出了 TensorFlow 2。0 本身存在的一些問題,如與 Keras 的整合。

跟帖網友的主要觀點可以歸納如下:

官方文件不足/官方文件不好找;

很多 Bug 沒有及時修復或更新;

和 Keras 的整合很不好,導致使用者混亂。

2.0 版本的文件和教程有很多不足

#FormatImgID_5##FormatImgID_6#

一位網友寫道:「在過去 TF 的黃金時期,有很多容易上手的教程,官網上的教程質量也很高。但是自從 Keras 被引入後,整個指引文件成了 Keras 和經典 TF 的混合。」這段評論得到了很多人的贊同。一些人表示,TF1。x 版本儘管學習成本很高,但是(教程)是非常連貫的,況且還有 tensor2tensor 這樣的程式碼庫,使得舊版本的使用並不是那麼困難。

官方教程缺失使得社群只好自力更生,很多人不得不去其他渠道尋找相關教程和指南。但是非官方的教程也不一定靠譜。比如下面一位網友就寫到:

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

我的故事:1。 我有個想法,我想要在訓練過程中逐漸改變損失函式的『形狀』;2。 我搜索『tensorflow 在訓練中改變損失函式』;3。 最高搜尋結果是一個 Medium 的文章,我們去看看吧;4。 這個 Medium 文章介紹的是均方誤差(MSE)損失函式,以及你怎樣在 TensorFlow 中用它訓練一個深度神經網路;5。 我只好用腦袋砸鍵盤了。

不僅僅是教程文不對題的問題。正如發帖者所說,非官方的教程也會有很多錯誤,增加了使用者解決問題的成本。久而久之,大家自然都不願意用 TF2。0 了。

此外,跟帖者的反饋也證實了發帖者提出的第三個問題:太多問題和反饋沒有及時處理。

反饋延遲,bug 積壓

可能是因為 TF 社群本身就比較火爆,對框架的提問和反饋會更多,因此 TF 官方對問題的回覆和 bug 的修復似乎比 PyTorch 要慢。正如發帖者所說,TensorFlow 待回答問題數量比 PyTorch 高了 10 倍還要多。更何況,PyTorch 還有一個專門的團隊在平臺上負責解答疑問。

對於一個開源軟體來說,提高其效能、易用性、安全性及減少 bug 的最佳方式是不斷地收集使用者反饋、給予回覆、並根據反饋修復錯誤和問題。但是,如果 TF2。0 沒有及時對這些出現的問題進行處理,則軟體本身不可能繼續進步。

正是因為使用者遇到問題時 TF 官方能夠及時跟進並改進問題,使用者才會繼續留存。有位網友就評論說,他在使用 TF2。0 的過程中遇到了很多問題,但是幸好有官方的開發經理跟進和解決,所以他才願意繼續留在 TF2。0 上繼續使用。

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

除了這兩個問題,很多人還是回到了吐槽 Keras 和 TF 的結合上。

Keras 讓使用變得更困難

#FormatImgID_11##FormatImgID_12#

一些網友認為,TF2。0 還有一個不好用的地方,那就是 Keras 和 TF2。0 的「聯姻」。上圖的這位就表示,eager 模式的確是 TF 版本更新迭代的正確方向(畢竟去掉了 session 這個萬惡之源,支援動態圖),但是引入 Keras 卻讓 API 又變得更混亂了。現在人們有多種構建模型的方法:tf。keras、tf。function 等等。

這些都是 TF2。0 目前遇到的問題,但是距離其第一個版本——alpha 釋出已過去大半年,為什麼還有這麼多問題困擾著開發社群呢?機器之心透過整理過去釋出的資料認為,TF2。0 的設計思路可能有一些問題,導致原本朝著易用性發展的框架又變得難用了。

思路混亂,框架難用

TensorFlow2。0 本身的定位是:減少複雜和冗餘的 API,降低使用者的使用門檻,推動它向研究領域和深度學習普及方向發展。這一思路是正確的,但是在實際的設計階段,為了實現以上目的而採用的解決方法並不正確,最終導致 TF2。0 依然難用。

引入 Keras 可能是個錯誤

Keras 是一個封裝了 TF 等深度學習框架的程式碼庫,具有很好的易用性。TensorFlow 為了解決飽受詬病的上手困難問題而引入了 Keras 的 API。但是從 TensorFlow 的定位和功能來看,和 Keras 的結合在目前來說不夠成功。

如下圖所示,TensorFlow 本身在架構上有著細粒度很高的低階 API,這樣的框架很適合進行各種方面的定製。但是 Keras 則正好和它相反,使用者不知道底層的架構如何搭建,只需要關注整體的設計流程即可。

這兩個框架可以說是兩種極端,而在 TF2。0 裡使用了一種妥協性的相容形式:TF2。0 本身仿照 PyTorch 的方法構建靈活的模型,而不需要這種設計的使用者則使用 tf。keras 高階 API。這樣割裂的 API 使得使用者有些不知所措,也加大了他們在尋找教程的難度,因為他們除了搜尋 TF2。0 的同時還需要搞清楚:這個教程是關於 TF2。0 本身的,還是關於 tf。keras 的。

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

圖源:https://www。pyimagesearch。com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0/

這就有點類似 TF1。x 時代各種各樣的 API 混雜的情況——同一個功能可以由不同的 API 實現。但是,在不同的功能 API 進行組合的時候,某些 API 之間可能不相容。

例如,我使用了 tf。keras,以 model = tf。keras。Sequential 的方式構建了一個網路,它的 training loop 是什麼樣的?我應該使用 model。fit() 嗎?還是 with tf。GradientTape() as Tape ? 如果我想要自定義損失函式中某個標籤的損失,我該在哪裡修改?

多餘的 API 增加了額外的學習成本,自然就讓使用者產生很多新的疑問。而這些疑問和錯誤如果沒有及時解決,就會讓使用者喪失使用這個框架的興趣。

更何況,在分散式訓練、資料並行/模型並行的需求下,框架越複雜,使用者就越難上手。TF2。0 的框架已經非常複雜了。

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

現在的 TF2。0 架構已經非常複雜。圖源:https://www。pyimagesearch。com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0/

大版本更新傷害老使用者

另一個麻煩的問題是,TF 2。0 無疑想讓它成為研究領域和生產領域都非常流行的深度學習框架。因此在版本更新的時候一步大跨越,砍掉了很多 1。x 時代的 API,希望讓追求簡單特性的使用者能夠使用它。

但是別忘了,生產級的程式碼產品很怕的就是——突如其來的、沒有向下相容的版本更新。很多企業一旦部署了某個模型,就會希望它能夠穩定支撐業務執行多年。除非有切實的需要(安全性問題、效能需要極大更新),否則他們是沒有很大動力要更新的。

但是,為了吸引新使用者使用 TF2。0,官方就大手一揮砍掉了很多 API,還不相容舊版本。考慮到重新開發、訓練、部署模型的成本,以及這個過程中對企業業務造成的可能影響,業界對於這種更新興趣缺缺。更不用說,在新版本居然還有致命的 bug 的情況下。

在今年一月,使用者發現TF2。0 的 tf。keras API 中的 dropout 居然失效。雖然是測試版的問題,但是面對這樣不穩定的更新,沒有幾個使用者敢更新使用。

上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch

更不用說版本更新給開源社群帶來的影響,很多開發者需要重新開始學習 2。0。從 1。x 到 2。0 的學習成本,這也是他們覺得 TF2。0 難用的一個原因。

此外,從時間上來看,TensorFlow 的推出要比 PyTorch 早好幾年,但最近卻被 PyTorch 步步緊逼。此前就有人猜測,TF 的團隊可能分了三部分,一路人忙著開發 2。0,一路人忙著改變 eager,還有一部分人著力重構 Keras。這種分散精力的做法可能大大削弱 TensorFlow 在使用者體驗方面的投入,所以造成現在「怨聲載道」的局面。

現在,TensorFlow 和 PyTorch 依然維持著「業界 vs 學界」分庭抗禮的局面。但是隨著 PyTorch 的高歌猛進,這樣的局面可能不久就會變化。

當然,作為目前最流行的深度學習框架之一,總有些人有需要使用 TensorFlow 2。0 的理由。對於這部分讀者,我們向大家推薦一個 GitHub 教程:《TensorFlow 2。0 深度學習開源書》。該專案曾經登上 GitHub 熱榜,目前已有 5500 星。該教程有配套學習的書、程式碼和影片課程,非常適合希望瞭解 tf2。0 的開發者學習參考。

專案連結:

https://

github。com/dragen1860/D

eep-Learning-with-TensorFlow-book

你對於 TF2。0 的看法是什麼樣的呢?歡迎讀者留言交流。

參考連結:

https://www。

reddit。com/r/MachineLea

rning/comments/e4pxqp/d_ive_been_switching_over_from_pytorch_to_tf_20/https://www。reddit。com/r/MachineLearning/comments/ajqmq9/d_tfkeras_dropout_layer_is_broken/