首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow评估:评估所有图像

Tensorflow评估:评估所有图像
EN

Stack Overflow用户
提问于 2016-08-01 10:22:25
回答 1查看 947关注 0票数 1

我已经构建了一个与CIFAR10具有相同图像格式的卷积神经网络,目前正在尝试评估它,但是,我无法让我的代码评估文件中的所有图像,并且我只能读取第一个图像。即使当我调用一个循环时,它也只是一遍又一遍地打印结果。我也在单张图片上进行了测试。

我的代码如下所示:

代码语言:javascript
复制
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()代码,它也可以帮助解决这个问题。

代码语言:javascript
复制
def eval_inputs():
  data_dir = FLAGS.data_dir
  images, labels = Input.eval_inputs(data_dir = data_dir, batch_size = 1)
  return images, labels
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-02 05:09:54

要评估所有图像,您必须在sess.run()调用周围放置循环:

代码语言:javascript
复制
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次相同的op。这相当于在相同的输入上调用相同的函数100次,这解释了为什么每次的结果都是相同的。

eval_inputs()函数的作用类似于Python生成器,它在每次调用sess.run(top_k_op)时返回不同的求值输入示例。因此,如果您将sess.run(top_k_op)包装在一个循环中,您将获得不同示例的评估结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38690186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档