Keras 是 TensorFlow 平臺的高階 API。它為解決機器學習 (ML) 問題提供了一個平易近人、高效的介面,專注於現代深度學習。Keras 涵蓋了機器學習工作流程的每一步,從資料處理到超引數調優,再到部署。它的開發宗旨是助力快速實驗。
透過 Keras,您可以充分利用 TensorFlow 的可擴充套件性和跨平臺能力。您可以在 TPU Pod 或大型 GPU 叢集上執行 Keras,也可以匯出 Keras 模型以在瀏覽器或移動裝置上執行。此外,您還可以透過 Web API 來部署 Keras 模型。
Keras 旨在透過實現以下目標來降低認知負荷:
- 提供簡單、一致的介面。
- 最大限度地減少常見用例所需的操作步驟。
- 提供清晰、可操作的錯誤訊息。
- 遵循“漸進式複雜度”原則:上手簡單,並且可以透過邊學邊用來完成高階工作流程。
- 幫助您編寫簡潔、易讀的程式碼。
誰應該使用 Keras
簡而言之,所有 TensorFlow 使用者都應預設使用 Keras API。無論您是工程師、研究人員還是機器學習從業者,都應該從 Keras 開始。
有些用例(例如在 TensorFlow 之上構建工具或開發自己的高效能平臺)需要底層的 TensorFlow Core API。但如果您的用例不屬於 Core API 應用場景,則應優先選擇 Keras。
Keras API 元件
Keras 的核心資料結構是層 (layers) 和模型 (models)。層是簡單的輸入/輸出轉換,而模型是層的有向無環圖 (DAG)。
層
tf.keras.layers.Layer 類是 Keras 中的基本抽象。一個 Layer 封裝了狀態(權重)和計算過程(在 tf.keras.layers.Layer.call 方法中定義)。
層建立的權重可以是可訓練的,也可以是不可訓練的。層可以遞迴組合:如果您將一個層例項分配為另一個層的屬性,外層將開始追蹤內層建立的權重。
您還可以使用層來處理歸一化和文字向量化等資料預處理任務。預處理層可以直接包含在模型中,無論是在訓練期間還是訓練之後,這使得模型具有很好的可移植性。
模型
模型是一個將各層組合在一起並可以在資料上進行訓練的物件。
最簡單的模型型別是 Sequential 模型,它是一系列層的線性堆疊。對於更復雜的架構,您可以使用 Keras 函式式 API 構建任意的層圖,或者透過子類化從零開始編寫模型。
tf.keras.Model 類具有內建的訓練和評估方法:
tf.keras.Model.fit:在固定數量的 epoch 內訓練模型。tf.keras.Model.predict:為輸入樣本生成預測輸出。tf.keras.Model.evaluate:返回模型的損失值和指標值;透過tf.keras.Model.compile方法配置。
這些方法使您能夠使用以下內建訓練功能:
- 回撥 (Callbacks)。您可以利用內建回撥進行提前停止 (early stopping)、模型檢查點儲存和 TensorBoard 監控。您也可以實現自定義回撥。
- 分散式訓練。您可以輕鬆地將訓練擴充套件到多個 GPU、TPU 或裝置上。
- 步驟融合 (Step fusing)。透過
tf.keras.Model.compile中的steps_per_execution引數,您可以在單個tf.function呼叫中處理多個批次,這極大地提高了 TPU 上的裝置利用率。
有關如何使用 fit 的詳細概述,請參閱訓練和評估指南。要了解如何自定義內建的訓練和評估迴圈,請參閱自定義 fit() 中的執行邏輯。
其他 API 和工具
Keras 提供了許多其他用於深度學習的 API 和工具,包括:
如需獲取完整 API 列表,請參閱 Keras API 參考手冊。要了解有關其他 Keras 專案和倡議的更多資訊,請參閱 Keras 生態系統。
後續步驟
要開始使用 Keras 和 TensorFlow,請檢視以下主題:
- Sequential 模型
- 函式式 API
- 使用內建方法進行訓練與評估
- 透過子類化建立新的層和模型
- 序列化與儲存
- 使用預處理層
- 自定義 fit() 中的行為
- 從零開始編寫訓練迴圈
- 使用 RNN
- 理解掩碼 (masking) 與填充 (padding)
- 編寫自定義回撥函式
- 遷移學習與微調
- 多 GPU 和分散式訓練
要了解有關 Keras 的更多資訊,請參閱 keras.io 上的以下主題: