【问题标题】:TensorFlowDNNClassifier class is deprecated but replacement does not seem to work?TensorFlowDNNClassifier 类已弃用,但替换似乎不起作用?
【发布时间】:2023-04-10 20:50:01
【问题描述】:

在 60,000(训练)和 26,000(测试)上使用以下 TF .9.0rc0 和 145 个编码列 (1,0) 来预测 1 或 0 以进行类识别。

classifier_TensorFlow = learn.TensorFlowDNNClassifier(hidden_units=[10, 20, 10],n_classes=2, steps=100)
classifier_TensorFlow.fit(X_train, y_train.ravel())

我明白了:

WARNING:tensorflow:TensorFlowDNNClassifier class is deprecated. Please consider using DNNClassifier as an alternative.
Out[34]:TensorFlowDNNClassifier(steps=100, batch_size=32)

然后很快就得到了很好的结果:

score = metrics.accuracy_score(y_test,   classifier_TensorFlow.predict(X_test))
print('Accuracy: {0:f}'.format(score))
Accuracy: 0.923121

还有:

print (metrics.confusion_matrix(y_test, X_pred_class))
[[23996   103]
[ 1992    15]]

但是当我尝试使用新的建议方法时:

classifier_TensorFlow = learn.DNNClassifier(hidden_units=[10, 20, 10],n_classes=2)

它没有完成就挂起?它不会采用“步骤”参数吗?我没有收到任何错误消息或输出,所以没有太多可继续的...有什么想法或提示吗?文档有点“轻”?

【问题讨论】:

  • 抱歉,您遇到了问题,从描述来看,这似乎是一个错误。你能把这个提交到github.com/tensorflow/tensorflow/issues 吗?
  • 很抱歉,我无法提供完整的测试用例,但提供了大量的道具数据

标签: python tensorflow skflow


【解决方案1】:

我不认为这是一个错误,从 DNNClassifier 的源代码中,我可以看出它的用法与 TensorFlowDNNClassifier 不同。 DNNClassifier的构造函数没有steps参数:

def __init__(self,
           hidden_units,
           feature_columns=None,
           model_dir=None,
           n_classes=2,
           weight_column_name=None,
           optimizer=None,
           activation_fn=nn.relu,
           dropout=None,
           config=None)

如您所见here。取而代之的是,DNNClassifier 从BaseEstimator 继承的 fit() 方法现在具有 steps 参数,请注意 batch_size 也会发生同样的情况:

  def fit(self, x=None, y=None, input_fn=None, steps=None, batch_size=None,
          monitors=None):

对于“它没有完成就挂起?”,在BaseEstimator的fit()方法的文档中解释了如果steps是None(作为默认值),模型将永远训练。

我仍然不明白为什么我想永远训练一个模型。我的猜测是,如果我们想提前停止验证数据,创建者认为这种方式更适合分类器,但正如我所说的,这只是我的猜测。

正如您所见,DNNClassifier 没有提供任何反馈,因为已弃用 TensorFlowDNNClassifier,假设可以使用 DNNClassifier 的构造函数中存在的“config”参数设置反馈。所以你应该传递一个RunConfig对象作为config,并且在这个对象的params中你应该设置verbose param,不幸的是我试图设置它以便我可以看到丢失的进度,但没有那么幸运。

我建议你看看袁唐在他的博客here 中的最新帖子,他是skflow 的创建者之一,又名tf learn。

【讨论】:

    【解决方案2】:

    我刚刚遇到了类似的问题@Ismael 答案是正确的。我只是想添加到现在分类器.fit() 具有该参数行为不同的 steps 参数的信息。它不会提前中止。还有另一个参数称为 max_steps。这相当于 TensorFlowDNNClassifier 的原始 steps 参数。

    简而言之,只需在 fit() 上使用 ma​​x_steps 参数,如下所示:

    classifier = skflow.DNNClassifier(...)
    classifier.fit(X_train, y_train, max_steps=3000)
    

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 2018-09-14
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多