2016-08-01 145 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

[對]但打印了100次以上。這是不可能的。我認爲它一遍又一遍地計算相同的標籤。 –

+0

你可以在你的問題中包含循環代碼嗎? – mrry

回答

1

評價的所有圖像,你必須把循環圍繞sess.run()電話:

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倍。這相當於在相同的輸入上調用同一個函數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

好的。值是相同的。 –