2017-05-26 6 views
-1

Ich versuche ein neurales Netzwerk zu kodieren, das Eingabe-Features akzeptiert und eine Ausgabe zurückgibt. Ich möchte jedoch die "Korrektheit" des NN überprüfen, indem ich die Ausgabe mit der tatsächlichen Ausgabe vergleiche. Gleichzeitig möchte ich zulassen, dass diese Kennzahl eine Unsicherheit in der Ausgabe berücksichtigt. Sagen wir, wenn die vorhergesagte Ausgabe innerhalb von 1 Einheit von der tatsächlichen Ausgabe entfernt ist, zähle diese vorhergesagte Ausgabe als richtig.tf.reduce_sum gibt einen größeren als erwarteten Wert zurück

Codeabsicht: Prüfen Sie, ob | x-y | ist kleiner oder gleich 1, wenn dies der Fall ist, zählen Sie alle Vorkommen, bei denen dies der Fall ist. Im Wesentlichen kann ich wissen, wie viele Fälle wahr sind.

Hier ist der Code unten,

correct = tf.reduce_sum(tf.cast(tf.less_equal(tf.abs(x - y), 1), tf.int32)) 
correct.eval({x: predicted_output, y = real_output}) 

Wenn ich eine kleine Liste mit dem Wörterbuch (Code unten) passieren, kann ich korrekte Ergebnisse zurück:

{x: [1,2,3,4,5], y: [1,2,3,1,1,]} 

Allerdings, wenn ich die passieren vorhergesagter Ausgang und realer Ausgang welcher ist von Länge 10 000, manchmal ist der Rückgabewert mehr th ein 10 000.

Bin ich richtig in der Annahme, dass der zurückgegebene Wert weniger als 10 000 sein muss? Wenn ja, als welche Fehler mache ich, dass der Rückgabewert mehr als 10 000 betragen würde?

EDITED Voll ish Code enthalten:

def neural_network_model(data): 
hidden_1_layer = {"weights": tf.Variable(tf.random_normal([n_input, n_nodes_hl1])), 
        "biases": tf.Variable(tf.random_normal([n_nodes_hl1]))} 
hidden_2_layer = {"weights": tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 
        "biases": tf.Variable(tf.random_normal([n_nodes_hl2]))} 
hidden_3_layer = {"weights": tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 
        "biases": tf.Variable(tf.random_normal([n_nodes_hl3]))} 
output_layer = {"weights": tf.Variable(tf.random_normal([n_nodes_hl3, n_output])), 
        "biases": tf.Variable(tf.random_normal([n_output]))} 

l1 = tf.add(tf.matmul(data, hidden_1_layer["weights"]), hidden_1_layer["biases"]) 
l1 = tf.nn.relu(l1) 

l2 = tf.add(tf.matmul(l1, hidden_2_layer["weights"]), hidden_2_layer["biases"]) 
l2 = tf.nn.relu(l2) 

l3 = tf.add(tf.matmul(l2, hidden_3_layer["weights"]), hidden_3_layer["biases"]) 
l3 = tf.nn.relu(l3) 

output = tf.matmul(l3, output_layer["weights"]) + output_layer["biases"] 

return output 

prediction = neural_network_model(x) 
correct = tf.reduce_sum(tf.cast(tf.less_equal(tf.abs(prediction - y), 1), tf.int32)) 
correct.eval({x: val_features, y: val_label}) 
+0

Funktioniert gut für mich mit zufälligen ganzen Zahlen. Könnten Sie mir bitte die Anzahl der Klassen, die Sie haben, mitteilen? ist es 10000? Hast du die Max- und Min-Werte von x und y überprüft? – hars

+0

@hars Anzahl der Klassen ist eins. es ist eine einzige kontinuierliche Ausgabe NN. Ich habe die Frage bearbeitet, um weitere Informationen zum Code hinzuzufügen. nicht in der Bearbeitung enthalten ist, wird die Schulungssitzung ausgeführt. vor der Überprüfung richtig. –

+0

Haben Sie die Größe der X-, Y- und Hat-Werte überprüft? – hars

Antwort

0

die Quelle des Fehlers gefunden.

In diesem Fall wurde val_label von einem größeren numpy-Array namens Daten genommen. Das Etikett befindet sich in der letzten Spalte des Datenfeldes.

val_label = data[:, -1] 

Dies ergab anscheinend ein Array mit Dimension (10 000), die einem Vektor

Wann ist dies den Tensor val_labels verglichen wird, die die Dimension ist, (10 000, 1) der Fehler aufgetreten ist.

val_label = data[:, -1:] 

oder:

Das Update, dass val_label Array der Dimension (10 000, 1) war, um sicherzustellen, war das wie so getan wird

die tensorflow Graph
val_label = data[:, -1] 
val_label = val_label.reshape((-1,1)) 

Re-Evaluierung wird dann geben Sie die korrekte erwartete Ausgabe zurück

Verwandte Themen