TensorFlow 的计算模型、数据模型和运行模型
TensorFlow 读书笔记之一
TensorFlow 的计算模型、数据模型和运行模型
(1)计算模型-计算图
在 TensorFlow 中,张量(Tensor)可以被简单地理解为多维数组。如果说 TensorFlow 的第一个词 Tensor 表明了它的数据结构,那么 Flow 则体现了它的计算模型。Flow 翻译成中文是“流”,它直观地表达了张量之间通过计算相互转化的过程。 TensorFlow 是一个通过计算图的形式来表述计算的编程系统 。TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
如果一个运算的输入依赖于另 一个运算的输出,那么这两个运算有依赖关系。
上图是TensorFlow构建的一个计算图。所有 TensorFlow 的程序都可以通过类似上图所示的计算图的形式来表示,这就是 TensorFlow 的基本计算模型。
TensorFlow程序一般分为两个阶段:
- 定义计算图所有的计算;
- 在session中执行计算;
在TensorFlow程序中,系统会自动维护一个默认的计算图,可以通过tf.get_default_graph()函数获取。
import tensorflow as tf
v1 = tf.constant(1, name="value1")
v2 = tf.constant(2, name="value2")
add_op = tf.add(v1, v2, name="add_op_name")
print(v1)
# 设置写入的文件夹
summary_writer = tf.summary.FileWriter("./calc_graph")
# 获取默认的图
graph = tf.get_default_graph()
summary_writer.add_graph(graph)
# 将图结构写入文件
summary_writer.flush()
# 获取图中的所有操作
operations = graph.get_operations()
print("运算操作:%d" % len(operations))
print("operations:")
for op in operations:
print(op)
输出结果:
上述输出结果中,可以看到3个操作,分别是value1、value2和add_op_name。
还可以借助TensorBoard工具来可视化这些运算操作,以及运算操作之间的依赖。
上述代码将图结构写入到 calc_graph 文件夹中,在命令行执行如下命令:
tensorboard --logdir=./calc_graph
然后在浏览器中访问:http://localhost:6006,就会看到图结构示意图。
(2)数据模型-张量
张量是 TensorFlow 管理数据的形式。
TensorFlow 中最基本的单位是常量(Constant)、变量(Variable)和占位符(Placeholder)。常量定义后值和维度不可变,变量定义后值可变而维度不可变。在神经网络中,变量一般可作为储存权重和其他信息的矩阵,而常量可作为储存超参数或其他结构信息的变量。
在TensorFlow中,所有的数据都通过张量的形式来表示。
- 零阶张量表示标量(scalar),也就是一个数;
- 第一阶张量为向量(vector),也就是一个一维数组;
- 第n阶张量可以理解为一个n为数组;
但是张量在TensorFlow中并不是直接采用数组的形式,它只是对TensorFlow 中运算结果的引用。
import tensorflow as tf
v1 = tf.constant(1, name="value1")
v2 = tf.constant(2, name="value2")
add_op = tf.add(v1, v2, name="add_op_name")
print(v1)
输出结果:Tensor("value1:0", shape=(), dtype=int32)
一个张量中主要保存了3个属性:
- 名字(name);
- 维度(shape);
- 类型(type);
(3)执行模型-会话(Session)
使用TensorFlow 中的会话(session)来执行定义好的运算。会话拥有并管理TensorFlow 程序运行时的所有资源。所有计算完成之后,都需要关闭会话来帮助系统回收资源,否则就可能出现资源泄漏的问题。
# 在会话中执行操作
with tf.Session() as sess:
# 执行运算
result = sess.run(add_op)
print("result=%.0f" % result)
完整代码可以访问:
https://notebooks.azure.com/rickiechina/projects/tensorflowtutorial/html/Simple.ipynb