關於 Keras 3

關於 Keras 3

Keras 是一個以 Python 編寫的深度學習 API,能夠在 JAXTensorFlowPyTorch 之上運行。

Keras 具有以下特點:

  • 簡單 – 但絕非過於簡化。Keras 降低了開發者的認知負擔,讓您可以專注於問題中真正重要的部分。
  • 彈性 – Keras 採用漸進式揭露複雜性的原則:簡單的工作流程應該快速且容易,而任意進階的工作流程應該透過清晰的途徑實現,這個途徑建立在您已經學到的知識之上。
  • 強大 – Keras 提供產業級的效能和可擴展性:它被包括 NASA、YouTube 或 Waymo 在內的組織使用。

Keras 3 是一個多框架深度學習 API

作為一個多框架 API,Keras 可用於開發與任何框架(JAX、TensorFlow 或 PyTorch)相容的模組化組件。

這種方法有幾個關鍵優勢:

  • 永遠為您的模型取得最佳效能。在我們的基準測試中,我們發現 JAX 通常在 GPU、TPU 和 CPU 上提供最佳的訓練和推論效能 – 但結果因模型而異,因為非 XLA 的 TensorFlow 有時在 GPU 上速度更快。能夠動態選擇為您的模型提供最佳效能的後端,而無需更改程式碼,這意味著您始終能以可實現的最高效率進行訓練和服務。
  • 最大化您的模型可用的生態系統範圍。任何 Keras 模型都可以實例化為 PyTorch Module、可以匯出為 TensorFlow SavedModel,或可以實例化為無狀態的 JAX 函數。這意味著您可以將您的 Keras 模型與 PyTorch 生態系統套件、全系列的 TensorFlow 部署和生產工具以及 JAX 大規模 TPU 訓練基礎設施一起使用。使用 Keras API 編寫一個 model.py,即可存取機器學習領域所提供的一切。
  • 最大化您的開源模型發佈的散佈範圍。想要發佈預訓練模型嗎?希望盡可能多的人能夠使用它嗎?如果您以純 TensorFlow 或 PyTorch 實作它,它將大約被一半的市場使用。如果您以 Keras 實作它,無論他們選擇哪個框架(即使他們不是 Keras 用戶),任何人都可以立即使用它。在沒有增加開發成本的情況下,影響力加倍。
  • 使用來自任何來源的資料管道。無論您使用哪個後端,Keras fit()/evaluate()/predict() 例程都與 tf.data.Dataset 物件、PyTorch DataLoader 物件、NumPy 陣列、Pandas 資料框相容。您可以在 PyTorch DataLoader 上訓練 Keras + TensorFlow 模型,或在 tf.data.Dataset 上訓練 Keras + PyTorch 模型。

初次接觸 Keras

Keras 的核心資料結構是模型。最簡單的模型類型是 Sequential 模型,它是層的線性堆疊。對於更複雜的架構,您應該使用 Keras 函數式 API,它允許建構任意的層圖,或者 透過子類別化從頭開始編寫模型

這是 Sequential 模型

import keras

model = keras.Sequential()

堆疊層就像 .add() 一樣容易

from keras import layers

model.add(layers.Dense(units=64, activation='relu'))
model.add(layers.Dense(units=10, activation='softmax'))

一旦您的模型看起來不錯,請使用 .compile() 設定其學習過程

model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

如果需要,您可以進一步配置您的最佳化器。Keras 的理念是保持簡單的事物簡單,同時允許使用者在需要時完全掌控(最終的控制是透過子類別化輕鬆擴展原始程式碼)。

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.SGD(learning_rate=0.01, momentum=0.9, nesterov=True))

您現在可以分批迭代您的訓練資料

# x_train and y_train are Numpy arrays
model.fit(x_train, y_train, epochs=5, batch_size=32)

一行程式碼評估您的測試損失和指標

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

或生成新資料的預測

classes = model.predict(x_test, batch_size=128)

您剛剛看到的是使用 Keras 的最基本方式。

然而,Keras 也是一個高度彈性的框架,適用於迭代最先進的研究想法。Keras 遵循漸進式揭露複雜性的原則:它使入門變得容易,但它也使處理任意進階的使用案例成為可能,每次只需增量學習即可。

就像您可以在上面幾行程式碼中訓練和評估簡單的神經網路一樣,您可以使用 Keras 快速開發新的訓練程序或最先進的模型架構。

這是自訂 Keras 層的範例 – 它可以在 JAX、TensorFlow 或 PyTorch 的底層工作流程中互換使用

import keras
from keras import ops

class TokenAndPositionEmbedding(keras.Layer):
    def __init__(self, max_length, vocab_size, embed_dim):
        super().__init__()
        self.token_embed = self.add_weight(
            shape=(vocab_size, embed_dim),
            initializer="random_uniform",
            trainable=True,
        )
        self.position_embed = self.add_weight(
            shape=(max_length, embed_dim),
            initializer="random_uniform",
            trainable=True,
        )

    def call(self, token_ids):
        # Embed positions
        length = token_ids.shape[-1]
        positions = ops.arange(0, length, dtype="int32")
        positions_vectors = ops.take(self.position_embed, positions, axis=0)
        # Embed tokens
        token_ids = ops.cast(token_ids, dtype="int32")
        token_vectors = ops.take(self.token_embed, token_ids, axis=0)
        # Sum both
        embed = token_vectors + positions_vectors
        # Normalize embeddings
        power_sum = ops.sum(ops.square(embed), axis=-1, keepdims=True)
        return embed / ops.sqrt(ops.maximum(power_sum, 1e-7))

有關 Keras 的更深入教學,您可以查看


支援

您可以在 Keras Google 群組上提問並加入開發討論。

您也可以在 GitHub issues 中張貼錯誤報告和功能請求(僅限)。請務必先閱讀我們的指南


為什麼取這個名字,Keras?

Keras (κέρας) 在古希臘語中是的意思。它參考了古希臘和拉丁文學中的文學意象,最早出現在《奧德賽》中,夢靈 (Oneiroi,單數形式為 Oneiros) 分為兩類,一類是透過象牙之門來到地球,用虛假的景象欺騙做夢者,另一類是透過角之門來到地球,宣佈將要實現的未來。這是 κέρας(角)/ κραίνω(實現)和 ἐλέφας(象牙)/ ἐλεφαίρομαι(欺騙)的文字遊戲。

Keras 最初是作為 ONEIROS(開放式神經電子智慧機器人作業系統)專案的研究工作的一部分而開發的。

「夢靈超出了我們的理解範圍 - 誰能確定他們講述的故事是什麼?並非所有人們期待的事都會發生。有兩扇門可以讓轉瞬即逝的夢靈通過;一扇是用角製成的,一扇是用象牙製成的。透過鋸開的象牙的夢靈是虛假的,帶來的訊息不會實現;那些透過磨光的角出來的夢靈背後有真相,為那些看到它們的人實現。荷馬,《奧德賽》19. 562 ff (Shewring 翻譯)。