TensorFlow 的计算模型、数据模型和运行模型

TensorFlow 读书笔记之一

TensorFlow 的计算模型、数据模型和运行模型

(1)计算模型-计算图

在 TensorFlow 中,张量(Tensor)可以被简单地理解为多维数组。如果说 TensorFlow 的第一个词 Tensor 表明了它的数据结构,那么 Flow 则体现了它的计算模型。Flow 翻译成中文是“流”,它直观地表达了张量之间通过计算相互转化的过程。 TensorFlow 是一个通过计算图的形式来表述计算的编程系统 。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)

输出结果:

TensorFlow 的计算模型、数据模型和运行模型

上述输出结果中,可以看到3个操作,分别是value1、value2和add_op_name。

还可以借助TensorBoard工具来可视化这些运算操作,以及运算操作之间的依赖。

上述代码将图结构写入到 calc_graph 文件夹中,在命令行执行如下命令:

tensorboard --logdir=./calc_graph

TensorFlow 的计算模型、数据模型和运行模型

然后在浏览器中访问:http://localhost:6006,就会看到图结构示意图。

TensorFlow 的计算模型、数据模型和运行模型

(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

相关推荐