统一使用Keras:TensorFlow中高阶API的指导建议

作者:API传播员 · 2025-11-20 · 阅读时间:5分钟

TensorFlow 正在为 2.0 版本的发布做准备。在本文中,我们将预览 TensorFlow 高级 API 的发展方向,并解答一些常见问题。


为什么选择 Keras 作为 TensorFlow 的高级 API?

Keras 是一种广受欢迎的高级神经网络 API,用于构建和训练深度学习模型。它适用于快速原型开发、前沿研究以及生产环境。尽管 TensorFlow 当前已经支持 Keras,但我们正在将其更紧密地集成到 TensorFlow 平台中。

通过将 Keras 作为 TensorFlow 的高级 API,我们希望降低新手开发者的学习门槛,同时为研究人员提供先进的功能。一个统一的高级 API 能够减少混淆,使开发者更专注于核心任务。


Keras 的关键优势

Keras 提供了以下几个显著的优势:

  • 用户友好:Keras 提供了简单且一致的接口,优化了常见用例。它能够为用户错误提供清晰的反馈,并附带易于理解的错误信息和建议。
  • 模块化和可组合:Keras 模型通过将可配置的构建块组合在一起构建,几乎没有限制。其组件可以单独使用,例如层或优化器,而无需依赖完整的 Keras 模型。
  • 易于扩展:开发者可以编写自定义构建块,例如新层、损失函数等,以实现前沿研究。
  • 适合初学者和专家:无论是刚接触深度学习的初学者,还是经验丰富的专家,Keras 都能提供相应的 API 满足需求。

通过这些特性,Keras 能够简化从学习机器学习到研究、应用开发再到部署的整个工作流程。


常见问题解答

Keras 是一个独立的库吗?

这是一个常见的误解。Keras 是一个 API 标准,用于定义和训练机器学习模型。它与具体的实现无关,目前已有 TensorFlow、MXNet、JavaScript 等多个实现。

TensorFlow 内置的 Keras 与 Keras.io 上的版本有何不同?

TensorFlow 内置的 Keras 提供了以下额外功能:

  • tf.data:支持构建高性能输入管道,提升数据处理效率。
  • 分布式策略:支持在多 GPU 或 TPU 上分布式训练。
  • 模型导出:支持将模型保存为 TensorFlow SavedModel 格式,便于通过 TensorFlow Serving 或其他语言绑定进行部署。
  • 移动和嵌入式部署:支持通过 TensorFlow Lite 部署到移动设备,或使用 TensorFlow.js 在浏览器中运行。
  • 特征列:用于高效表示和分类结构化数据。

如何安装 tf.keras?

tf.keras 已包含在 TensorFlow 中,无需单独安装。例如,在 Colab 中运行以下命令即可:

!pip install tensorflow

然后在代码中导入:

import tensorflow as tf
from tensorflow.keras.layers import Dense

TensorFlow 的三种 API 风格

TensorFlow 提供了多种 API 风格,以满足不同开发者的需求。

顺序 API

顺序 API 是定义模型最简单的方式,适合构建层叠的线性模型。例如:

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu'),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

功能性 API

功能性 API 支持构建复杂的模型拓扑,例如多输入多输出模型或具有共享层的模型。例如:

from tensorflow.keras import Model, Input
from tensorflow.keras.layers import Dense

inputs = Input(shape=(32,))
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
outputs = Dense(10, activation='softmax')(x)

model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

模型子类 API

子类 API 提供了完全的灵活性,适合需要自定义前向传播逻辑的场景。例如:

from tensorflow.keras import Model
from tensorflow.keras.layers import Dense

class MyModel(Model):
    def __init__(self):
        super(MyModel, self).__init__()
        self.dense1 = Dense(32, activation='relu')
        self.dense2 = Dense(10, activation='softmax')

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

model = MyModel()

如果 tf.keras 不满足需求怎么办?

如果 tf.keras 的功能无法满足您的需求,您可以:

  • 单独使用 tf.keras 的组件,例如层、优化器、初始化器等。
  • 使用低级 TensorFlow API 或 Python 自行实现所需功能。

估计器的未来

估计器在 Google 内部和社区中被广泛使用。TensorFlow 2.0 将继续支持估计器 API,同时可能优化其实现。此外,我们计划为预制估计器提供基于 Keras 的实现,以更好地满足生产需求。


总结

TensorFlow 2.0 将继续优化开发者体验,tf.keras 的集成是其中的重要一步。无论您是初学者还是专家,tf.keras 都能为您提供高效的开发工具。我们期待您的反馈和贡献!

原文链接: https://blog.tensorflow.org/2018/12/standardizing-on-keras-guidance.html