tensorflow 基本概念回顾
https://zhuanlan.zhihu.com/p/46881906
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。2015年它由Google发布并宣布开源。
它的名字来源于本身的工作原理,Tensor(张量)意味着一个N维的数组,Flow(流)就是流动。Tensorflow的运行过程就是张量在数据流图中流动的过程。
那么,什么是数据流图(Data Flow Graph)?
它由点(node)和边(edge)组成。
其中,节点通常以圆、椭圆或方框表示,代表对数据的运算或某种操作。边是节点之间的连接,用带箭头的线表示,指向节点的边表示输入,从节点引出的边表示输出。输入可以是来自其他数据流图,也可以表示文件读取、用户输入。所以在本质上,TensorFlow的数据流图就是一系列链接在一起的函数构成,每个函数都会输出若干个值(0个或多个),以供其它函数使用。
除了上面两个概念,以下几个也很重要:
图(Graph):图描述了计算的过程,TensorFlow使用图来表示计算任务。
张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor就是一个多维的数组。
操作(op):operation的缩写,一个op就是某节点上的一个操作,输入0个或多个Tensor,执行计算,产生输出0个或多个Tensor。
会话(Session):图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或GPU之类的设备上执行。
变量(Variable):运行过程中可以被改变,用于维护状态。
import tensorflow as tf # 创建两个常量节点 node1 = tf.constant("hello") node2 = tf.constant("world") # 创建一个 node3 节点,对上面两个节点执行 + 操作 node3 = node1 + node2 # 打印一下 adder 节点 print(node3) # 打印 adder 运行后的结果 sess = tf.Session() print(sess.run(node3))
输出:
Tensor("add:0", shape=(), dtype=string)
b'helloworld'
结合上面的代码,现在我们总结一下TensorFlow的工作流程:
(1)构建一个计算图,并初始化一些节点,比如我们的node1和node2。这个时候,并没有开始计算。
(2)创建一个会话。这才是图计算开始的地方,也就是说,仅仅构建一个图,这些图不会自动执行计算操作,而是还要显式提交到一个会话去执行,也就是说,它的执行,是滞后的。
(3)在会话中运行图的计算。把编译通过的合法计算流图传递给会话,这时张量(tensor)才真正“流动(flow)”起来。
(4)关闭会话。当整个图无需再计算时,则关闭会话,以回收系统资源。