我已经构建了一个与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发布于 2016-08-02 05:09:54
要评估所有图像,您必须在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次相同的op。这相当于在相同的输入上调用相同的函数100次,这解释了为什么每次的结果都是相同的。
eval_inputs()函数的作用类似于Python生成器,它在每次调用sess.run(top_k_op)时返回不同的求值输入示例。因此,如果您将sess.run(top_k_op)包装在一个循环中,您将获得不同示例的评估结果。
https://stackoverflow.com/questions/38690186
复制相似问题