TensorFlow(二) 基本用法
一. 概述
1. 使用图(graph)来表示计算任务
2. 在被称为会话(session)の上下文中执行图
3. 使用张量(tensor)表示数据
4. 使用变量(variable)维护状态
5. 使用 feed 和 fetch 为任意的操作赋值或从中获取数据
TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为 op (operation
的缩写). 一个 op 获得 0 个或多个Tensor , 执行计算, 产生 0 个或多个 Tensor
.
每个 Tensor 是一个类型化的多维数组 . 例如 , 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels]
.
TensorFlow 图是一个计算的过程の描述。为了进行计算,图必须在会话里被启动。会话将图的 op 分发到诸如 CPU 或 GPU 之类の设备上,同时提供执行 op 的方法。这些方法执行后,将产生的 Tensor 返回. 在 Python 语言中,返回的 Tensor 是 numpy 的 ndarry 对象,在 C 和 C++ 语言中, 返回的 Tensor 是 tensorflow::Tensor 实例。
二. 综述
构建图和执行图
TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段。在构建阶段, op的执行步骤 被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op.
例如, 通常在构建阶段创建一个图来表示和训练神经网络, 然后在执行阶段反复执行图中的训练 op.
import tensorflow as tf
# 构建阶段
state = tf.Variable(1, name="counter")
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
init_op = tf.initialize_all_variables()
# 执行阶段
with tf.Session() as sess:
sess.run(init_op) # 启动图时候,变量必须先经过初始化
print sess.run(state)
for _ in range(3):
sess.run(update)
print sess.run(state)
输出: 1 2 3 4
代码中 assign() 操作是图所描绘的表达式的一部分,同 add() 一样,再调用 run() 执行表达式之前,并不会真正执行赋值操作。
扩展到神经网络,可以将一个神经网络的权重作为某个变量存储在一个 Tensor 中,在训练过程中,通过重复运行训练图,更新这个 Tensor .
三. 一些特点
1. 高效:
为了用 python 实现高效的数值计算,通常用函数库,比如Numpy函数库会把类似矩阵乘法这样的复杂运算使用其他外部语言来实现
(Numpy 是用 C 实现的一个用于数字和矩阵计算的函数库),但是从外部计算切换回 Python 的每一个操作,仍然是一个很大的开销,如果用 GPU or/and 分布式来进行外部运算,这样的开销会更大 。
TensorFlow 为了避免上述的开销,不单独进行单一的复杂计算, 而是让我们先用图描述一系列可交互的计算操作,然后一起在python之外运行。
上一篇: tkMybatis基本用法(二)
下一篇: Aop(二)基本用法