- 什么是TensorFlow?
- TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。
- “数据流图”用“节点”和“线”的有向图来描述数学计算。
- “节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。
- “线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。
- TensorFlow基本用法
- 使用图来表示计算任务,图中的节点表示操作,被称之为 op (operation).
- 为了进行计算, 图必须在会话Session里被启动.
- 会话将图的 op 分发到 CPU 或 GPU 上, 同时提供执行 op 的方法. 这些方法执行后, 将产生的 tensor 返回. 在 Python 语言中, 返回的 tensor 是 numpy ndarray 对象; 在 C 和 C++ 语言中, 返回的 tensor 是 tensorflow::Tensor 实例.
- 使用tensor表示数据(类型化的多维数组). 例如, 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels].
- 通过变量Variable维护状态.
- 使用feed和fetch可以为任意的操作赋值或者从其中获取数据.
- TensorFlow 程序由一个构建阶段和一个执行阶段组成,将定义运算与执行运算分离开来,先举个例子:
执行下面并不会输出10,而是输出tensor相关信息
import tensorflow as tf
a = tf.constant(10)
print(a)
# ==>Tensor("Const_16:0", shape=(), dtype=int32)
需要创建一个session,然后在session计算图,取出a的值
import tensorflow as tf
a = tf.constant(10)
sess = tf.Session()
sess.run(a)
# ==>10
1)阶段1——构建阶段:创建一张图,定义好图中的运算
- TensorFlow Python 库有一个默认图 (default graph),常用,举例:
import tensorflow as tf
# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点加到默认图中.
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])
# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])
# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)
图中现在有三个节点, 两个 constant() op 和一个matmul() op. 为了真正进行矩阵相乘运算, 并得到矩阵乘法的 结果,
你必须在会话里启动这个图.
2)阶段2——执行阶段:使用session去执行图中的运算
- 调用 sess 的 ‘run()’ 方法来执行矩阵乘法 op, 传入 ‘product’ 作为该方法的参数.
- ‘product’ 代表了矩阵乘法op的输出, 传入它是向方法表明, 我们希望取回矩阵乘法op的输出.
- 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
- 函数调用 ‘run(product)’ 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
- 返回值 ‘result’ 是一个 numpy
ndarray
对象.
# 启动默认图.
sess = tf.Session()
result = sess.run(product)
print(result)
# ==> [[ 12.]]
# 任务完成, 关闭会话.
sess.close()
- Session对象在使用完后需要关闭以释放资源. 除了显式调用 close 外, 也可以使用 “with” 代码块 来自动完成关闭动作.
# 等价的表述方式
with tf.Session() as sess:
result = sess.run(product)
print(result)
# 输出多个 tensor 值
with tf.Session() as sess:
result = sess.run([product, matrix1, matrix2])
print(result)
# ==> [array([[12.]], dtype=float32), array([[3., 3.]], dtype=float32), array([[2.], [2.]], dtype=float32)]