TensorFlowDNNClassifier

TensorFlowDNNClassifier

将以下内容与TF .9.0rc0分别用于60,000(火车)和26,000(测试)的记录有关,其中包含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)


它挂起来没有完成?它不会采用“步骤”参数吗?我没有收到任何错误消息或输出,因此没有太多继续操作...任何想法或提示吗?该文档有点“轻巧?”

最佳答案

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

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()方法现在具有步骤param,请注意,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传递,并且在该对象的参数中,您应该设置详细的参数,不幸的是,我尝试对其进行设置,以便可以看到丢失的进度,但并没有那么幸运。

我建议您在他的博客here中看一下原源的最新帖子,他是skflow的创建者之一,又名tf learning。

关于python - TensorFlowDNNClassifier类已弃用,但替换似乎不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37712723/

10-11 08:34