Skip to content

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),也就是一维数组
  • nn 阶张量可以理解为一个 nn 维数组

解释张量对象的含义

py
Tensor("Add:0", shape=(), dtype=float32)
  1. 第一个参数是名字(name),默认格式为 node:src 其中 src 表示来自节点的第几个输出
  2. 第二个参数是维度信息,即形状(shape),() 为空元组,表示标量
  3. 第三个参数表示类型(type),TensorFlow 要求计算的类型必须一致

1.3.2 维度

解释术语:(rank)、形状(shape)、维数(dimension number)

形状维数例子
0()004
1(a)11[2, 3, 5]
2(a, b)22[[2, 3], [3, 4]]
3(a, b, c)33[[[7], [3]], [[2], [4]]]
N(a, b, ..., x)nn
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)
5

TensorFlow 支持 14 种不同的张量

  • 实数
    • tf.float32(默认值)
    • tf.float16
  • 整数
    • tf.int8
    • tf.int16
    • tf.int32(默认值)
    • tf.int64
    • tf.uint8
  • 布尔
    • tf.bool
  • 复数
    • tf.complex64
    • tf.complex128

类型不匹配的张量会报错 ValueError

1.4 操作

一个节点就是一个操作。

  • 加法是一个操作
  • 乘法也是一个操作
  • 变量的初始化也是操作

操作的性质

  • 每个运算操作都有属性
  • 操作可以进行设备绑定,如绑定 gpu:0cpu: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/ 即可看到内容。