Skip to main content
 首页 » 编程设计

python之TensorFlowDNNClassifier 类已弃用但替换似乎不起作用

2024年08月22日33tintown

在具有 145 个编码列 (1,0) 的 60,000(训练)和 26,000(测试)记录上使用以下 TF .9.0rc0 试图预测 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 的构造函数没有 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 对象作为配置,并且在这个对象的参数中你应该设置详细参数,不幸的是我试图设置它以便我可以看到丢失的进度,但没有那么幸运。

推荐大家看看袁堂最新的博文here ,skflow 的创建者之一,又名 tf learn。