2016-06-08 33 views
2

使用與TF .9.0rc0下面上或所以用145個編碼列(1,0)試圖預測1或0用於分類識別記錄..TensorFlowDNNClassifier類已被棄用,但替換似乎不起作用?

classifier_TensorFlow = learn.TensorFlowDNNClassifier(hidden_units=[10, 20, 10],n_classes=2, steps=100) 
classifier_TensorFlow.fit(X_train, y_train.ravel()) 
60,000(火車)和26000(測試)

我得到:

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」參數?我沒有得到任何錯誤消息或輸出,所以沒有太多的繼續...任何想法或提示?文檔有點「輕?」

+0

對不起你打的問題,由這似乎是一個錯誤的描述。你可以在https://github.com/tensorflow/tensorflow/issues上提交這個文件嗎? –

+0

對不起,我不能提供完整的測試案例,但大型道具數據 – dartdog

回答

3

我不認爲這是一個錯誤,從DNNClassifier的源代碼,我可以告訴它的用法不同於TensorFlowDNNClassifier。 DNNClassifier的構造不具備步驟PARAM:

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繼承了飛度()方法現在有步驟PARAM,請注意同一與batch_size時發生:「它沒有完成掛起」

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

爲,在合適的文檔( )BaseEstimator的方法解釋說,如果步驟是None(默認值),模型將永遠訓練。

我還是不明白爲什麼我想永遠訓練一個模型。我的猜測是,如果我們希望儘早停止驗證數據,創建者認爲這種方式對分類器更好,但正如我所說的,這只是我的猜測。

正如你所看到的,DNNClassifier沒有給出任何反饋,因爲已棄用的 TensorFlowDNNClassifier,它應該可以通過在DNNClassifier的構造函數中存在的'config'參數來設置反饋。所以你應該傳遞一個RunConfig對象作爲配置,並且在這個對象的參數中你應該設置詳細參數,不幸的是我試圖設置它,以便我可以看到丟失的進度,但沒有那麼幸運。

我建議你在他的博客here裏看看袁唐的最新帖子,他是skflow的創建者之一,又名tf學習。

+0

非常感謝! – dartdog

0

我剛剛有一個類似的問題@Ismael的答案是正確的。我只是想補充一點,現在classifier.fit()具有steps參數,這個參數的行爲有所不同。它不會早一點中止。還有另一個名爲max_steps的參數。這表現爲TensorFlowDNNClassifier的原始步驟參數。

總之只要使用上MAX_STEPS適合參數()這樣的:

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