`sess.graph`和`tf.get_default_graph()`之间的区别是什么?

4

sess.graphtf.get_default_graph()在tensorboard中的结果相同。但是,根据手册,它们之间的区别并不是很清楚。能否有人帮忙解释一下它们之间的区别?能否提供一个例子,说明何时不能互换使用sess.graphtf.get_default_graph()

#!/usr/bin/env python
# vim: set noexpandtab tabstop=2 shiftwidth=2 softtabstop=-1 fileencoding=utf-8:

import tensorflow as tf
import sys

x = tf.Variable(1.0)
with tf.name_scope('ns_loss'):
    loss = tf.square(x)
with tf.name_scope('ns_adam'):
    train_op = tf.train.AdamOptimizer().minimize(loss)

init = tf.global_variables_initializer()

tf.summary.scalar('scalar_loss', loss)
merged_summary_op = tf.summary.merge_all()

with tf.Session() as sess:
    sess.run(init)
    summary_writer = tf.summary.FileWriter(logdir=sys.argv[1])
    summary_writer.add_graph(graph=tf.get_default_graph())
    #summary_writer.add_graph(graph=sess.graph)

    for i in xrange(100):
        sess.run(train_op)
        summary_writer.add_summary(
                summary = sess.run(merged_summary_op)
                , global_step = i
                )
1个回答

4

tf.get_default_graph() 始终返回当前的计算图。例如,这是在会话开始之前定义xloss节点的图。

当您使用tf.Session()创建会话时,可以选择指定与默认图不同的图进行处理。在您的例子中,未指定:

如果在构建会话时没有指定graph参数,则默认图将在会话中启动。

在一个脚本中有多个图很少见,但是可能会出现,例如当从磁盘中恢复图时。

此外,请注意,会话完成后,默认图仍然存在,因此它们的生命周期是不同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接