Keras正式從TensorFlow分離:結(jié)束API混亂與耗時編譯
對于深度學(xué)習(xí)領(lǐng)域的從業(yè)者而言,Keras 肯定不陌生,它是深度學(xué)習(xí)的主流框架之一。2015 年 3 月 27 日,谷歌軟件工程師、Keras 之父 Francois Chollet 在其 GitHub 上提交并公布了 Keras 的首個版本。作為使用純 Python 編寫的深度學(xué)習(xí)框架,Keras 的代碼更加簡單方便,適用于初學(xué)者。此外,Keras 具有很強的易擴展性,能夠直觀地定義神經(jīng)網(wǎng)絡(luò),函數(shù)式 API 的使用令用戶可以將層定義為函數(shù)。
Keras 官網(wǎng)地址:https://keras.io/
為了訓(xùn)練自定義神經(jīng)網(wǎng)絡(luò),Keras 需要一個后端,在 v1.1.0 版本之前,Keras 的默認(rèn)后端都是 Theano。2015 年 11 月 9 日,谷歌發(fā)布了 TensorFlow。Keras 開始支持 TensorFlow 作為后端。漸漸地,TensorFlow 成為最受歡迎的后端,并從 Keras v1.1.0 發(fā)行版開始成為它的默認(rèn)后端。tf.keras 正是在 TensorFlow v1.10.0 中引入的,這是將 Keras 直接集成到 TensorFlow 包中的第一步。
當(dāng)谷歌在 2019 年 6 月發(fā)布 TensorFlow 2.0 時,他們宣布 Keras 成為 TensorFlow 的官方高級 API。并且,在 Keras 2.3.0 版本發(fā)布時,F(xiàn)rancois 表示這是 Keras 首個與 tf.keras 同步的版本,也是 Keras 支持 Theano 等多個后端的最終版本。所有深度學(xué)習(xí)從業(yè)者都應(yīng)將其代碼轉(zhuǎn)換成 TensorFlow 2.0 和 tf.keras 軟件包。這意味著二者的合并,但看似雙贏的決定,很多開發(fā)者卻不買賬。API 的混亂與割裂不僅令開發(fā)者不知所措,也加大了開發(fā)者尋找教程的難度。
是時候做出改變了!近日,Keras 之父 Francois Chollet 在其推特宣布一項重要決定:他們已經(jīng)將 Keras 的代碼從 TensorFlow 代碼庫中分離出來,移回到了自己的 repo。

對于 Keras 從 TensorFlow 分離后有哪些好處?Francois 表示:「這將提升開源貢獻者的開發(fā)體驗。對于用戶而言,這將使他們可以在本地運行測試,不再需要編譯 TF 來測試 Keras 了,并且還將改善 CI 時間?!?/p>
Keras 正式從 TensorFlow 代碼庫中分離
此次 Keras 分離過程的負(fù)責(zé)人是谷歌高級軟件工程師 Scott Zhu,他代表 Keras 團隊向所有 Keras 用戶發(fā)表了公開聲明,解釋了 Keras 從 TensorFlow 代碼庫中分離出來的緣由以及分離后為用戶帶來的諸多便利之處。
開發(fā)團隊花費了很多精力使 TensorFlow 更加模塊化,并優(yōu)化了 Keras 和 TensorFlow 之間的依賴關(guān)系。最終 Keras 從 TensorFlow 代碼庫中分離出來,并擁有了自己獨立的代碼庫。這使 Keras 能夠使用 Tensorflow Python API 作為 PIP 包依賴項,且無需在構(gòu)建和測試時編譯 TensorFlow。因此現(xiàn)在在本地運行 Keras Bazel 測試只需要幾分鐘,而不是幾小時。
變更之后,當(dāng)前 TensorFlow 代碼庫中的 Keras 部分將很快被刪除。這意味著:
1. Keras 開源代碼庫的訪問地址將發(fā)生變更;
原地址:
https://github.com/tensorflow/tensorflow
新地址:
https://github.com/keras-team/keras

