编程模型
tensorflow是用数据流图做计算的。数据流图是由节点(node)和边(edge)组成的有向无环图(DAG),tensor代表了数据流图中的边,而flow代表了数据流图中节点的操作。
边
TensorFlow的边有两种连接关系:数据依赖和控制依赖。实线边表示数据依赖,虚线边表示控制依赖,可以控制操作的运行。张量再数据流图中从前往后流动一遍就完成了一次前向传播,而残差从前向后流动的一遍就完成了一次反向传播。
节点
图中节点又称算子,它代表一个操作(operation,OP),一般用来表示施加的数学运算,也可以表示数据的输入(feed in)的起点以及输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。
图
把操作任务描述成有向无环图。构建图的第一步是创建各个节点。
import tensorflow as tf
matrix1 = tf.constant([[3.,3.]])#创建一个一个常量1X2的矩阵
matrix2 = tf.constant([[2.],[2.]])#2X1的矩阵
product = tf.matmul(matrix1,matrix2)
会话
启动图的第一步是创建一个Session对象。会话(session)提供在途中执行操作的一些方法。一般模式是,建立会话,此时会生成一张空图,在会话中添加节点和边,形成一张图,然后执行。
设备
设备(device)是指一块可以用来运算并且拥有自己的地址空间的硬件,如GPU和CPU。Tensorflow可以制定操作在哪个设备上执行。
with tf.Session() as sess:
with tf.device("/gpu:1")
#这里写运算过程
变量
变量(variable)是一种特殊的数据,它在图中有固定的位置,不像普通的张量那样可以流动。创建一个变量张量,使用tf.Variable()构造函数,这个构造函数需要一个初始值,初始值的形状和类型决定了这个变量的形状和类型。
state = tf.Variable(0,name="counter")
TensorFlow还提供了填充机制,可以在构建图的时候使用,tf.placeholder()临时代替任意操作的张量,在调用Session对象的run()方法去执行图时,使用填充数据作为调用参数,调用结束后,填充数据就消失。
input1 = tf.palceholder(tf.float32)
input2 = tf.palceholder(tf.float32)
output = tf.multiply(input1,input2)
with tf.Session() as sess:
print sess.run([output],feed_dict={input1:[5.],input2:[3.]})
TensorFlow 技术解析与实战