TensorFlow 的计算模型—计算图
TensorFlow 中的所有计算都会转化成计算图上的节点。
概念
1、Tensor:张量。——>多维数组
2、Flow:流。——>直观的表达张量之间通过计算相互转化的过程。
3、TensorFlow 是通过计算图的形式来表述计算的编程系统。
4、TensorFlow 的节点:表示一个计算。
5、TensorFlow 的边:表示计算之间的依赖关系。
使用
TensorFlow 的程序分为两个阶段:
- 第一个阶段 :定义计算图中所有的计算
- 第一个阶段 :执行计算
TensorFlow 的数据模型—张量
张量是 TensorFlow 中管理数据的形式。
概念
1、零阶张量:一个数,标量(scalar)。
2、第一阶张量:一个一维数组,向量(vector)。
3、第 n 阶张量:一个 n 维数组。
但是张量在 TensorFlow 中的实现不是直接采用数组形式, 而只是对TensorFlow 中计算结果的引用。
张量中并没有保存数,而是保存如何得到这些数字的计算过程。即是一个引用。
import tensorflow as tf;
# tf.constant 是一个计算,这个计算结果是一个张量,保存在变量 a 中
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([3.0,4.0],name="b")
result = tf.add(a,b,name="add")
print result
# 打印出来的结果是:
# Tensor("add:0", shape=(2,), dtype=float32)
一个张量结构:
名字 维度 类型
Tensor(name, shape, type)
- 名字 (name —>
node:src_output
):是一个张量的唯一标识符,并且也给出这个张量是如何计算出的。node
是节点的名称,src_output
表示当前张量是节点的第几个输出。 - 维度 (shape):描述一个张量的维度信息。
shape=(2,)
说明张量是一个一维数组,数组长度为 2。 - 类型 (type):每个张量会有一个唯一的类型。参与运算的张量如果类型不匹配则会报错。
TensorFlow 有 14 中类型:
实数 (tf.float32
、tf.float64
)
整数 (tf.int8
、tf.int16
、tf.int32
、tf.int64
、tf.uint8
)
布尔型 (tf.bool
)
复数 (tf.complex64
、tf.complex128
)
使用
张量使用主要总结为两大类:
- 第一类用途:使用张量记录并存储中间计算结果,
a = tf.constant([1.0,2.0],name="a")
。 - 第二类用途:当计算图构造完成之后,可以用来获取计算结果并得到真实数字。
tf.Session().run(result)
。
TensorFlow 运行模型— 会话
1、使用**会话(session)**执行定义好的计算。
2、当所有计算完成之后需要关闭会话来使系统回收资源,不然可能会出现资源泄露。
使用
TensorFlow 中使用会话的模式一般有两种:
1、第一种模式:需要明确调用会话生成函数
和关闭会话函数
。代码流程如下:
# 创建一个会话
sess = tf.Session();
# 使用这个创建好的会话来得到想要得到的运算的结果。
sess.run(...);
# 关闭会话释放资源
sess.close();
2、第二种模式:当程序因为异常退出时,sess.close()
可能不会被执行而导致资源泄漏。为了解决异常退出时资源释放的问题,TensorFlow 可以使用 Python 的上下文管理器来使用会话。代码流程如下:
# 创建一个会话并通过 Python 上下文管理器来管理这个会话
with tf.Session() as sess:
# 使用这个创建好的会话来计算想要的结果
sess.run(...);
# 不需要再调用 Session.close() 函数来关闭会话
# 当上下文退出时会话关闭和释放资源会自动完成。