TensorFlow Keras模型和Estimator有什么区别?

60

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

2个回答

88

背景

Estimators API在Tensorflow 1.1版本中添加,为低级别的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指南中可以看到:
引用:
Estimators API用于在分布式环境中训练模型。
而从Tensorflow Estimators指南中可以看到:
引用:
您可以在本地主机或分布式多服务器环境上运行基于估算器的模型,而不必更改您的模型。此外,您可以在CPU、GPU或TPU上运行基于估算器的模型,而无需重新编写您的模型。
预制估算器
虽然Keras提供了简化构建模型的抽象,但您仍然需要编写构建模型的代码。通过Estimators,Tensorflow提供了预制估算器,这些模型可以直接使用,只需插入超参数即可。

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

与其他Tensorflow工具的集成

Tensorflow提供了一个名为TensorBoard的可视化工具,可帮助您可视化图形和统计信息。通过使用估算器,您可以轻松保存摘要以便在Tensorboard中可视化。

将Keras模型转换为估算器

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


7
PS: Keras确实可以处理低级操作,只是它并不是非常标准。Keras的后端(import keras.backend as K)包含许多函数,这些函数包装了底层函数。它们通常用于自定义层、自定义指标、自定义损失函数等中。 - Daniel Möller
1
虽然你所说的是正确的,但从colab /文档(尽管很少)编写时使用tf.keras而不是“预制”的tf.estimator.Estimator或自定义估算器,看起来TF更偏爱tf.keras - SumNeuron
1
tf.estimator是建立在Keras之上的。 - prosti
6
就分布式训练而言,Keras API比Estimator API得到更多支持。你可以在这里阅读更多信息:https://www.tensorflow.org/guide/distributed_training。 - hwaxxer
2
我同意@hwaxxer的观点。你需要更新你的Tensorflow 2答案。 - Ali Salehi
显示剩余2条评论

-2
在我的理解中,estimator 用于大规模训练数据并用于生产目的,因为云 ML 引擎只能接受 estimator。
来自 TensorFlow doc 中的以下描述提到了这一点:
“Estimators API 用于在分布式环境下训练模型。这针对的是一些工业应用场景,如在大型数据集上进行分布式训练,以便导出可用于生产的模型。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接