基本使用
使用 TensorFlow, 你必须明白 TensorFlow:
- 使用图 (graph) 来表示计算任务.
- 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
- 使用 tensor 表示数据.
- 通过 变量 (Variable) 维护状态.
- 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.
计算图
TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤 被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op.
例如, 通常在构建阶段创建一个图来表示和训练神经网络, 然后在执行阶段反复执行图中的训练 op.
TensorFlow 支持 C, C++, Python 编程语言. 目前, TensorFlow 的 Python 库更加易用, 它提供了大量的辅助函数来简化构建图的工作, 这些函数尚未被 C 和 C++ 库支持.
三种语言的会话库 (session libraries) 是一致的.
构建图
构建图的第一步, 是创建源 op (source op). 源 op 不需要任何输入, 例如 常量 (Constant). 源 op 的输出被传递给其它 op 做运算.
Python 库中, op 构造器的返回值代表被构造出的 op 的输出, 这些返回值可以传递给其它 op 构造器作为输入.
TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点. 这个默认图对 许多程序来说已经足够用了. 阅读 Graph 类 文档 来了解如何管理多个图.
示例
# 导入tensorflow模块
import tensorflow as tf
# constant表示常量op
# 定义一个一行两列的矩阵
m1 = tf.constant([[3, 3]])
# 创建一个两行一列的矩阵,也是一个常量的op
m2 = tf.constant([[2], [3]])
# 创建一个矩阵乘法的op,将m1与m2传入
product = tf.matmul(m1, m2)
print(product)
Tensor("MatMul:0", shape=(1, 1), dtype=int32)
可以看出,输出的结果与在python中的计算结果是不一样的
这里的product是一个Tensor
# 定义一个会话,启动默认的图
sess = tf.Session()
# 调用sess的run方法,来调用乘法op,之后依次触发了图中的3个op
result = sess.run(product)
# 使用完会话以后要记得关闭
sess.close()
print(result)
[[15]]
可以看出,当调用了sess.run()后,才会执行相关联的op,最终得出一个输出结果
一个简洁的定义会话的方式
with tf.Session() as sess:
result = sess.run(product)
print(result)
[[15]]
关键字with后面定义一个对象,将下面的代码块运行完后,将释放该对象,也就是将Session自动关闭