2016-08-01 20 views
1

Ich habe ein konvolutionelles neuronales Netzwerk mit dem gleichen iamge Format wie CIFAR10 gebaut und versuche es derzeit auszuwerten, aber ich kann meinen Code nicht alle Bilder in der Datei auswerten und ich kann nur lesen das erste Bild. Auch wenn ich eine Schleife anrufe, druckt es nur das Ergebnis immer und immer wieder. Ich habe es auch auf Einzelbildern getestet.Tensorflow Auswertung: Auswertung aller Bilder

Mein Code ist unten dargestellt:

import tensorflow as tf 

import main 
import Process 
import Input 

eval_dir = "/Users/Zanhuang/Desktop/NNP/model.ckpt-250" 
checkpoint_dir = "/Users/Zanhuang/Desktop/NNP/checkpoint" 


def evaluate(): 
    with tf.Graph().as_default() as g: 
    images, labels = Process.eval_inputs() 
    forward_propgation_results = Process.forward_propagation(images) 
    init_op = tf.initialize_all_variables() 
    saver = tf.train.Saver() 
    for i in range(100): 
     top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1) 

    with tf.Session(graph = g) as sess: 
    sess.run(init_op) 
    tf.train.start_queue_runners(sess=sess) 
    saver.restore(sess, eval_dir) 

    print(sess.run(top_k_op)) 

def main(argv = None): 
    evaluate() 

if __name__ == '__main__': 
    tf.app.run() 

Darunter die Process.Input ist() Code, der bei der Lösung des Problems kann auch Hilfe helfen.

def eval_inputs(): 
    data_dir = FLAGS.data_dir 
    images, labels = Input.eval_inputs(data_dir = data_dir, batch_size = 1) 
    return images, labels 
+0

Wie sieht Ihr Code mit der Schleife aus? – mrry

+0

[Wahr], aber über 100 Mal gedruckt. Was nicht möglich ist. Ich denke, es ist immer dasselbe Etikett zu berechnen. –

+0

Können Sie den Code für die Schleife in Ihre Frage aufnehmen? – mrry

Antwort

1

Um alle Bilder zu bewerten, müssen Sie die Schleife um die sess.run() Anruf setzen:

def evaluate(): 
    with tf.Graph().as_default() as g: 
    images, labels = Process.eval_inputs() 
    forward_propgation_results = Process.forward_propagation(images) 
    init_op = tf.initialize_all_variables() 
    saver = tf.train.Saver() 

    # Only create a single `top_k_op`. 
    top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1) 

    with tf.Session(graph = g) as sess: 
    sess.run(init_op) 
    tf.train.start_queue_runners(sess=sess) 
    saver.restore(sess, eval_dir) 

    # Evaluate the first 100 images in the `eval_inputs()`. 
    for i in range(100): 
     print(sess.run(top_k_op)) 

In der Frage, erstellen Sie die gleiche op 100 mal. Dies entspricht dem 100-fachen Aufruf derselben Funktion am selben Eingang, was erklärt, warum das Ergebnis jedes Mal gleich ist.

Die Funktion eval_inputs() verhält sich wie ein Python-Generator, der bei jedem Aufruf ein anderes Beispiel für einen Auswertungseingang an sess.run(top_k_op) zurückgibt. Wenn Sie also sess.run(top_k_op) in eine Schleife einfügen, erhalten Sie Bewertungsergebnisse für verschiedene Beispiele.

+0

Vielen Dank für Ihre Antwort, aber ich fürchte, der gleiche Fehler ist immer noch passiert. Es ist statistisch unwahrscheinlich, dass alle 100 Beispiele korrekt sind. Und alle Beispiele in einer anderen Datei sind alle falsch. –

+0

Möglicherweise gibt es einen Fehler in der 'Process.eval_inputs()' Funktion, die bewirkt, dass es das gleiche Beispiel jedes Mal zurückgibt. Versuchen Sie, 'print (sess.run ([labels, top_k_op]))' 'in der Schleife auszuführen, um zu sehen, ob sich die Beschriftung von einem Beispiel zum nächsten ändert. – mrry

+0

Okay. Die Werte sind gleich. –