计算图、tensor、节点、操作、常量、变量,以及占位符
整体流程
1 计算图、tensor、节点、操作
TensorFlow是一个采用数据流图,用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。TensorFlow的核心编程可以分解为两个离散的部分:
- 构建计算图
- 执行计算图
计算图(computational graph)是一系列被安排成图(graph)中节点(node)的TensorFlow操作(操作也是节点,操作可以认为就是各种计算如加减乘除等)。每个节点都以0或多个张量作为输入,并产生一个张量作为输出。节点的一种类型就是constant。例如,下面的语句构建了一个非常简单的计算图,其中创建了两个浮点数张量node1和node2。
- node1 = tf.constant(3.0, dtype=tf.float32)
- node2 = tf.constant(4.0) # also tf.float32 implicitly
注意node1和node2是两个节点(张量),要取得它们的值就必须对它们进行evaluate,而要对node进行evaluate,我们就必须在一个session中执行计算图。一个session是对TensorFlow运行时的状态和控制所进行的封装。
2 常量、变量,以及占位符
2.1 常量:constant
- node1 = tf.constant(3.0, dtype=tf.float32)
- node2 = tf.constant(4.0) # also tf.float32 implicitly
2.2 变量:Variable
Variables允许我们向图中增加可训练的参数。构建Variables一般要指定类型和初始值,例如:
- W = tf.Variable([.3], dtype=tf.float32)
- b = tf.Variable([-.3], dtype=tf.float32)
- x = tf.placeholder(tf.float32)
- linear_model = W * x + b
Variable和constant的一个区别就在于constant在你调用tf.constant时就会被初始化,而且它们的值不会再改变。相反,在你调用tf.Variable时,Variable并不会被初始化。为了初始化你程序中的Variables,你必须显式地调用下面这个特殊的语句:
- init = tf.global_variables_initializer()
- sess.run(init)
(2)Variable和get_variable区别
W = tf.Variable(tf.constant(0.0,shape=[self.vocab_size,self.embedding_size]), trainable=False, name="W")
Variable必须明确指定初始值。
如果需要把预先的tensor值赋给刚才定义的Variable可以加上如下语句
self.embedding_init = tf.assign(W,self.embedding_placeholder)
W = tf.get_variable("W",[vocab_size,embedding_size],trainable=False)
不同于tf.Variable那样直接传值,tf.get_variable()用initializer来创建变量。一个initializer 就是一个函数,
创建一个形状是shape的张量。
Variable和get_variable中trainable参数都表示该变量是否是随着模型不断迭代。
2.3 占位符:placeholders
一个计算图还可以通过接受外部输入的方法来进行参数化,这被称为placeholders(占位符),一个placeholder可以理解为一种承诺,即后面会提供数值。例如:
- a = tf.placeholder(tf.float32)
- b = tf.placeholder(tf.float32)
- adder_node = a + b # + provides a shortcut for tf.add(a, b)
然后就像函数调用一样,当我们evaluate这个图的时候,就要为placeholders提供输入值( 也就是最后执行计算图的时候需要把数据feed进去 ):
- print(sess.run(adder_node, {a: 3, b: 4.5}))
- print(sess.run(adder_node, {a: [1, 3], b: [2, 4]}))
参考:
http://blog.csdn.net/baimafujinji/article/details/78048858