TensorFlow 入门
TensorFlow 计算模型一一计算图
计算图的概念
-
计算图是 TensorFlow 中最基本的一个概念, TensorFlow 中的所有计算都会被转化为计算图上的节点 。
-
Tensor 就是张量,在 TensorFlow 中,张量可以被简单地理解为多维数组。
-
Flow 就是“流”,它直观地表达了张量之间通过计算相互转化的过程。
-
TensorFlow 是一个通过计算图的形式来表述计算的编程系统,TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
-
如果一个运算的输入依赖于另 一个运算的输出,那么这两个运算有依赖关系。
计算图的使用
-
TensorFlow 程序一般可以分为两个阶段。在第一个阶段需要定义计算图中所有的计算,第二个阶段为执行计算。
# 在Python中一般会采用“ impot tensorflow as tf”的形式来载入TensorFlow, # 这样可以使用“tf”来代替“tensorflow”作为模块名称,使得整个程序更加简洁。 import tensorflow as tf a = tf.constant([1.0, 2.0], name = "a") b = tf.constant([2.0, 3.0], name = "b") result = a + b
-
在这个过程中,TensorFlow 会自动将定义的计算转化为计算图上的节点 。在 TensorFlow 程序中,系统会自动维护一个默认的计算图,通过tf.get_default_graph 函数可以获取当前默认的计算图。
# 通过a.graph可以查看张量所属的计算圈。 # 因为没有特意指定,所以这个计算图应该等于当前默认的计算圈。 # 所以下面这个操作输出值为True。 print(a.graph is tf.get_default_graph())
-
除了使用默认的计算图,TensorFlow 支持通过 tf.Graph 函数来生成新的计算图,不同计算图上的张量和运算都不会共享。
# 如何在不同计算图上定义和使用变量。 g1 = tf.Graph() with g1.as_default(): # 在计算图gl中定义变量“v”,并设置初始值为0。 # 注意tf.zeros_initializer后面需要跟一个(),否则会报错,这是新版python的特性。 v = tf.get_variable("v", initializer=tf.zeros_initializer()(shape=[1])) g2 = tf.Graph() with g2.as_default(): # 在计算图gl中定义变量“v”,并设置初始值为1。 # 注意tf.ones_initializer后面需要跟一个(),否则会报错,这是新版python的特性。 v = tf.get_variable("v", initializer=tf.ones_initializer()(shape=[1])) # 在计算图gl中读取变量“v”的取值。 with tf.Session(graph=g1) as sess: tf.global_variables_initializer().run() with tf.variable_scope("", reuse=True): # 在计算图gl中,变量“v”的取值应该为0,所以下面这行会输出[0.]。 print(sess.run(tf.get_variable("v"))) # 在计算图g2中读取变量“v”的取值。 with tf.Session(graph=g2) as sess: tf.global_variables_initializer().run() with tf.variable_scope("", reuse=True): # 在计算图g2中,变量“v”的取值应该为1,所以下面这行会输出[1.]。 print(sess.run(tf.get_variable("v")))
-
TensorFlow 中的计算图不仅仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。计算图可以通过 tf.Graph.device 函数来指定运行计算的设备,这为 TensorFlow 使用 GPU 提供了机制。
-
在一个计算图中,可以通过集合(collection)来管理不同类别的资源。
- 比如通过 tf.add_to_collection 函数可以将资源加入一个或多个集合中,然后通过tf.get_collection 获取一个集合里面的所有资源。
- 这里的资源可以是张量、变量或者运行TensorFlow 程序所需要的队列资源等等。
-
TensorFlow中维护的集合列表