1 理解tensorflow编程的思想
tensorflow的编程要按照一定规则来进行。
在tensorflow程序中应包含两个部分:一个是构建计算图的部分,另一个是把建好的计算图放在一个Sesstion会话中的执行部分。
构建计算图:这是定义变量、初始化数据 及 建立运算关系的一个过程。tensorflow把这样一个过程称为构建计算图。计算图(Graph)由节点(operation)和边(Tensor、Variable)组成。其中节点是各种operation操作,比如程序中的矩阵乘法
tf.matmul
,边是运算数据或变量,在tensorflow中称为tensor。举个例子:比如我们要编写tf程序实现y=w*x,那么我首先要构建一个图,这个图只包括一个节点,就是矩阵乘法操作,然后输入有两个边分别是x和w,如下面的图所示。把计算图放到一个Sesstion中执行:构建好图(Graph)之后,要先将这个graph添加到一个在会话
tf.session
里面,并使用tf.Session().run()方法
运行计算图.
首先给一个hello world的tensorflow程序:实现矩阵乘法 y = W*x,其中
w = [[3.0,2.5],[1.0,2.7]];
x = [1.0,1.0]
程序如下:
import tensorflow as tf
###-----必须先构建计算图(y=w*x)---------###
graph1 = tf.Graph() #定义图graph1
with graph1.as_default(): #指定图 graph1为默认图
w = tf.Variable([[3.0,2.5],[1.0,2.7]]) #图中边Variabel的定义
x = tf.constant(1.0,shape=[1,2]) #图中边x_tensor的生成
y = tf.matmul(w,tf.transpose(x)) #节点:变量的乘法和转置操作(operation)
init_op = tf.global_variables_initializer() #节点: Variable的initialize_operation
###------建好的计算图放在一个Sesstion中执行-------###
with tf.Session(graph=graph1) as sess: # 打开Session,把graph1添加到默认会话sess中
sess.run(init_op) # 执行init_op操作,此时tf.matmul并没有run
print(sess.run(y)) # 在会话中执行tf.matmul操作, 打印y_tensor,
整个程序的过程可由下图说明:
注:
- tensor:可以理解为一个多维数组,是tensor中的数据形式,类似于numpy 中的 narray,例如下图我们输入数据集X,以及输出y。具体可以查看 tensor张量、tensor的属性.
- Operation::比如矩阵乘法操作
- 必须注意的是,构建好的图,必须在会话Session中使用run()方法,才能实现tensor运算。
2 总结
- Tensorflow程序是以计算图Graph为基础的计算单元,并且计算图需要在一个指定的会话Sesstion中执行。
一个计算图(Graph)由操作(operation)构成的节点以及tensor数据流/variable变量数据构成的边组成。换句话说,图中的节点(圆圈)就是一些操作(Operation),比如加、减、乘、除等等。而节点之间的边就是张量流(Tensor-flow)或变量Variable。
计算图必须被放进一个会话Sesstion里面,并使用Sesstion的run方法执行计算图的某个operation,这个operation才会被执行。而其他没有被run的operation,仍然不会被执行。