Tensorflow Keras模型和Tensorflow Estimators都能够训练神经网络模型,并使用它们来预测新数据。它们都是位于低级核心TensorFlow API之上的高级API。那么我什么时候应该使用另一个?
答案 0 :(得分:44)
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”)时,您只需将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.LinearRegressor
与scikit-learn
中的sklearn.linear_model.LinearRegression
相似。
Tensorflow提供了一个称为TensorBoard的可视化工具,可帮助您可视化图形和统计数据。通过使用Estimator,您可以轻松保存摘要以使用Tensorboard进行可视化。
要将Keras模型迁移到Estimator,请使用tf.keras.estimator.model_to_estimator
方法。
答案 1 :(得分:6)
很抱歉,如果我误解了。 我仍然想知道Keras和TF估算器之间的区别。
对于Keras这样的高级API,难道它不应该自然地从其基础硬件平台(例如CPU,GPU,TPU或分布式环境)透明地移植吗?这些琐事不应该由下面的组件来照顾。
Keras还具有很多预先构建的模型,您所需要做的就是插入超参数。
Keras还可以通过其回调机制合并Tensorboard和ModelCheckpoint。 https://keras.io/callbacks/
是的,有从Keras到Estimator的转换API,但我不确定动机和绝对必要性。
答案 2 :(得分:0)
根据我的理解,估计器用于大规模训练数据并用于生产目的,因为云ML引擎只能接受估计器。
以下来自tensorflow doc的描述提到了这一点:
” Estimators API用于训练分布式环境的模型。这针对行业用例,例如对大型数据集的分布式培训,可以将模型导出以进行生产。 “