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

时间:2018-07-21 12:02:18

标签: tensorflow keras tensorflow-estimator

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

3 个答案:

答案 0 :(得分:44)

背景

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”)时,您只需将Keras接口与Tensorflow后端一起使用即可构建和训练模型。

因此,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提供了预制的Estimators ,您只需插入超参数即可直接使用这些模型。

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

与其他Tensorflow工具集成

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

将Keras模型转换为估算器

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

答案 1 :(得分:6)

很抱歉,如果我误解了。 我仍然想知道Keras和TF估算器之间的区别。

  1. 对于Keras这样的高级API,难道它不应该自然地从其基础硬件平台(例如CPU,GPU,TPU或分布式环境)透明地移植吗?这些琐事不应该由下面的组件来照顾。

  2. Keras还具有很多预先构建的模型,您所需要做的就是插入超参数。

  3. Keras还可以通过其回调机制合并Tensorboard和ModelCheckpoint。 https://keras.io/callbacks/

  4. 是的,有从Keras到Estimator的转换API,但我不确定动机和绝对必要性。

答案 2 :(得分:0)

根据我的理解,估计器用于大规模训练数据并用于生产目的,因为云ML引擎只能接受估计器。

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

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