QQ在線客服

Keras,亡于谷歌?

2021-04-07 11:04 來源: 站長(zhǎng)資源平臺(tái) 瀏覽(9446)人   

編者按:本文來自微信公眾號(hào)“機(jī)器之心”(ID:almosthuman2014),36氪經(jīng)授權(quán)發(fā)布。

將 Keras 并入 TensorFlow,到底是不是一個(gè)正確的決定?

近日,Reddit 上出現(xiàn)了一個(gè)「悼念」Keras 的帖子,引發(fā)了不少人的圍觀。發(fā)帖者表示,谷歌已經(jīng)慢慢地將 Keras 殺死了。

乍一看,這一觀點(diǎn)似乎有點(diǎn)聳人聽聞:Keras 活得好好的,怎么能說已經(jīng)被谷歌殺死了呢?而且前不久,這個(gè)神經(jīng)網(wǎng)絡(luò)庫剛剛過完 6 歲生日。MIT CSAIL 官方賬號(hào)還發(fā)推表示,Keras 目前已經(jīng)成為全世界使用最多的十大軟件工具之一。

這一切還要從 Keras 和谷歌的恩怨說起。

Keras 與谷歌的 TensorFlow 有一段極其復(fù)雜的歷史,這個(gè)故事很長(zhǎng),有很多細(xì)節(jié),有時(shí)甚至?xí)幸恍┟堋?/p>

Keras 最初是由 Google AI 開發(fā)人員 / 研究人員 Francois Chollet 創(chuàng)建并開發(fā)的,作者于 2015 年 3 月 27 日將 Keras 的第一個(gè)版本 commit 并 release 到他的 GitHub 上。一開始,F(xiàn)rancois 開發(fā) Keras 是為了方便他自己的研究和實(shí)驗(yàn)。但隨著深度學(xué)習(xí)的普及,許多開發(fā)人員、程序員和機(jī)器學(xué)習(xí)從業(yè)人員都因其易于使用的 API 而涌向 Keras。

為了訓(xùn)練你自己的自定義神經(jīng)網(wǎng)絡(luò),Keras 需要一個(gè)后端。后端是一個(gè)計(jì)算引擎——它可以構(gòu)建網(wǎng)絡(luò)的圖和拓?fù)浣Y(jié)構(gòu),運(yùn)行優(yōu)化器,并執(zhí)行具體的數(shù)字運(yùn)算。你可以把后臺(tái)看作是你的數(shù)據(jù)庫,Keras 是你用來訪問數(shù)據(jù)庫的編程語言。

一開始,在 v1.1.0 之前,Keras 的默認(rèn)后端都是 Theano。與此同時(shí),Google 發(fā)布了 TensorFlow,這是一個(gè)用于機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)訓(xùn)練的符號(hào)數(shù)學(xué)庫。Keras 開始支持 TensorFlow 作為后端。漸漸地,TensorFlow 成為最受歡迎的后端,這也就使得 TensorFlow 從 Keras v1.1.0 發(fā)行版開始成為 Keras 的默認(rèn)后端。

一般來說,一旦 TensorFlow 成為了 Keras 的默認(rèn)后端,TensorFlow 和 Keras 的使用量會(huì)一起增長(zhǎng)——沒有 TensorFlow 的情況下就無法使用 Keras,所以如果你在系統(tǒng)上安裝了 Keras,那么你也得安裝 TensorFlow。

同樣的,TensorFlow 用戶也越來越被高級(jí) Keras API 的簡(jiǎn)單易用所吸引。tf.keras 是在 TensorFlow v1.10.0 中引入的,這是將 keras 直接集成到 TensorFlow 包中的第一步。

tf.keras 軟件包與你通過 pip 安裝的 keras 軟件包(即 pip install keras)是分開的。為了確保兼容性,原始的 keras 包沒有被包含在 tensorflow 中,因此它們的開發(fā)都很有序。

然而,這種情況后來發(fā)生了改變改變——當(dāng)谷歌在 2019 年 6 月發(fā)布 TensorFlow 2.0 時(shí),他們宣布 Keras 現(xiàn)在是 TensorFlow 的官方高級(jí) API,用于快速簡(jiǎn)單的模型設(shè)計(jì)和訓(xùn)練。隨著 Keras 2.3.0 的發(fā)布,F(xiàn)rancois 在聲明中寫道:

這是 Keras 首個(gè)與 tf.keras 同步的版本,也是 Keras 支持多個(gè)后端(即 Theano,CNTK 等)的最終版本。最重要的是,所有深度學(xué)習(xí)從業(yè)人員都應(yīng)將其代碼轉(zhuǎn)換成 TensorFlow 2.0 和 tf.keras 軟件包。原始的 keras 軟件包仍會(huì)接收 bug 并修復(fù),但請(qǐng)向前看,你應(yīng)該開始使用 tf.keras 了。

對(duì)于 Keras 和 TensorFlow 來說,二者的合并似乎是一個(gè)雙贏的決定,但很多開發(fā)者不這么認(rèn)為。上述發(fā)帖者就是其中之一。

