对于整个tensorflow2.0框架,tensorflow Keras模型和Tensorflow Estimators都能够训练神经网络模型并使用它们来预测新的数据。 它们都是TensorFlow 的高级API。 那么什么时候应该用一个来代替另一个呢?,它们两者的区别是什么?又有什么联系?工程实战中怎么区分二者的使用?
参考:https://*.com/questions/51455863/whats-the-difference-between-a-tensorflow-keras-model-and-estimator
Background:
Estimators API是在版本1.1中添加到Tensorflow中的,它提供了对较低级别Tensorflow核心操作的高级抽象。 它与Estimator实例一起使用,该实例是TensorFlow对完整模型的高级表示。
Keras与Estimators API相似之处在于,它抽象化了深度学习模型组件,如层 layers, 激活函数activation functions 和优化器optimizers,使开发人员更容易使用。 它是一个模型级别的库,不处理低级操作,低级操作是张量操作库或后端的工作。 Keras支持三个后端--Tensorflow,Theano和CNTK。
Keras在版本1.4.0(2017年11月2日)之前不属于Tensorflow的一部分,直到版本1.4.0,Keras才是Tensorflow的一部分。现在,当您使用tf.Keras(或者谈论'Tensorflow Keras')时,您只需使用Keras接口和Tensorflow后端来构建和训练您的模型。
因此,Estimator API和Keras API都在低级核心Tensorflow API之上提供了更高级的API,您可以使用其中任何一个来训练您的模型。
estimator跟keras一样是tf代码的封装,可以让大家避免写重复的代码。其中estimator是1.0中比较流行的。keras则是2.0主推的。学习estimator的原因则在于 1. estimator 1.0中就有,平台支持比较成熟。比如在google内部的分布式平台上keras还没有支持,只能转成estimator来运行。2. 很多代码是用estimator写的,学习estimator可以让大家更轻松看懂这些代码。
summary:
联系: keras和estimator都属于对模型的封装,都会封装模型的训练流程的代码。都有分布式的支持,还有dataset的支持
区别:estimator在1.0中就有,主要的封装抽象在模型训练流程,需要自行定义模型结构。keras则对层次的模型训练流程都进行的抽象。当然,也可以使用keras对层次的封装来定义模型结构送到estimator中去使用。
实战中:如果是tf1.0, 建议使用estimator,2.0以上建议使用keras API