2016-06-08 6 views
2

folgendes mit TF .9.0rc0 auf 60.000 (Zug) und 26.000 (Test) an oder so Datensätze mit 145 codierten Spalten (1,0) Mit Versuch 1 oder 0 für Klassenidentifikation zur Vorhersage ..TensorFlowDNNClassifier Klasse ist veraltet, aber Ersatz scheint nicht zu funktionieren?

classifier_TensorFlow = learn.TensorFlowDNNClassifier(hidden_units=[10, 20, 10],n_classes=2, steps=100) 
classifier_TensorFlow.fit(X_train, y_train.ravel()) 

ich:

WARNING:tensorflow:TensorFlowDNNClassifier class is deprecated. Please consider using DNNClassifier as an alternative. 
Out[34]:TensorFlowDNNClassifier(steps=100, batch_size=32) 

Und dann recht schnell gute Ergebnisse:

score = metrics.accuracy_score(y_test, classifier_TensorFlow.predict(X_test)) 
print('Accuracy: {0:f}'.format(score)) 
Accuracy: 0.923121 

Und:

print (metrics.confusion_matrix(y_test, X_pred_class)) 
[[23996 103] 
[ 1992 15]] 

Aber wenn ich versuche, die neue vorgeschlagene Methode zu verwenden:

classifier_TensorFlow = learn.DNNClassifier(hidden_units=[10, 20, 10],n_classes=2) 

es ohne Abschluss hängt? es würde nicht den "steps" -Parameter nehmen? Ich bekomme keine Fehlermeldungen oder Ausgaben damit nicht viel weiter geht ... Irgendwelche Ideen oder Hinweise? Die Dokumentation ist ein bisschen "Licht?"

+0

Leider Sie schlagen Probleme, aus der Beschreibung dieses wie ein Fehler zu sein scheint.Könnten Sie dies auf https://github.com/tensorflow/tensorflow/issues ablegen? –

+0

Tut mir leid, ich kann nicht komplette Testfall aber große Prop Daten liefern – dartdog

Antwort

3

Ich glaube nicht, dass es ein Fehler ist, aus dem Quellcode von DNNClassifier kann ich sagen, dass seine Verwendung von TensorFlowDNNClassifier unterscheidet. Der Konstruktor von DNNClassifier hat nicht die Schritte 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) 

Wie Sie here sehen konnte. Stattdessen wird die Passform() Methode, die DNNClassifier von BaseEstimator geerbt hat nun die Schritte param, bemerken, dass das gleiche mit batch_size geschieht: „es ohne Abschluss hängt“

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

Für die im doc der Passung () Methode von BaseEstimator wird erklärt, dass, wenn Schritte None ist (als Standardwert), das Modell für immer trainiert.

Ich verstehe immer noch nicht, warum ich für immer ein Modell trainieren möchte. Meine Vermutungen sind, dass Entwickler denken, dass dieser Weg besser für den Klassifikator ist, wenn wir Validierungsdaten vorzeitig stoppen wollen, aber wie gesagt, ist nur meine Vermutung.

Wie Sie sehen konnten DNNClassifier gibt keine Rückmeldung als die veraltete TensorFlowDNNClassifier, es wird angenommen, dass die Rückmeldung kann mit der 'Konfig' param, die im Konstruktor von DNNClassifier vorhanden ist eingerichtet werden. Sie sollten also ein RunConfig-Objekt als config übergeben, und in den Parametern dieses Objekts sollten Sie den ausführlichen Parameter setzen, leider habe ich versucht, es so zu setzen, dass ich den Fortschritt des Verlustes sehen kann, aber nicht so glücklich wurde.

Ich empfehle Ihnen, einen Blick auf den neuesten Beitrag von Yuan Tang in seinem Blog here, einer der Schöpfer des skflow, aka tf lernen.

+0

Awesome thanks! – dartdog

0

Ich hatte gerade ein ähnliches Problem @ Ismael Antwort ist korrekt. Ich wollte nur zu der Information hinzufügen, dass classifier.fit() jetzt den Parameter steps hat, dass dieser Parameter sich anders verhält. Es bricht nicht früher ab. Es gibt einen anderen Parameter namens max_steps. Dies verhält sich wie der ursprüngliche Schrittparameter von TensorFlowDNNClassifier.

Kurz benutzen Sie einfach die max_steps Parameter auf Passform() wie folgt aus:

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