Tensorflow ValueError:没有要保存的变量

新手上路,请多包涵

我写了一个 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()

原文由 Zan Huang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 454
2 个回答

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

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

 forward_propgation_results = Process.forward_propagation(images)

此外,您必须将您创建的新的 tf.Graph withtf.Session 构造函数,因此您需要将 sess 的创建移动到里面 --- 块也是。

结果函数将类似于:

 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))

原文由 mrry 发布,翻译遵循 CC BY-SA 4.0 许可协议

简而言之,在创建保护程序对象之前应该至少定义一个 tf.variable。

您可以通过在保护程序对象定义之前添加以下代码行来运行上述代码。

您需要添加的代码位于两个### 之间。

 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()

### Here Comes the fake variable that makes defining a saver object possible.
_ = tf.Variable(initial_value='fake_variable')

###
saver = tf.train.Saver()
...

原文由 Redfox-Codder 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题