Machine learning TensorFlow中的tf.estimator.estimator和tf.contrib.learn.estimator有什么区别
几个月前,我使用了TensorFlow的Machine learning TensorFlow中的tf.estimator.estimator和tf.contrib.learn.estimator有什么区别,machine-learning,tensorflow,Machine Learning,Tensorflow,几个月前,我使用了TensorFlow的tf.contrib.learn.DNNRegressorAPI,我发现它使用起来非常方便。在过去的几个月里,我没有跟上TensorFlow的发展。现在,我有一个项目,我想再次使用回归器,但对实际模型有更多的控制,如DNNRegressor所提供的。据我所见,这是由使用模型fn参数的估计器API支持的 但是TensorFlow API中有两个估计器s: tf.contrib.learn.Estimator tf.estimator.estimator
tf.contrib.learn.DNNRegressor
API,我发现它使用起来非常方便。在过去的几个月里,我没有跟上TensorFlow的发展。现在,我有一个项目,我想再次使用回归器,但对实际模型有更多的控制,如DNNRegressor
所提供的。据我所见,这是由使用模型fn
参数的估计器
API支持的
但是TensorFlow API中有两个估计器
s:
tf.contrib.learn.Estimator
tf.estimator.estimator
不幸的是,我在TensorFlow文档中找不到任何区别,也找不到何时使用这两者的指南。实际上,通过TensorFlow教程的学习产生了很多警告,因为一些界面显然已经改变了(不是
x
,y
参数,而是input\u fn
参数等等)。,但我有一些有根据的猜测可能对你有所帮助:
似乎tf.estimator.estimator
和返回tf.estimator.estimator.spect
的模型函数是最新示例中使用的函数,也是新代码中使用的函数
我现在猜测
tf.contrib.learn.Estimator
是一个早期原型,被tf.Estimator.Estimator
所取代。根据文档,tf.contrib
中的所有内容都是不稳定的API,可能随时发生变化,看起来tf.estimator
模块是从tf.contrib.learn
模块“进化”而来的稳定API。我假设作者只是忘记了将tf.contrib.learn.Estimator标记为不推荐的,并且它还没有被删除,所以现有代码不会中断。我也有同样的问题要问
我猜tf.estimator.estimator是高级接口和推荐用法,而tf.contrib.learn.estimator不是高级接口(但它确实是)
正如Christoph提到的,tf.contrib是不稳定的,因此tf.contrib.learn.Estimator很容易受到更改的影响。它从0.x版本更改为1.1版本,并在2016年12月再次更改。问题是,它们的用法似乎不同。您可以使用tf.contrib.learn.SKCompat包装tf.contrib.learn.Estimator,而对于tf.Estimator.Estimator,您不能做同样的事情。如果您检查错误消息,则型号fn要求/参数不同
结论是这两个估计量是不同的
无论如何,我认为tf doc在这个话题上做得非常糟糕,因为tf.estimator在他们的教程页面上,这意味着他们对此非常认真…补充Christoph的答案
2017年Tensorflow开发峰会特别提到了这些包之间的区别:
core和contrib之间的区别实际上在于核心内容
不要改变。在2.0版之前,一切都是向后兼容的,现在没有人考虑过这一点
如果你有一些核心,它是稳定的,你应该使用它。如果contrib中有某些内容,则API可能会根据您的需要进行更改
您可能想使用它,也可能不想使用它
因此,您可以将tf.contrib
包视为“实验性”或“早期预览”。对于已经在tf.estimator
和tf.contrib
中的类,您一定要使用tf.estimator
版本,因为tf.contrib
类会自动被弃用(即使文档中没有明确说明),并且可以在下一版本中删除
从tensorflow 1.4开始,“分级”课程列表包括:Estimator
DNNClassifier
,dnnRecessor
,LinearClassifier
,linearRecessor
,dnnlinearcompbinedClassifier
,dnnlinearcompbinedRegressor
。这些应该移植到tf.estimator,现在文档中有这样一个明确的声明:
注意:TensorFlow在tf.contrib.learn.Estimator中还包含一个不推荐使用的Estimator类,您不应该使用它。
由于某些原因,它在代码中没有标记为不推荐