【问题标题】:What's the difference between a Tensorflow Keras Model and Estimator?Tensorflow Keras 模型和估计器有什么区别?
【发布时间】:2022-02-26 07:04:12
【问题描述】:

Tensorflow Keras 模型和 Tensorflow Estimator 都能够训练神经网络模型并使用它们来预测新数据。它们都是位于低级核心 TensorFlow API 之上的高级 API。那么我应该什么时候使用一个而不是另一个呢?

【问题讨论】:

    标签: tensorflow keras tensorflow-estimator


    【解决方案1】:

    背景

    Estimators API 在 1.1 版中被添加到 Tensorflow 中,并为较低级别的 Tensorflow 核心操作提供高级抽象。它与 Estimator 实例一起使用,这是 TensorFlow 对完整模型的高级表示。

    Keras 类似于 Estimators API,因为它抽象了深度学习模型组件,例如层、激活函数和优化器,以使开发人员更容易使用。它是一个模型级库,不处理低级操作,这是张量操作库后端的工作。 Keras 支持三个后端 - TensorflowTheanoCNTK

    直到Release 1.4.0(2017 年 11 月 2 日),Keras 才成为 Tensorflow 的一部分。现在,当您使用 tf.keras(或谈论“Tensorflow Keras”)时,您只是在使用带有 Tensorflow 后端的 Keras 接口来构建和训练您的模型。

    因此,Estimator API 和 Keras API 都在低级核心 Tensorflow API 之上提供了高级 API,您可以使用其中任何一个来训练您的模型。但在大多数情况下,如果您使用的是 Tensorflow,您会希望使用 Estimators API,原因如下。

    分布

    您可以使用 Estimators API 跨多个服务器进行分布式训练,但不能使用 Keras API。

    来自Tensorflow Keras Guide,它说:

    Estimators API 用于为分布式环境训练模型。

    Tensorflow Estimators Guide,它说:

    您可以在本地主机或分布式多服务器环境上运行基于 Estimator 的模型,而无需更改模型。此外,您可以在 CPU、GPU 或 TPU 上运行基于 Estimator 的模型,而无需重新编码您的模型。

    预制估算器

    虽然 Keras 提供了使构建模型更容易的抽象,但您仍然需要编写代码来构建模型。通过 Estimators,Tensorflow 提供了 Pre-made Estimators,这些模型是您可以立即使用的模型,只需插入超参数即可。

    预制估算器与您使用 scikit-learn 的方式类似。例如,Tensorflow 中的 tf.estimator.LinearRegressor 类似于 scikit-learn 中的 sklearn.linear_model.LinearRegression

    与其他 TensorFlow 工具集成

    Tensorflow 提供了一个名为 TensorBoard 的可视化工具,可帮助您可视化图表和统计数据。通过使用 Estimator,您可以轻松保存摘要以使用 Tensorboard 进行可视化。

    将 Keras 模型转换为估计器

    要将 Keras 模型迁移到 Estimator,请使用 tf.keras.estimator.model_to_estimator 方法。

    【讨论】:

    • PS:Keras 确实处理低级操作,只是不是很标准。它的后端 (import keras.backend as K) 包含许多围绕后端函数的函数。它们旨在用于自定义层、自定义指标、自定义损失函数等。
    • @DanielMöller 感谢您的评论!如果您愿意,请随时编辑我的答案。
    • 虽然你说的是真的,但考虑到colab 的数量/文档(几乎不存在)是用tf.keras 而非“罐头”编写的,看来 TF 偏爱tf.keras tf.estimator.Estimator 或自定义估算器
    • 在分布式训练方面,Keras API 实际上比 Estimator API 更受支持。你可以在这里阅读更多:tensorflow.org/guide/distributed_training
    • 我同意@hwaxxer。您需要更新您对 Tensorflow 2 的答案。
    【解决方案2】:

    据我了解,estimator 是用于大规模训练数据并用于生产目的,因为 Cloud ML 引擎只能接受 estimator。

    以下来自 tensorflow doc 之一的描述提到了这一点:

    " Estimators API 用于训练分布式环境的模型。这针对行业用例,例如可以导出用于生产的模型的大型数据集的分布式训练。 "

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 1970-01-01
      • 2017-10-19
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多