Tensorflow评估:评估所有图像

时间:2016-08-01 02:22:25

标签: tensorflow

我已经构建了一个卷积神经网络,其格式与CIFAR10相同,目前正在尝试对其进行评估,但是,我无法得到我的代码来评估文件中的所有图像,而我只能读取第一张图像。即使我调用循环,它也只会反复打印结果。我也在单张图片上测试了它。

我的代码如下所示:

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

1 个答案:

答案 0 :(得分: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)包装在一个循环中,您将获得不同示例的评估结果。