2. 用于代碼庫管理的 git 工具。
3. 任何在先前代碼庫中未解決的 Keras 相關(guān)活躍問題將在現(xiàn)有的 ticket 線程中處理,并將通過提交到新代碼庫進行修復(fù);
4. 與原代碼庫相關(guān)的陳舊問題將被關(guān)閉。如果你認(rèn)為仍然是有價值的問題,請隨時在新代碼庫中重新打開該問題;
5. 新 Keras 代碼庫在此次變更前未完成的任何 PR/issue 都被認(rèn)為是陳舊的,將被關(guān)閉。
用戶想要提交貢獻,如何做?
用戶在提交自己的代碼以供審查并獲得批準(zhǔn)時,必須簽署谷歌個人貢獻者許可協(xié)議(CLA),這樣才可以將代碼放入 Keras 代碼庫中。此外,在提交更多的貢獻時,用戶也應(yīng)首先通過問題跟蹤器(issue tracker)與 Keras 聯(lián)系溝通。
包括項目成員在內(nèi)所有用戶的提交都必須接受審查。為此,Keras 使用 GitHub 拉取請求(pull request, PR),并建議用戶在創(chuàng)建 PR 之前閱讀相關(guān)指南。
完成本地更改并通過測試驗證后,用戶可以在 keras-team/keras 項目中打開并發(fā)送 PR,之后會經(jīng)過一系列的測試來驗證它的正確性。一旦 PR 被審查者測試和批準(zhǔn),PR 將被鏡像到谷歌內(nèi)部存儲庫。一旦合并到 Google 內(nèi)部存儲庫成功完成,PR 還將被標(biāo)記為已合并(merged)。這與 Tensorflow OSS 的貢獻流程相同,相關(guān)示例如下圖所示:

在做任何更改之前,Keras 團隊建議用于打開 issue,并在上面討論。Keras 也會給予反饋并對用戶提出的更改進行驗證。如果更改很小,如文檔修復(fù)中簡單的 bug 修復(fù),則只需打開 PR 無需討論。
與個人用戶不同,企業(yè)用戶提交的貢獻需要遵守《谷歌軟件授權(quán)與企業(yè)貢獻者許可協(xié)議》。
開發(fā)所需的工具
使用 Keras 開發(fā)所需要的工具主要包括如下:
用于創(chuàng)建和測試 Keras 項目的 Bazel 工具和 Python;
用于代碼庫管理的 git 工具。
設(shè)置和檢查本地工作區(qū)
以蘋果 Mac 電腦(Linux 系統(tǒng)的配置非常相似)為例,使用如下命令設(shè)置并檢查本地工作區(qū)的配置:

下載 Keras 代碼和設(shè)置虛擬環(huán)境
Python 虛擬環(huán)境是創(chuàng)建獨立環(huán)境的強大工具,可以將任何系統(tǒng)級配置的更改隔離開來。因此,Keras 強烈建議避免出現(xiàn)任何意外的依賴或版本問題。
本地運行測試
在本地運行一個測試的代碼如下:
- (venv_dir) scottzhu-macbookpro2:keras scottzhu$ bazel test -c opt keras:backend_test
- WARNING: The following configs were expanded more than once: [v2]. For repeatable flags, repeats are counted twice and may lead to unexpected behavior.
- INFO: Options provided by the client:
- Inherited 'common' options: --isatty=1 --terminal_columns=147
- INFO: Reading rc options for 'test' from /Users/scottzhu/workspace/keras/.bazelrc:
- Inherited 'build' options: --apple_platform_type=macos --define open_source_build=true --define=use_fast_cpp_protos=false --define=tensorflow_enable_mlir_generated_gpu_kernels=0 --define=allow_oversize_protos=true --spawn_strategy=standalone -c opt --announce_rc --define=grpc_no_ares=true --config=short_logs --config=v2
- INFO: Reading rc options for 'test' from /Users/scottzhu/workspace/keras/.bazelrc:
- 'test' options: --define open_source_build=true --define=use_fast_cpp_protos=false --config=v2
- INFO: Found applicable config definition build:short_logs in file /Users/scottzhu/workspace/keras/.bazelrc: --output_filter=DONT_MATCH_ANYTHING
- INFO: Found applicable config definition build:v2 in file /Users/scottzhu/workspace/keras/.bazelrc: --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1
- INFO: Found applicable config definition build:v2 in file /Users/scottzhu/workspace/keras/.bazelrc: --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1
- INFO: Analyzed target //keras:backend_test (0 packages loaded, 0 targets configured).
- INFO: Found 1 test target...
- Target //keras:backend_test up-to-date:
- bazel-bin/keras/backend_test
- INFO: Elapsed time: 45.535s, Critical Path: 45.26s
- INFO: 19 processes: 19 local.
- INFO: Build completed successfully, 20 total actions
- //keras:backend_test PASSED in 45.2s
- Stats over 4 runs: max = 45.2s, min = 40.0s, avg = 41.5s, dev = 2.1s
- INFO: Build completed successfully, 20 total actions
最后為大家推薦一篇 Keras 的中文教程,它由 Keras 團隊軟件工程師金海峰翻譯自官網(wǎng)教程,詳細(xì)介紹了 Keras 和 TensorFlow 的基本用法和核心概念,并通過變分自編碼器(Variational Autoencoder)和超網(wǎng)絡(luò)(Hypernetwork)這兩個完整的例子展示了如何在實踐中使用 Keras。
教程知乎鏈接:
https://zhuanlan.zhihu.com/p/380472423