在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)
它挂起没有完成?它不会采取“步骤”参数?我没有收到任何错误消息或输出,所以没有太多的继续…任何想法或提示?文档有点“轻”?
解决方法:
我不认为这是一个bug,从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()方法的文档中解释说,如果步骤为None(默认情况下为值),模型将永远训练.
我仍然不明白为什么我想永远训练一个模型.我的猜测是,如果我们想要提前停止验证数据,创作者认为这种分类器更好,但正如我所说的只是我的猜测.
正如您所看到的,DNNClassifier没有给出任何反馈,因为已弃用
TensorFlowDNNClassifier,假设可以使用DNNClassifier的构造函数中存在的’config’参数设置反馈.所以你应该将一个runconfig对象作为配置传递,并且在这个对象的参数中你应该设置详细的参数,不幸的是我试着设置它以便我可以看到丢失的进度,但是没有那么幸运.