1. TensorFlow 基础概念
2021-11-09- 孙振兴
1.1 Hello World
py
import tensorflow
# 使用 tf 版本 1.x
tf = tensorflow.compat.v1
tf.disable_v2_behavior()
# 创建常量
hello = tf.constant("Hello World!")
# 创建对话
sess = tf.Session()
# 输出结果
print(sess.run(hello))py
b'Hello World!'1.2 计算图
Tensor 张量,Flow 流,计算图是 TensorFlow 的工作方式,计算流图。
计算图是一个有向图
- 节点:代表一个操作或者运算
- 有向边:边代表数据之间的关系
- 常规边(实线边):数据依赖关系,两个节点有值传递
- 特殊边(虚线边):两个节点的控制相关性
py
# 定义一个简单的计算图
node1 = tf.constant(3.0, tf.float32, name='node1')
node2 = tf.constant(4.0, tf.float32, name='node2')
node3 = tf.add(node1, node2)
# 输出 node3 的信息
print(node3)
# 创建对话
sess = tf.Session()
# 输出结果
print(sess.run(node3))
# 关闭对话
sess.close()py
Tensor("Add:0", shape=(), dtype=float32)
7.0计算图如下
1.3 张量
1.3.1 张量的含义
Tensor 张量可以理解为多维数组,
- 零阶张量表示标量(scaler),也就是一个数
- 一阶张量表示向量(vector),也就是一维数组
- 阶张量可以理解为一个 维数组
解释张量对象的含义
py
Tensor("Add:0", shape=(), dtype=float32)- 第一个参数是名字(name),默认格式为
node:src其中src表示来自节点的第几个输出 - 第二个参数是维度信息,即形状(shape),
()为空元组,表示标量 - 第三个参数表示类型(type),TensorFlow 要求计算的类型必须一致
1.3.2 维度
解释术语:阶(rank)、形状(shape)、维数(dimension number)
| 阶 | 形状 | 维数 | 例子 |
|---|---|---|---|
0 | () | 4 | |
1 | (a) | [2, 3, 5] | |
2 | (a, b) | [[2, 3], [3, 4]] | |
3 | (a, b, c) | [[[7], [3]], [[2], [4]]] | |
N | (a, b, ..., x) |
py
tens1 = tf.constant([[[1, 2, 2], [2, 2, 3]],
[[3, 5, 6], [5, 4, 3]],
[[7, 0, 1], [9, 1, 9]],
[[11, 12, 7], [1, 3, 14]]],
name='tens1')
print(tens1)py
Tensor("tens1:0", shape=(4, 2, 3), dtype=int32)这个张量的形状是 (4, 2, 3)。
- 获取张量的形状
tensor.get_shape() - 获取张量的值
tensor[i, j, k]
py
print(tens1.get_shape())
sess = tf.Session()
print(sess.run(tens1)[1, 1, 0])
sess.close()py
(4, 2, 3)
5TensorFlow 支持 14 种不同的张量
- 实数
tf.float32(默认值)tf.float16
- 整数
tf.int8tf.int16tf.int32(默认值)tf.int64tf.uint8
- 布尔
tf.bool
- 复数
tf.complex64tf.complex128
类型不匹配的张量会报错 ValueError。
1.4 操作
一个节点就是一个操作。
- 加法是一个操作
- 乘法也是一个操作
- 变量的初始化也是操作
操作的性质
- 每个运算操作都有属性
- 操作可以进行设备绑定,如绑定
gpu:0或cpu:1
使用 TensorBoard 查看计算流图
py
tf.reset_default_graph()
a = tf.Variable(1, name='a')
b = tf.add(a, 1, name='b')
c = tf.multiply(b, 4, name='c')
d = tf.subtract(c, b, name='d')
logdir = './'
writer = tf.summary.FileWriter(logdir, tf.get_default_graph())
writer.close()运行后,在 VS Code 中使用命令(Ctrl+Shift+P),输入 TensorBoard,选择当前目录即可,如果你安装了完整的 Python 扩展,会自动打开计算流图界面。
或者运行后打开浏览器,输入地址 http://localhost:6006/ 即可看到内容。
