華文網

深度學習庫 Keras 2 重磅發佈,與 TensorFlow 聯繫更緊密

昨天,著名深度學習開源庫 Keras 通過官方博客正式發佈了全新版本:Keras 2。

根據官方介紹,此次更新的重點有兩個:

Keras 2 API 將作為 TensorFlow 框架的一部分直接向用戶提供支援;

Keras 2 API 經過了重新設計,將成為團隊第一個長期支持(long-term-support)的 API。

Keras 表示:從 2015 年 3 月發佈第一個版本以來,有數以百計的開發人員對 Keras 的開原始程式碼做了完善和拓展,數以千計的熱心用戶在社區對 Keras 的發展做出了貢獻。目前,有大量的 AI 初創公司在 Keras 的幫助下掛牌成立,大量的研究人員通過 Keras 有效提升了研發效率,

大公司的工程師們則通過 Keras 大大簡化了他們的工作流程。更為重要的是,通過使用 Keras,更多的從前完全沒有機器學習開發經驗的用戶,從此步入了深度學習的世界。

融入 TensorFlow,成為深度學習的通用語言

在本次版本更新中,最重要的一項內容就是增強了 Keras 與 TensorFlow 的邏輯一致性。按照 Keras 在博客中的說法:“這是將 Keras API 整合到 TensorFlow 核心的一個重要的準備步驟”。

實際上,從 2015 年 12 月的版本開始,

Keras 就已經支持用戶將 TensorFlow 作為運行後端(runtime backend),但此前,Keras 的 API 與 TensorFlow 的代碼庫尚處於相互隔離的狀態。未來,從 TensorFlow 1.2 版本開始,Keras 2 API 將作為 TensorFlow 框架的一部分直接向用戶提供支持,Keras 在博客中表示:“這是 TensorFlow 實現下一個百萬使用者級目標的關鍵”。

Keras 在博客中表示,他們更願意人們將 Keras 視為一種通用的 API 規範,而不僅僅是一個具體的代碼庫。在這個意義上,他們將此前的 Keras 實現歸結為兩個大類:

TensorFlow 的內部實現,也就是前不久在 TensorFlow 1.0 版本中發佈的 tf.keras 模組,

完全基於 TensorFlow 編寫,並且與所有 TensorFlow 功能深度相容;

通用實現,相容多種運行後端,包括 Theano 和 TensorFlow 等(將來可能會支持更多其他的後端)。

類似的,知名 Java 深度學習庫 Deeplearning4j 目前正在基於 Scala 語言實現 Keras 規範的一部分,即 ScalNet;而為了讓 Keras 在流覽器中運行,Keras.js 團隊也在基於 JavaScript 實現一部分 Keras API。這樣的例子還有很多。

這些例子正符合了 Kera 成為一種通用的 API 規範的發展定位。按照 Keras 在博客中的說法:“Keras API 意在成為一個深度學習實踐者的通用語言,

一個跨越多種不同的工作流、獨立於各種底層平臺的深度學習通用語言”。

重新設計,成為第一個長期支持的 API

Keras 2 的另一項重要更新是 API 的變化。Keras 在博客中表示,全新發佈的 Keras 2 API 將成為團隊第一個長期支持的 API,不但相容目前最新的軟體,而且未來將保持長期有效。為了實現這一點,Keras 重新設計了絕大部分 API,為將來的擴展和更新預留了充足的修改空間。

值得一提的是,新設計的 API 完全相容于穀歌 TensorFlow 規範。

此次 API 更新的要點包括:

大部分軟體層的 API 介面都和從前完全不同,特別是 Dense、BatchNormalization 和所有卷積相關的層。但由於軟對設置了相容介面,因此 Keras 1 的代碼不經修改仍然可以在 Keras 2 上運行(但會出現列印警告);

生成器訓練和評估方法相關的 API 也已經改變(包括 fit_generator、predict_generator 和 evaluate_generator 等)。同樣,Keras 1 的代碼仍然可以運行;

在 fit 中,nb_epoch 已經被更名為 epochs。而且,這一更改也適用於 API 轉換介面;

許多圖層的保存權重格式已更改。同樣,以從前的權重保存的檔仍然可以在 Keras 2 中載入;

objectives 模組已經被更名為 losses。

與此前不相容的地方

由於 Keras 2 是一次重大的版本更新,因此無法避免地要引入一些與此前版本不相容的地方,特別是對於高級使用者而言,這些資訊至關重要:

包括 MaxoutDense、TimeDistributedDense 和 Highway 在內的舊版軟體層已經被永久刪除;

許多舊版的指標(metrics)和損失函數(loss functions)被刪除;

BatchNormalization 層不再支持 mode 參數;

由於內核代碼已經改變,因此自訂層必須全部更新。不過由於修改相對不大,因此更新應該不會太耗時,更新詳情參見: https://keras.io/layers/writing-your-own-keras-layers/

所有使用未記錄的(undocumented) Keras 函數的程式碼片段可能都已經不可用;因此高級使用者需要進行一些修改。

目前 Keras 2 已經在 Github 上開源: https://github.com/fchollet/keras

用戶可以通過 PyPI 直接更新: pip install keras --upgrade

TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比

TensorFlow 1.0 正式發佈 你需要知道的都在這裡

許多圖層的保存權重格式已更改。同樣,以從前的權重保存的檔仍然可以在 Keras 2 中載入;

objectives 模組已經被更名為 losses。

與此前不相容的地方

由於 Keras 2 是一次重大的版本更新,因此無法避免地要引入一些與此前版本不相容的地方,特別是對於高級使用者而言,這些資訊至關重要:

包括 MaxoutDense、TimeDistributedDense 和 Highway 在內的舊版軟體層已經被永久刪除;

許多舊版的指標(metrics)和損失函數(loss functions)被刪除;

BatchNormalization 層不再支持 mode 參數;

由於內核代碼已經改變,因此自訂層必須全部更新。不過由於修改相對不大,因此更新應該不會太耗時,更新詳情參見: https://keras.io/layers/writing-your-own-keras-layers/

所有使用未記錄的(undocumented) Keras 函數的程式碼片段可能都已經不可用;因此高級使用者需要進行一些修改。

目前 Keras 2 已經在 Github 上開源: https://github.com/fchollet/keras

用戶可以通過 PyPI 直接更新: pip install keras --upgrade

TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比

TensorFlow 1.0 正式發佈 你需要知道的都在這裡