TensorFlow:评估恢复图

0x2*_*207 2 tensorflow

我正在尝试从检查点恢复图形。检查点由tf.Supervisor. 有meta文件和检查点。

我试图实现的是从单独的应用程序加载这个图来运行一些操作(即恢复现有模型)。

我按照以下方式执行此操作(如此处所述:https : //www.tensorflow.org/api_docs/python/tf/train/import_meta_graph):

meta = 'path/to/file.meta'

my_graph = tf.Graph()
with my_graph.as_default():
        with tf.Session() as sess:
                saver = tf.train.import_meta_graph(meta)
                saver.restore(sess, tf.train.latest_checkpoint(os.path.dirname(meta)))
                op = my_graph.get_operation_by_name("op")
                print(sess.run(op))
Run Code Online (Sandbox Code Playgroud)

我看到的是None. 我希望看到的是一维张量。我my_graph使用 get_collection检查了对象,发现我的所有变量都需要op使用从检查点恢复的值正确初始化。我怎样才能弄清楚为什么没有正确评估操作?我真的被困在这里了。

以下代码:

print(sess.run(my_graph.get_operation_by_name("Variable_2")))
print(sess.run(my_graph.get_tensor_by_name("Variable_2:0")))
Run Code Online (Sandbox Code Playgroud)

印刷

None
4818800
Run Code Online (Sandbox Code Playgroud)

就好像一个操作和相应的变量之间没有联系。

mrr*_*rry 5

tf.Graph.get_operation_by_name()方法总是返回一个tf.Operation对象。当您将tf.Operation对象传递给 时tf.Session.run(),TensorFlow 将执行该操作(以及它所依赖的一切)并丢弃其输出(如果有)。

如果您对特定输出的值感兴趣,则必须告诉 TensorFlow 您对哪个输出 (a tf.Tensor) 感兴趣。有两个主要选项:

为什么 TensorFlow 会做出这种区分?一方面,一个操作可以有多个输出,因此有时需要具体说明您想要获取哪个输出。另一方面,操作可能会产生副作用并产生大量输出(参见tf.assign()示例),并且通常将 传递tf.Operation给更有效,sess.run()这样该值就不会被复制回 Python 程序。