2016-08-01 7 views
1

CIFAR10と同じiamgeフォーマットの畳み込みニューラルネットワークを構築していますが、現在評価しようとしていますが、ファイル内のすべての画像を評価するコードを取得できません。最初の画像。ループを呼び出すときでも、結果は何度も何度も印刷されます。私は単一のイメージでもそれをテストしました。Tensorflow評価:すべての画像を評価する

私のコードを以下に示します。その下

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() 

も問題の解決に援助を助けるかもしれProcess.Input()のコードです。

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

ループのコードはどのように見えますか? – mrry

+0

[True]が100回以上印刷されました。それは不可能です。私は同じラベルを何度も何度も繰り返していると思う。 –

+0

質問にループのコードを含めることはできますか? – mrry

答えて

1

すべての画像を評価するために、あなたはsess.run()コールの周りにループを置く必要があります:あなたは同じオペアンプ100回を作成し、問題の

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)) 

。これは、同じ入力を同じ関数で100回呼び出すのと同じことです。これは、結果が毎回同じ理由を説明しています。

eval_inputs()関数は、Pythonジェネレータのように動作し、sess.run(top_k_op)の呼び出しごとに異なる評価入力の例を返します。したがって、ループ内でsess.run(top_k_op)をラップすると、さまざまな例の評価結果が得られます。

+0

あなたの応答のために非常にありがとうが、私は同じエラーがまだ起こっていることを恐れています。統計的には100の例すべてが正確であるということはありえない。そして、別のファイルのすべての例はすべて偽です。 –

+0

おそらく 'Process.eval_inputs()'関数にエラーがあり、そのたびに同じ例が返されます。ループ内で 'print(sess.run([labels、top_k_op]))'を実行して、ラベルがある例から次の例に変化しているかどうかを確認してください。 – mrry

+0

値は同じです。 –