TensorFlowDNNClassifier class 已弃用但替换似乎不起作用?
TensorFlowDNNClassifier class is deprecated but replacement does not seem to work?
使用以下 TF .9.0rc0 在 60,000(训练)和 26,000(测试)左右的记录上使用 145 个编码列 (1,0) 试图预测 1 或 0 以进行 class 识别。 .
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)
没有完成就挂了?它不会带 "steps" 参数吗?我没有收到任何错误消息或输出,所以没什么可继续的……有什么想法或提示吗?文档有点"light?"
我不认为这是一个错误,从 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. Instead the fit() method that DNNClassifier inherited from BaseEstimator 现在有 steps 参数,请注意 batch_size:
也是如此
def fit(self, x=None, y=None, input_fn=None, steps=None, batch_size=None,
monitors=None):
对于"it hangs with no completion?",在BaseEstimator的fit()方法的文档中解释说如果steps为None
(默认值),模型将永远训练。
我还是不明白为什么我想永远训练一个模型。我的猜测是,如果我们想提前停止验证数据,创作者认为这种方式对分类器更好,但正如我所说,这只是我的猜测。
如您所见,DNNClassifier 没有提供任何反馈,因为已弃用
TensorFlowDNNClassifier,假设可以使用 DNNClassifier 的构造函数中存在的 'config' 参数设置反馈。所以你应该传递一个 RunConfig 对象作为配置,并且在这个对象的参数中你应该设置详细参数,不幸的是我试图设置它以便我可以看到丢失的进度,但没有那么幸运。
推荐大家看一下最新的post 袁堂的博客here,skflow的创造者之一,又名tf learn。
我刚刚遇到了类似的问题@Ismael 回答是正确的。我只是想添加信息,现在 classifier.fit() 具有此参数行为不同的步骤参数。它不会提前中止。还有一个参数叫做max_steps。这相当于 TensorFlowDNNClassifier 的原始步骤参数。
简而言之,只需像这样在 fit() 上使用 max_steps 参数:
classifier = skflow.DNNClassifier(...)
classifier.fit(X_train, y_train, max_steps=3000)
使用以下 TF .9.0rc0 在 60,000(训练)和 26,000(测试)左右的记录上使用 145 个编码列 (1,0) 试图预测 1 或 0 以进行 class 识别。 .
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)
没有完成就挂了?它不会带 "steps" 参数吗?我没有收到任何错误消息或输出,所以没什么可继续的……有什么想法或提示吗?文档有点"light?"
我不认为这是一个错误,从 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. Instead the fit() method that DNNClassifier inherited from BaseEstimator 现在有 steps 参数,请注意 batch_size:
也是如此 def fit(self, x=None, y=None, input_fn=None, steps=None, batch_size=None,
monitors=None):
对于"it hangs with no completion?",在BaseEstimator的fit()方法的文档中解释说如果steps为None
(默认值),模型将永远训练。
我还是不明白为什么我想永远训练一个模型。我的猜测是,如果我们想提前停止验证数据,创作者认为这种方式对分类器更好,但正如我所说,这只是我的猜测。
如您所见,DNNClassifier 没有提供任何反馈,因为已弃用 TensorFlowDNNClassifier,假设可以使用 DNNClassifier 的构造函数中存在的 'config' 参数设置反馈。所以你应该传递一个 RunConfig 对象作为配置,并且在这个对象的参数中你应该设置详细参数,不幸的是我试图设置它以便我可以看到丢失的进度,但没有那么幸运。
推荐大家看一下最新的post 袁堂的博客here,skflow的创造者之一,又名tf learn。
我刚刚遇到了类似的问题@Ismael 回答是正确的。我只是想添加信息,现在 classifier.fit() 具有此参数行为不同的步骤参数。它不会提前中止。还有一个参数叫做max_steps。这相当于 TensorFlowDNNClassifier 的原始步骤参数。
简而言之,只需像这样在 fit() 上使用 max_steps 参数:
classifier = skflow.DNNClassifier(...)
classifier.fit(X_train, y_train, max_steps=3000)