2017-08-22 6 views
0

Wenn ich Tensorflow zu berechnen Auc, es immer 0 oder in der Nähe von 0. Ich habe viele Male versucht, "Accuracy" konnte 0.999 erreichen, aber die Auc Reuslt ist immer 0 oder nahe 0.0. Der Code folgt:warum meine Tensorflow Auc ist 0.0

input_tensor = tf.placeholder("float",[None, n_input]) 
output_tensor = tf.placeholder("float",[None, n_classes]) 
prediction = multilayer_perceptron(input_tensor, weights, biases) 
.... 

AUC=tf.contrib.metrics.streaming_auc(prediction, output_tensor) 
sess.run(tf.global_variables_initializer()) 
sess.run(tf.local_variables_initializer()) 
test_auc = sess.run(AUC, feed_dict={input_tensor : batch_x_test, output_tensor : batch_y_test}) 
print "test_auc:",test_auc 

Antwort

0

tf.contrib.metrics.streaming_auc kehrt auc und update_op. Eine Operation, die die Variablen true_positives, true_negatives, false_positives und false_negatives entsprechend inkrementiert und deren Wert auc entspricht. Hier im sess.run-Schritt müssen Sie die Ausgabe trennen, um wie folgt auf Ihre test_auc-Ergebnisse zuzugreifen.

AUC, update_op=tf.contrib.metrics.streaming_auc(prediction, output_tensor) 
... 
test_auc, _ = sess.run([AUC, update_op], feed_dict={input_tensor : batch_x_test, output_tensor : batch_y_test}) 

# Also you need to remove one global_variables_initializer line, as your model is loaded from checkpoint 
sess.run(tf.global_variables_initializer()) 

# place this one one step above sess restore line 
sess.run(tf.local_variables_initializer()) 
saver.restore(sess, some checkpoint file) 
+0

Das Ergebnis wie folgt :('Genauigkeit:', 0,99152541) test_auc: [0,0, 9.2286828e-05]. Auc ist 0.0 – jaky

+0

aktualisiert meine Antwort –

+0

Ich denke, es ist nicht erforderlich, Sitzung und Modell wiederherzustellen, weil das Modell trainiert und dann zur Vorhersage Auc in den gleichen Prozess verwendet wird. Und ich habe versucht, "one global_variables_initializer line" zu entfernen, aber das Ergebnis ist 0,0 AUC. – jaky