三、Flow?介绍图和节点
我们将Flow翻译成中文:流,所以现在是Tensor流?
其实,在TensorFlow中,使用图 (graph) 来表示计算任务。其实TensorFlow默认会给我们一张空白的图,一般我们会叫这个为”数据流图“。数据流图由有向边和节点组成,在使用TensorFlow的时候我们会在图中创建各种的节点,而Tensor会在这些节点中流通。所以,就叫做TensorFlow
那有人就会好奇,我们执行什么操作会创建节点呢?在TensorFlow中,节点的类型可以分为三种:
- 存储节点:有状态的变量操作,通常用于存储模型参数
- 计算节点:无状态的计算和控制操作,主要负责算法的逻辑或流程的控制
- 数据节点:数据的占位符操作,用于描述图外输入的数据
看到这里的同学,可能就反应过来了:原来在上面创建的变量、常量和占位符在TensorFlow中都会生成一个节点!对于这类的操作Operation(行为)一般大家会简说成op
所以,op就是在TensorFlow中所执行的一个操作统称而已(有可能是创建变量的操作、也有可能是计算的操作)。在TensorFlow的常见的op有以下:
Tensorflow常见的op
其实说白了就是TensorFlow会给我们一张空白的数据流图,我们往这张数据流图填充(创建节点),从而实现想要效果。
- 开局一张图,内容全靠编!
数据流图的组成
我们来看看官方的给出数据流图的gif,加深下印象。
- TensorFlow使用数据流图来表示计算任务
- TensorFlow使用Tensor来表示数据,Tensor在数据流图中流动。
- 在TensorFlow中”创建节点、运算“等行为统称为op
数据流图
四、啥是session?
TensorFlow程序通常被组织成一个构建阶段和执行阶段. 在构建阶段, op的执行步骤被描述成一个图. 在执行阶段, 使用会话执行执行图中的op。
- 注意:因为是有向边,所以只有等到之前的入度节点们的计算状态完成后,当前节点才能执行操作。
说白了,就是当我们在编写代码的时候,实际上就是在将TensorFlow给我们的空白图描述成一张我们想要的图。但我们想要运行出图的结果,那就必须通过session来执行。
举个小例子:
import tensorflow as tf # 创建数据流图:y = W * x + b,其中W和b为存储节点,x为数据节点。 x = tf.placeholder(tf.float32) W = tf.Variable(1.0) b = tf.Variable(1.0) y = W * x + b # =========如果不使用session来运行,那上面的代码只是一张图。我们通过session运行这张图,得到想要的结果 with tf.Session() as sess: tf.global_variables_initializer().run() # Operation.run fetch = y.eval(feed_dict={x: 3.0}) # Tensor.eval print(fetch) # fetch = 1.0 * 3.0 + 1.0
4.1 Fetch是啥?
Fetch就时候可以在session.run
的时候传入多个op(tensor),然后返回多个tensor(如果只传入一个tensor的话,那就是返回一个tensor)
4.2tensor.eval()和Operation.run()
有的同学在查阅资料的时候,发现可能调用的不是session.run
,而是tensor.eval()和Operation.run()
。其实,他们最后的调用的还是session.run
。不同的是session.run
可以一次返回多个tensor(通过Fetch)。
最后实际还是掉session.run
最后
曾经看到一段话总结得不错:
- 使用 tensor 表示数据.
- 使用图 (graph) 来表示计算任务.
- 在会话(session)中运行图
- 通过
变量 (Variable)
维护状态.
TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个
Tensor
, 执行计算, 产生 0 个或多个Tensor
. 每个 Tensor 是一个类型化的多维数组.
这篇文章简单讲了TensorFlow是啥意思以及一些基础的概念。但我也只是简单以我的理解方式来说了一些常见概念。里头的知识点还是比较多的(比如创建变量的时候一般我们会指定哪些参数….),这些就交由大家去官网、博客、书籍去学习了。
我相信,只要了解了这些概念,那学习一定可以事半功倍!