当前位置: 首页 > 工具软件 > tf_geometric > 使用案例 >

Tensorflow-with tf.Graph().as_default()

杨曜瑞
2023-12-01

tensorflow下的Graph中 tf.Operation是一个node,而tf.Tensor是一个edge

以tf.constant(0.0)为例,调用tf.constant(0.0)创建一个单独的tf.Operation,生成值42.0,将其添加到默认图形,并返回一个表示常数的值的tf.Tensor

 

在没有特别说明的情况下,程序中定义的tf.Operation均是添加进入default_graph中。若使用

graph1=tf.Graph()	# 声明tf.Graph()的一个类实例,即获取一个graph
with graph1.as_default():
	#完成graph1这个计算图中的tf.Operation的定义,即将在这个with所调用的上下文管理器中定义的tf.Operation添加进入声明的tf.Graph实例graph1中
	pass

其实这种方式本质上也是将graph设置为default_graph,所以可以认为,所有的tf.Operation均是添加到default_graph进行的,而这个default_graph是可以设置的。

再说说这个with graph1.as_default():

with会启动一个上下文管理器。所谓上下文管理器,就是在程序执行前将上文中当前所需要的资源准备好,并在结束时被系统回收。

with graph1.as_default()的含义是在这个with启动的上下文管理器中将graph1设置为default_graph,在with启动的上下文管理器内部所定义的tf.Operation则会添加进入当前的default_graph中,也就是graph1中。在整个with代码块结束后,default_graph将会重新设置为之前的,属于全局的graph。

从下面的代码可以对以上说法进行验证:

# -*- coding:utf-8 -*-
import tensorflow as tf

v1 = tf.Variable([0.0], name='v1')
v2 = tf.constant([1.0], name='v2')
add = tf.add(v1,v2, name='add')

graph1 = tf.Graph()

with graph1.as_default():
    v4 = tf.Variable([3.0], name='v4')

with tf.Session() as sess1:
    sess1.run(tf.global_variables_initializer())
    print sess1.run(add)

with tf.Session(graph=tf.get_default_graph()) as sess2:
    sess2.run(tf.global_variables_initializer())
    print sess2.run(v1)

g_op = graph1.get_operations()
print 'the operations in graph1>>> \n', g_op
print '\n'
d_op = tf.get_default_graph().get_operations()
print 'the operations in default graph>>> \n',d_op

输出结果如下:

[ 1.]
[ 0.]
the operations in graph1>>> 
[<tf.Operation 'v4/initial_value' type=Const>, <tf.Operation 'v4' type=VariableV2>, <tf.Operation 'v4/Assign' type=Assign>, <tf.Operation 'v4/read' type=Identity>]

the operations in default graph>>> 
[<tf.Operation 'v1/initial_value' type=Const>, <tf.Operation 'v1' type=VariableV2>, <tf.Operation 'v1/Assign' type=Assign>, <tf.Operation 'v1/read' type=Identity>, <tf.Operation 'v2' type=Const>, <tf.Operation 'add' type=Add>, <tf.Operation 'init' type=NoOp>, <tf.Operation 'init_1' type=NoOp>]

由此就可以知道graph1和default_graph中的tf.Operation有哪些了。

 类似资料: