【发布时间】:2022-02-26 07:04:12
【问题描述】:
Tensorflow Keras 模型和 Tensorflow Estimator 都能够训练神经网络模型并使用它们来预测新数据。它们都是位于低级核心 TensorFlow API 之上的高级 API。那么我应该什么时候使用一个而不是另一个呢?
【问题讨论】:
标签: tensorflow keras tensorflow-estimator
Tensorflow Keras 模型和 Tensorflow Estimator 都能够训练神经网络模型并使用它们来预测新数据。它们都是位于低级核心 TensorFlow API 之上的高级 API。那么我应该什么时候使用一个而不是另一个呢?
【问题讨论】:
标签: tensorflow keras tensorflow-estimator
Estimators API 在 1.1 版中被添加到 Tensorflow 中,并为较低级别的 Tensorflow 核心操作提供高级抽象。它与 Estimator 实例一起使用,这是 TensorFlow 对完整模型的高级表示。
Keras 类似于 Estimators API,因为它抽象了深度学习模型组件,例如层、激活函数和优化器,以使开发人员更容易使用。它是一个模型级库,不处理低级操作,这是张量操作库或后端的工作。 Keras 支持三个后端 - Tensorflow、Theano 和 CNTK。
直到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 提供了一个名为 TensorBoard 的可视化工具,可帮助您可视化图表和统计数据。通过使用 Estimator,您可以轻松保存摘要以使用 Tensorboard 进行可视化。
要将 Keras 模型迁移到 Estimator,请使用 tf.keras.estimator.model_to_estimator 方法。
【讨论】:
import keras.backend as K) 包含许多围绕后端函数的函数。它们旨在用于自定义层、自定义指标、自定义损失函数等。
colab 的数量/文档(几乎不存在)是用tf.keras 而非“罐头”编写的,看来 TF 偏爱tf.keras tf.estimator.Estimator 或自定义估算器
据我了解,estimator 是用于大规模训练数据并用于生产目的,因为 Cloud ML 引擎只能接受 estimator。
以下来自 tensorflow doc 之一的描述提到了这一点:
" Estimators API 用于训练分布式环境的模型。这针对行业用例,例如可以导出用于生产的模型的大型数据集的分布式训练。 "
【讨论】: