计算图描述一个问题的解决方案,包含变量/占位符(统称张量,数据节点)、操作(运算节点),程序开始运行时会有一个缺省的计算图来收纳这些节点,也可以通过tf.Graph() .as_default()来创建新的计算图作为缺省的计算图。一个Session对应一个计算图,在tf.Session( graph=传入的计算图)中传参数达到,如省略参数,就使用缺省的计算图。张量和运算属于计算图,要是没有活跃的计算图在起作用,那么tf.global_variables()就不会返回变量。下面代码展示生成多个计算图,在里面定义数据节点和运算节点,然后分别产生Session包含不同的计算图,从计算图里通过名称获取张量,通过 session.run()来求张量的值。
import tensorflow as tf
def tryMultiGraphy() :
glist = []
for i in range(5) :
g = tf.Graph()
with g.as_default() :#通过as_default()设为缺省计算图,with块里定义的张量
#和运算属于该计算图
var1 = tf.placeholder( tf.int32 ,name='var1' )
var2 = tf.Variable( 10000*i )
sum = tf.add( var1 , var2, name = 'sumOps' )
glist.append( g )
for var in tf.global_variables():
print('0 variable=> ' , var.name)
for var in tf.global_variables():#在上面的with里已经把default图关掉,因而
print('1 variable=> ' , var.name) #此处无变量
for i in range(5) :
with tf.Session( graph=glist[i] ) as sess:#Session()调用时无参数传入的话,
#就使用缺省计算图。这里传入glist[i],该Session因而使用glist[i]计算图
init = tf.global_variables_initializer()
sess.run( init ) #不要忘了变量初始化
sumTensor = sess.graph.get_tensor_by_name('sumOps:0' )#从当前计算图获取张量
var = sess.graph.get_tensor_by_name('var1:0' )
a = input('enter a number: ')
fd = { var:a }
r = sess.run( sumTensor , feed_dict=fd )
print(r)
for var in tf.global_variables():#对应该计算图的变量,各计算图中变量名字相同,
print('2 variable=> ' , var.name) #但不不干扰
tryMultiGraphy()
输出如下:
0 variable=> Variable:0
0 variable=> Variable:0
0 variable=> Variable:0
0 variable=> Variable:0
0 variable=> Variable:0
enter a number: 1
1
2 variable=> Variable:0
enter a number: 2
10002
2 variable=> Variable:0
enter a number: 3
20003
2 variable=> Variable:0
enter a number: 4
30004
2 variable=> Variable:0
enter a number: 5
40005
2 variable=> Variable:0