1.计算图的概念
tensorflow中的所有计算都会转化为计算图中的节点
tensor就是张量(即多维数组),flow就是“流”(计算模型:张量之间的计算)
tensorflow的每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的依赖关系。
注:如果一个运算的输入依赖另一个运算的输出,那么这两个运算有依赖关系。
2.计算图的使用
tensorflow程序分两个阶段:
第一阶段:定义计算图中所有的计算;
第二阶段:执行计算。
在tensorflow程序中,系统会维护一个默认的计算图,通过tf.get_default_graph函数可以获取当前默认生物计算图。
注:使用a.graph可以查看张量所属的计算图
除了使用默认的计算图,tensorflow支持通过tf.Graph函数生成新的计算图。
注:不同计算图上的张量和计算都不会共享。
示例:
import tensorflow as tf
g1 = tf.Graph()
with g1.as_default():
#在计算图g1中定义变量“v”,并设置初始值为0
v = tf.get_variable("v",initializer=tf.zeros_initializer()(shape=[1]))
g2 = tf.Graph()
with g2.as_default():
#在计算图g2中定义变量“v”,并设置初始值为1
v = tf.get_variable("v",initializer=tf.ones_initializer()(shape=[1]))
#在计算图g1中读取变量“v”的值
with tf.Session(graph=g1) as sess:
tf.initialize_all_variables().run()
with tf.variable_scope("",reuse=True):
#v的取值为0,输出应为[0.]
print (sess.run(tf.get_variable("v")))
#在计算图g2中读取变量“v”的值
with tf.Session(graph=g2) as sess:
tf.initialize_all_variables().run()
with tf.variable_scope("",reuse=True):
#v的取值为1,输出应为[1.]
print (sess.run(tf.get_variable("v")))
计算图通过tf.Graph.device函数可以指定运行计算的设备
g = tf.Graph()
#指定运行计算的设备
with g.device('/gpu:0'):
result = a + b
在一个计算图中,可以通过集合(collection)来管理不同类别的资源。
通过tf.add_to_collection函数可以将资源加入一个或多个集合中,然后通过tf.get_collection获取一个集合里所有的资源。
注:这里的资源可以是张量、变量或者运行tensorflow程序所需要的队列资源等等。