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 问题中发布错误报告和功能请求(仅限)。请务必先阅读我们的指南。
Keras(κέρας)在古希腊语中意为角。它指的是古希腊和拉丁文学中的一种文学意象,最早出现在《奥德赛》中,梦之精灵(Oneiroi,单数Oneiros)被分为那些用虚幻的景象欺骗梦者的精灵,他们通过象牙门来到地球,以及那些宣布未来将会发生的精灵,他们通过角门来到地球。这是一个关于单词κέρας(角)/ κραίνω(实现)和ἐλέφας(象牙)/ ἐλεφαίρομαι(欺骗)的文字游戏。
Keras 最初是作为 ONEIROS 项目(开放式神经电子智能机器人操作系统)研究工作的一部分开发的。
“梦境超乎我们的理解——谁能确定它们讲述了什么故事?并非所有人类所寻求的东西都会实现。有两个大门可以通往短暂的梦境:一个由角制成,一个由象牙制成。通过锯开的象牙而来的梦境是欺骗性的,传递着不会实现的信息;**那些穿过抛光的角而来的梦境则蕴藏着真理,将实现于那些看到它们的人。**” 荷马,《奥德赛》19.562 ff(谢林译本)。