Keras 是一個以 Python 編寫的深度學習 API,能夠在 JAX、TensorFlow 或 PyTorch 之上運行。
Keras 具有以下特點:
作為一個多框架 API,Keras 可用於開發與任何框架(JAX、TensorFlow 或 PyTorch)相容的模組化組件。
這種方法有幾個關鍵優勢:
Module
、可以匯出為 TensorFlow SavedModel
,或可以實例化為無狀態的 JAX 函數。這意味著您可以將您的 Keras 模型與 PyTorch 生態系統套件、全系列的 TensorFlow 部署和生產工具以及 JAX 大規模 TPU 訓練基礎設施一起使用。使用 Keras API 編寫一個 model.py
,即可存取機器學習領域所提供的一切。fit()
/evaluate()
/predict()
例程都與 tf.data.Dataset
物件、PyTorch DataLoader
物件、NumPy 陣列、Pandas 資料框相容。您可以在 PyTorch DataLoader
上訓練 Keras + TensorFlow 模型,或在 tf.data.Dataset
上訓練 Keras + PyTorch 模型。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 (κέρας) 在古希臘語中是角的意思。它參考了古希臘和拉丁文學中的文學意象,最早出現在《奧德賽》中,夢靈 (Oneiroi,單數形式為 Oneiros) 分為兩類,一類是透過象牙之門來到地球,用虛假的景象欺騙做夢者,另一類是透過角之門來到地球,宣佈將要實現的未來。這是 κέρας(角)/ κραίνω(實現)和 ἐλέφας(象牙)/ ἐλεφαίρομαι(欺騙)的文字遊戲。
Keras 最初是作為 ONEIROS(開放式神經電子智慧機器人作業系統)專案的研究工作的一部分而開發的。
「夢靈超出了我們的理解範圍 - 誰能確定他們講述的故事是什麼?並非所有人們期待的事都會發生。有兩扇門可以讓轉瞬即逝的夢靈通過;一扇是用角製成的,一扇是用象牙製成的。透過鋸開的象牙的夢靈是虛假的,帶來的訊息不會實現;那些透過磨光的角出來的夢靈背後有真相,為那些看到它們的人實現。」荷馬,《奧德賽》19. 562 ff (Shewring 翻譯)。