TensorFlow似乎有两个不同的API用于实际运行优化过程,也就是说,我看过两个不同的示例代码系列,其中一个看起来像
estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns)
,另一个看起来像
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
它们是真正的替代品;每个样本程序使用一个或另一个但不是两个。
应该使用以下哪些?是否有人赞成另一个?一个用于简单的情况,另一个用于更复杂的情况吗?
答案 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。