不推荐使用TensorFlowDNNClassifier类,但替换似乎不起作用?

时间:2016-06-08 20:54:07

标签: python tensorflow skflow

在60,000(列车)和26,000(测试)上使用以下TF 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)

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

2 个答案:

答案 0 :(得分:3)

我不认为这是一个错误,从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()方法现在具有步骤参数,请注意batch_size也是如此:

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

对于"它挂起但没有完成?",在BaseEstimator的fit()方法的文档中,解释了如果步骤是None(默认情况下为值) ,模型将永远训练。

我仍然不知道为什么我想永远训练模型。我的猜测是,如果我们想要提前停止验证数据,创作者认为这种分类器更好,但正如我所说的只是我的猜测。

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

我建议你在他的博客here中查看袁棠的最新帖子,这是skflow的创建者之一,也就是学习。

答案 1 :(得分:0)

我刚才有类似的问题@Ismael回答是正确的。我只想添加信息,现在classifier.fit()具有此参数表现不同的steps参数。它不会提前中止。还有另一个名为max_steps的参数。这表现为TensorFlowDNNClassifier的原始步骤参数。

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

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