ta 認(rèn)為,這一決定已經(jīng)慢慢地將 Keras 殺死了。為了解釋這一觀點(diǎn),ta 還給出了三個(gè)理由:

第一個(gè)理由是:在合并期間,Keras API 被有效地「凍結(jié)」了,這使得它在特性方面落后于其他競(jìng)爭(zhēng)者;

第二個(gè)理由是:TF 2 發(fā)布得太晚了。最重要的是,最初的幾個(gè) 2.x 版本漏洞百出,甚至現(xiàn)在也缺乏一些基本的特性;

第三個(gè)理由是:谷歌沒有在 TF 1 和 2 之間進(jìn)行堅(jiān)決的切割,而是將 TF 1 中的很多包和垃圾直接移植到 TF 2,使得框架非常臃腫。當(dāng)某個(gè)地方出問題時(shí),你會(huì)被滿屏冗長(zhǎng)的神秘錯(cuò)誤信息和堆棧追蹤所淹沒。

基于這些體驗(yàn),發(fā)帖者認(rèn)為,Keras 已經(jīng)被谷歌殺死了。

除此之外,之前的一些開發(fā)者也指出了二者合并之后帶來的一些問題。比如 API 混亂。二者合并之后,tf.keras 中的高級(jí) API 與 tf 中的底層 API 經(jīng)常需要混用,這樣的整合會(huì)讓開發(fā)者不知所措。與此同時(shí),API 的割裂也加大了開發(fā)者尋找教程的難度。比如在 TF 2.0 版本中,除了「TF2.0」 這個(gè)關(guān)鍵字,你還要弄清楚:這個(gè)文檔是關(guān)于 TF2.0 本身的,還是關(guān)于 tf.keras 的。

悼念?我用著挺好的啊

雖然 Keras 并入 TensorFlow 造成了一些混亂,但有不少開發(fā)者認(rèn)為,這一舉動(dòng)并沒有毀掉 Keras,反而解決了很多實(shí)際問題。

一位用戶名為「acardosoj」的開發(fā)者認(rèn)為,「Keras API 比以前更容易了。現(xiàn)在你有了更多的函數(shù)可以選擇,可以更加輕松地利用 TensorFlow 分布式訓(xùn)練。你可以用幾行代碼在數(shù)百個(gè) GPU 上訓(xùn)練一個(gè)巨大的模型?!惯@些在 2016 年都是不可能的。

用戶名為「carlthome」的開發(fā)者也認(rèn)為,今天的 Keras 的確增加了很多功能,tf.data、tf.metrics 和 tf.distribute 也因?yàn)?tf.keras 的存在而變得更易用。因此他認(rèn)為,盡管 TensorFlow 的生態(tài)系統(tǒng)還需要改善,我們也不應(yīng)該忽視這些年取得的進(jìn)步。

甚至有位 TF 的用戶表示,從 TF 轉(zhuǎn)向完全集成了 Keras API 的 TF 2 是一個(gè)最好的選擇。

雖然很多人表示,Keras 和 TF 的結(jié)合確實(shí)帶來了一些改進(jìn),但他們也承認(rèn),現(xiàn)在整個(gè)的 TensorFlow 以及它與 Keras 的合并都很混亂。既然如此,谷歌的團(tuán)隊(duì)為什么不多花點(diǎn)工夫梳理一下呢?有些開發(fā)者認(rèn)為,這可能是因?yàn)椋雀璧暮芏嗳硕既ラ_發(fā) Jax 了。

「Tensorflow 從一開始就是一團(tuán)糟,它非常適合作為可微分編程的工具,但在設(shè)計(jì)上有一些問題影響了靈活性。PyTorch 的動(dòng)態(tài)圖計(jì)算做的更好,TF2 想追趕但為時(shí)已晚?!?/p>

實(shí)際上,很多谷歌程序員可能都已經(jīng)轉(zhuǎn)向 Jax 了。Jax 是谷歌開發(fā)的一個(gè) Python 庫,用于機(jī)器學(xué)習(xí)和數(shù)學(xué)計(jì)算,具有正向和反向自動(dòng)微分功能,非常擅長(zhǎng)計(jì)算高階導(dǎo)數(shù)。程序員們還開發(fā)了像 Haiku 這樣的工具,使 Jax 可面向?qū)ο蟆?/p>

與其說 TensorFlow 殺死了 Keras,還不如說 TF2 殺死了 Tensorflow。當(dāng)轉(zhuǎn)向 Jax 的人數(shù)越來越多,Keras 會(huì)隨之銷聲匿跡嗎?

參考鏈接:

https://www.reddit.com/r/MachineLearning/comments/mhrpbm/d_keras_killed_by_google/

【版權(quán)與免責(zé)聲明】如發(fā)現(xiàn)內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息發(fā)郵件至 kefu@2898.com ,我們將及時(shí)溝通與處理。 本站內(nèi)容除了2898站長(zhǎng)資源平臺(tái)( www.afrimangol.com )原創(chuàng)外,其它均為網(wǎng)友轉(zhuǎn)載內(nèi)容,涉及言論、版權(quán)與本站無關(guān)。
投稿

關(guān)注我們

站長(zhǎng)資源平臺(tái)微信公眾號(hào)

微信二維碼