Tensorflow ValueError:没有要保存的变量

发布于 2021-01-29 15:07:01

我已经写了一个tensorflow CNN,它已经受过训练。我希望将其还原以在几个示例上运行它,但不幸的是它吐出来了:

ValueError:没有要保存的变量

我的评估代码可以在这里找到:

import tensorflow as tf

import main
import Process
import Input

eval_dir = "/Users/Zanhuang/Desktop/NNP/model.ckpt-30"
checkpoint_dir = "/Users/Zanhuang/Desktop/NNP/checkpoint"

init_op = tf.initialize_all_variables()
saver = tf.train.Saver()

def evaluate():
  with tf.Graph().as_default() as g:
    sess.run(init_op)

    ckpt = tf.train.get_checkpoint_state(checkpoint_dir)

    saver.restore(sess, eval_dir)

    images, labels = Process.eval_inputs(eval_data = eval_data)

    forward_propgation_results = Process.forward_propagation(images)

    top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1)

    print(top_k_op)

def main(argv=None):
    evaluate()

if __name__ == '__main__':
  tf.app.run()
关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    tf.train.Saver必须创建 要恢复(或保存)的变量。此外,必须在与这些变量相同的图形中创建它。

    假设Process.forward_propagation(…)还可以在模型中创建变量,则在此行之后添加保护程序创建应该可以:

    forward_propgation_results = Process.forward_propagation(images)
    

    另外,您必须将tf.Graph创建的新内容传递给tf.Session构造函数,以便也需要sess在该with块内部移动创建内容。

    结果函数将类似于:

    def evaluate():
      with tf.Graph().as_default() as g:
        images, labels = Process.eval_inputs(eval_data = eval_data)
        forward_propgation_results = Process.forward_propagation(images)
        init_op = tf.initialize_all_variables()
        saver = tf.train.Saver()
        top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1)
    
      with tf.Session(graph=g) as sess:
        sess.run(init_op)
        saver.restore(sess, eval_dir)
        print(sess.run(top_k_op))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看