2016-06-27 5 views
0

Ich habe gelernt, auf Tensorflow (MNIST) und ich habe die Gewichte in einem .ckpt gespeichert. Nun möchte ich mein neuronales Netzwerk auf diese Gewichte testen, wobei die gleichen Bilder von ein paar Pixeln nach rechts und unten übersetzt werden. Die Ladegewichte funktionieren gut, aber wenn ich ein Eval drucke, zeigt Tensorflow immer die gleichen Ergebnisse an (0,9630 für den Test), egal wie die Übersetzung von 1 oder 14px ist. Hier ist mein Code für die Funktion, die die eval drucken:Shift Bilder nach rechts in TensorFlow

def eval_translation(sess, eval_correct, images_pl, labels_pl, dataset): 
    print('Test Data Eval:') 
    for i in range(28): 
     true_count = 0 # Counts the number of correct predictions. 
     steps_per_epoch = dataset.num_examples // FLAGS.batch_size 
     nb_exemples = steps_per_epoch * FLAGS.batch_size 
     for step in xrange(steps_per_epoch): 
      images_feed, labels_feed = dataset.next_batch(FLAGS.batch_size) 
      feed_dict = {images_pl: translate_right(images_feed, i), labels_pl: labels_feed} 
      true_count += sess.run(eval_correct, feed_dict=feed_dict) 
     precision = true_count/nb_exemples 
     print('Translation: %d Num examples: %d Num correct: %d Precision @ 1: %0.04f' % (i, nb_exemples, true_count, precision)) 

Dies ist die Funktion, die mit mir die Daten geladen werden und die mit mir die Testergebnisse drucken. Hier ist meine Übersetzungsfunktion:

def translate_right(images, dev): 
    for i in range(len(images)): 
     for j in range(len(images[i])): 
      images[i][j] = np.roll(images[i][j], dev) 
    return images 

ich diese Funktion anstelle des Lernens nach alle Variablen initialisieren nur rufen:

with tf.Graph().as_default(): 
    # Generate placeholders for the images and labels. 
    images_placeholder, labels_placeholder = placeholder_inputs(FLAGS.batch_size) 

    # Build a Graph that computes predictions from the inference model. 
    weights, logits = mnist.inference(images_placeholder, neurons) 

    # Add to the Graph the Ops for loss calculation. 
    loss = mnist.loss(logits, labels_placeholder) 

    # Add to the Graph the Ops that calculate and apply gradients. 
    train_op = mnist.training(loss, learning_rate) 

    # Add the Op to compare the logits to the labels during evaluation. 
    eval_correct = mnist.evaluation(logits, labels_placeholder) 

    # Build the summary operation based on the TF collection of Summaries. 
    summary_op = tf.merge_all_summaries() 

    # Create a saver for writing training checkpoints. 
    save = {} 
    for i in range(len(weights)): 
     save['weights' + str(i)] = weights[i] 
    saver = tf.train.Saver(save) 

    # Create a session for running Ops on the Graph. 
    sess = tf.Session() 
    init = tf.initialize_all_variables() 
    sess.run(init) 

    # load weights 
    saver.restore(sess, restore_path) 

    # Instantiate a SummaryWriter to output summaries and the Graph. 
    summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph) 

    temps_total = time.time() 

    eval_translation(sess, eval_correct, images_placeholder, labels_placeholder, dataset.test) 

Ich weiß nicht, was mit meinem Code falsch ist, und warum Tensorflow scheint meine Bilder zu ignorieren. Kann mir bitte jemand helfen? Danke!

Antwort

0

Ihre Funktion funktioniert nicht, weil images[i, j] nur ein Pixel ist (enthält 1 Wert, wenn Sie Graustufenbilder haben).

sollten Sie das Argument axis von np.roll verwenden:

def translate_right(images, dev): 
    return np.roll(images, dev, axis=1) 
+0

Thank you! Ich dachte, dass meine Übersetzung funktionierte (ich habe die Bilder angezeigt und die Übersetzung gesehen), aber mit der Achse arg funktioniert es gut und Tensorflow gibt die korrekten Werte aus! – Liam