1.tensorflow的概念
TensorFlow=Tensor + Flow
Tensor(张量)
- 数据结构:多维数组
Flow(流) - 计算模型:张量之间通过计算而转换的过程
TensorFlow是一个通过计算图的形式表述计算的编程系统,每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的关系
2.计算图(数据流图)的概念
计算图是一个有向图,由以下内容构成: - 一组节点,每个节点都代表一个操作,一种运算
- 一组有向边,每条边打标节点之间的关系(数据传递和控制依赖)
TensorFlow有两种边: - 常规边(实线):代表数据依赖关系。一个节点的运算输出成为另一个节点的输入,两个节点之间有tensor流动(值传递)
- 特殊边(虚线):不携带值,表示两个节点之间的控制相关性。比如,happens-before关系,源节点必须在目的节点执行前完成执行
数据流图优势:
(1)并行计算快
(2)分布式计算快
(3)预编译优化(XLA)
(4)可移植性好
一个简单的计算图
生成的计算图如下:
3.张量的概念
在TensorFlow中,所有的数据都通过张量的形式来表示 - 从功能的角度,张量可以简单理解为多维数组
零阶张量表示标量(scalar),也就是一个数;
一阶张量为向量(vector),也就是一维数组;
n阶张量可以理解为一个n维数组; - 张量并没有真正保存数字,它保存的是计算过程
张量的属性
名字(name):
“node:srv_output”:node 节点名称,src_output 来自节点的第几个输出
形状(shape):
张量的维度信息,shape=(),表示是标量
类型(type):
每一个张量会有一个唯一的类型
TensorFlow会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错张量的形状
三个术语描述张量的维度:阶(rank)、形状(shape)、维数(dimension number)
张量的阶
张量的阶(rank)表示了张量的维度
获取张量的元素
阶为1的张量等价于向量;
阶为2的张量等价于矩阵,通过t[i,j]获取元素;
阶为3的张量,通过t[i,j,k]获取元素
注意:下标从0开始
张量的类型
TensorFlow支持14种不同的类型
实数 tf.float32,tf.float64
整数 tf.int8,tf.int16,tf.int32,tf.int64,tf.uint8
布尔 tf.bool
复数 tf.complex64,tf.complex128
默认类型:
不带小数点的数会被默认为int32
带小数点的会被默认为float32
4.操作
- 计算机中的节点就是操作(Operation)
一次加法是一个操作
一次乘法也是一个操作
构建一些变量的初始值也是一个操作 - 每个运算操作都有属性,它在构建图的时候需要确定下来
- 操作可以和计算设备绑定,指定操作在某个设备上执行
- 操作之间存在顺序关系,这些操作之间的依赖就是“边”
- 如果操作A的输入是操作B执行的结果,那么这个操作A就依赖于操作B
在使用tensorflow搭建深度模型基本步骤包括:
定义tensorflow输入节点
定义学习的参数变量
定义运算
优化函数及优化目标
初始化所有变量
迭代更新参数
测试模型
使用模型