tf.contrib.slim.get_variables_to_restore()不返回值

时间:2017-03-03 03:07:08

标签: tensorflow tf-slim

在代码下运行tf.contrib.slim.get_variables_to_restore()为all_vars返回空值[],然后在调用tf.train.Saver时导致失败。详细信息错误消息如下所示。

我错过了什么吗?

>>> import tensorflow as tf
>>> inception_exclude_scopes = ['InceptionV3/AuxLogits', 'InceptionV3/Logits', 'global_step', 'final_ops']
>>> inception_checkpoint_file = '/Users/morgan.du/git/machine-learning/projects/capstone/yelp/model/inception_v3_2016_08_28.ckpt'
>>> with tf.Session(graph=tf.Graph()) as sess:
...     init_op = tf.global_variables_initializer()
...     sess.run(init_op)
...     reader = tf.train.NewCheckpointReader(inception_checkpoint_file)
...     var_to_shape_map = reader.get_variable_to_shape_map()
...     all_vars = tf.contrib.slim.get_variables_to_restore(exclude=inception_exclude_scopes)
...     inception_saver = tf.train.Saver(all_vars)
...     inception_saver.restore(sess, inception_checkpoint_file)
... 
Traceback (most recent call last):
  File "<stdin>", line 7, in <module>
  File "/Users/morgan.du/miniconda2/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1051, in __init__
    self.build()
  File "/Users/morgan.du/miniconda2/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1072, in build
    raise ValueError("No variables to save")
ValueError: No variables to save

1 个答案:

答案 0 :(得分:0)

这里的问题似乎是你的图表是空的 - 即。它不包含任何变量。您在行with tf.Session(graph=tf.Graph()):上创建了一个新图表,并且以下所有行都不会创建tf.Variable对象。

要恢复预先训练的TensorFlow模型,您需要执行以下三项操作之一:

  1. 重建模型图,方法是首先执行用于训练模型的相同Python图形构建代码。
  2. 加载“MetaGraph”,其中包含有关如何重建图形结构和模型变量的信息。有关如何创建和使用MetaGraph的更多详细信息,请参阅this tutorial。 MetaGraphs通常与检查点文件一起创建,通常具有扩展名.meta
  3. 加载“SavedModel”,其中包含“MetaGraph”。有关详细信息,请参阅文档here