TensorFlow估算与火车

时间:2017-10-26 16:35:07

标签: python tensorflow

TensorFlow似乎有两个不同的API用于实际运行优化过程,也就是说,我看过两个不同的示例代码系列,其中一个看起来像

estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns)

,另一个看起来像

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

它们是真正的替代品;每个样本程序使用一个或另一个但不是两个。

应该使用以下哪些?是否有人赞成另一个?一个用于简单的情况,另一个用于更复杂的情况吗?

2 个答案:

答案 0 :(得分:1)

这两件事情并不具有可比性

estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns)

是一个高级抽象,它创建一个线性回归量(包括你自己的优化器,你可以在构造函数中设置)

而,

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

没有定义模型体系结构,只是定义了在给定模型上使用的优化方法。

如果您愿意,可以通过在参数中指定optimizer="SGD"来实例化具有GradientDescentOptimizer的LinearRegressor作为优化器,否则默认为optimizer="Ftrl"

如果您想要对您感到困惑的示例代码进行更详细的细分,则必须准确引用它。

答案 1 :(得分:1)

TensorFlow提供多个不同抽象级别的API,通过使用更高级别的API,您可以以灵活性为代价购买便利性和易于开发/实验:您的第一个示例可以省去显式指定{的麻烦{1}},这是cost默认的平方误差。但是,您可能会很快发现自己处于LinearRegressor的选项并未完全消除的情况;例如,您的样本中可能存在依赖关系,迫使您手动指定另一个成本函数,在这种情况下,您将下拉一个图层,并使用不太抽象的API。

在实践中,知道不同的版本可能很容易获得回报,允许自己为正在尝试解决的问题提供适当的抽象级别。

TensorFlow的高级API的另一个示例是Keras