我已经构建了一个卷积神经网络,其格式与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
答案 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)
包装在一个循环中,您将获得不同示例的评估结果。