Tensorflow 中计算图Graph,会话Session,变量和操作的关系

计算图描述一个问题的解决方案,包含变量/占位符(统称张量,数据节点)、操作(运算节点),程序开始运行时会有一个缺省的计算图来收纳这些节点,也可以通过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

 

你可能感兴趣的:(tensorflow,python)