Keras,亡于谷歌?
將 Keras 并入 TensorFlow,到底是不是一個正確的決定?
近日,Reddit 上出現了一個「悼念」Keras 的帖子,引發(fā)了不少人的圍觀。發(fā)帖者表示,谷歌已經慢慢地將 Keras 殺死了。
乍一看,這一觀點似乎有點聳人聽聞:Keras 活得好好的,怎么能說已經被谷歌殺死了呢?而且前不久,這個神經網絡庫剛剛過完 6 歲生日。MIT CSAIL 官方賬號還發(fā)推表示,Keras 目前已經成為全世界使用最多的十大軟件工具之一。
這一切還要從 Keras 和谷歌的恩怨說起。
Keras 與谷歌的 TensorFlow 有一段極其復雜的歷史,這個故事很長,有很多細節(jié),有時甚至會有一些矛盾。
Keras 最初是由 Google AI 開發(fā)人員 / 研究人員 Francois Chollet 創(chuàng)建并開發(fā)的,作者于 2015 年 3 月 27 日將 Keras 的第一個版本 commit 并 release 到他的 GitHub 上。一開始,Francois 開發(fā) Keras 是為了方便他自己的研究和實驗。但隨著深度學習的普及,許多開發(fā)人員、程序員和機器學習從業(yè)人員都因其易于使用的 API 而涌向 Keras。
為了訓練你自己的自定義神經網絡,Keras 需要一個后端。后端是一個計算引擎——它可以構建網絡的圖和拓撲結構,運行優(yōu)化器,并執(zhí)行具體的數字運算。你可以把后臺看作是你的數據庫,Keras 是你用來訪問數據庫的編程語言。
一開始,在 v1.1.0 之前,Keras 的默認后端都是 Theano。與此同時,Google 發(fā)布了 TensorFlow,這是一個用于機器學習和神經網絡訓練的符號數學庫。Keras 開始支持 TensorFlow 作為后端。漸漸地,TensorFlow 成為最受歡迎的后端,這也就使得 TensorFlow 從 Keras v1.1.0 發(fā)行版開始成為 Keras 的默認后端。
一般來說,一旦 TensorFlow 成為了 Keras 的默認后端,TensorFlow 和 Keras 的使用量會一起增長——沒有 TensorFlow 的情況下就無法使用 Keras,所以如果你在系統(tǒng)上安裝了 Keras,那么你也得安裝 TensorFlow。
同樣的,TensorFlow 用戶也越來越被高級 Keras API 的簡單易用所吸引。tf.keras 是在 TensorFlow v1.10.0 中引入的,這是將 keras 直接集成到 TensorFlow 包中的第一步。
tf.keras 軟件包與你通過 pip 安裝的 keras 軟件包(即 pip install keras)是分開的。為了確保兼容性,原始的 keras 包沒有被包含在 tensorflow 中,因此它們的開發(fā)都很有序。
然而,這種情況后來發(fā)生了改變改變——當谷歌在 2019 年 6 月發(fā)布 TensorFlow 2.0 時,他們宣布 Keras 現在是 TensorFlow 的官方高級 API,用于快速簡單的模型設計和訓練。隨著 Keras 2.3.0 的發(fā)布,Francois 在聲明中寫道:
這是 Keras 首個與 tf.keras 同步的版本,也是 Keras 支持多個后端(即 Theano,CNTK 等)的最終版本。最重要的是,所有深度學習從業(yè)人員都應將其代碼轉換成 TensorFlow 2.0 和 tf.keras 軟件包。原始的 keras 軟件包仍會接收 bug 并修復,但請向前看,你應該開始使用 tf.keras 了。
對于 Keras 和 TensorFlow 來說,二者的合并似乎是一個雙贏的決定,但很多開發(fā)者不這么認為。上述發(fā)帖者就是其中之一。
ta 認為,這一決定已經慢慢地將 Keras 殺死了。為了解釋這一觀點,ta 還給出了三個理由:
第一個理由是:在合并期間,Keras API 被有效地「凍結」了,這使得它在特性方面落后于其他競爭者;
第二個理由是:TF 2 發(fā)布得太晚了。最重要的是,最初的幾個 2.x 版本漏洞百出,甚至現在也缺乏一些基本的特性;
第三個理由是:谷歌沒有在 TF 1 和 2 之間進行堅決的切割,而是將 TF 1 中的很多包和垃圾直接移植到 TF 2,使得框架非常臃腫。當某個地方出問題時,你會被滿屏冗長的神秘錯誤信息和堆棧追蹤所淹沒。
基于這些體驗,發(fā)帖者認為,Keras 已經被谷歌殺死了。
除此之外,之前的一些開發(fā)者也指出了二者合并之后帶來的一些問題。比如 API 混亂。二者合并之后,tf.keras 中的高級 API 與 tf 中的底層 API 經常需要混用,這樣的整合會讓開發(fā)者不知所措。與此同時,API 的割裂也加大了開發(fā)者尋找教程的難度。比如在 TF 2.0 版本中,除了「TF2.0」 這個關鍵字,你還要弄清楚:這個文檔是關于 TF2.0 本身的,還是關于 tf.keras 的。
悼念?我用著挺好的啊
雖然 Keras 并入 TensorFlow 造成了一些混亂,但有不少開發(fā)者認為,這一舉動并沒有毀掉 Keras,反而解決了很多實際問題。
一位用戶名為「acardosoj」的開發(fā)者認為,「Keras API 比以前更容易了。現在你有了更多的函數可以選擇,可以更加輕松地利用 TensorFlow 分布式訓練。你可以用幾行代碼在數百個 GPU 上訓練一個巨大的模型。」這些在 2016 年都是不可能的。
用戶名為「carlthome」的開發(fā)者也認為,今天的 Keras 的確增加了很多功能,tf.data、tf.metrics 和 tf.distribute 也因為 tf.keras 的存在而變得更易用。因此他認為,盡管 TensorFlow 的生態(tài)系統(tǒng)還需要改善,我們也不應該忽視這些年取得的進步。
甚至有位 TF 的用戶表示,從 TF 轉向完全集成了 Keras API 的 TF 2 是一個最好的選擇。
雖然很多人表示,Keras 和 TF 的結合確實帶來了一些改進,但他們也承認,現在整個的 TensorFlow 以及它與 Keras 的合并都很混亂。既然如此,谷歌的團隊為什么不多花點工夫梳理一下呢?有些開發(fā)者認為,這可能是因為,谷歌的很多人都去開發(fā) Jax 了。
「Tensorflow 從一開始就是一團糟,它非常適合作為可微分編程的工具,但在設計上有一些問題影響了靈活性。PyTorch 的動態(tài)圖計算做的更好,TF2 想追趕但為時已晚。」
實際上,很多谷歌程序員可能都已經轉向 Jax 了。Jax 是谷歌開發(fā)的一個 Python 庫,用于機器學習和數學計算,具有正向和反向自動微分功能,非常擅長計算高階導數。程序員們還開發(fā)了像 Haiku 這樣的工具,使 Jax 可面向對象。
與其說 TensorFlow 殺死了 Keras,還不如說 TF2 殺死了 Tensorflow。當轉向 Jax 的人數越來越多,Keras 會隨之銷聲匿跡嗎?
參考鏈接:https://www.reddit.com/r/MachineLearning/comments/mhrpbm/d_keras_killed_by_google/
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。