主要介绍tensorflow的基础部分的核心概念与机制,总结tensorflow作为通用计算框架的一些知识点。主要分为张量和计算图两个部分。Tensorflow是一个通过计算图的形式来描述计算的编程系统,节点为定义的数学计算,而连接节点的边即为张量。张量在计算图中流动,进出节点完成计算,最终流到终点得到结果。
张量
张量(Tensor)是tensorflow中基础的数据结构,就像Ndarray之于Numpy一样。二者的行为特性也十分相似,都是描述多维数组,操作,类型也都有通用的地方。
常量
常量即值不可改变的张量,在计算图中不可被重新赋值。常量一般用于存储不变的数值如超参数等。初始化方法包括数据转换和直接生成:
a = tf.constant(data) # 使用constant函数,data可为python基础数据类型和ndarray
a = tf.zeros(shape)
a = tf.zeros(shape) # 直接初始化为0/1张量
a = tf.eye(x,y) # 单位矩阵
a = tf.linalg.diag(list) # 对角矩阵,list为对角线上元素
a = tf.fill(shape, data) # data为标量,填充shape大小的张量
a = tf.linspace(start, end, n) # 插值,生成长度为n的均匀分布一维张量
a = tf.range(start, end, step) # 相当于把range函数结果转换为张量
a = tf.random.uniform(shape, minval=a, maxval=b) # 均匀分布
a = tf.random.normal(shape, mean=a, stddev=b) # 正态分布
a = tf.random.shuffle(data) # 随机打乱
变量
变量即值可变的张量,一般用于存储模型中需要被训练的参数。初始化与改变变量值的方法包括:
a = tf.Variable(data) # 使用Variable函数,data可为python基础数据类型,ndarray和Tensorflow常量
a.assign_add(data) # 变量加上data,注意形状应保持一致,除非data为标量
a.assign(data) # 变量的重新赋值
张量操作
对张量的操作主要分为结构操作和数值运算
结构操作
切片索引
张量的切片索引方式和numpy中ndarray的操作几乎完全一样
t[2,4] # 索引
t[1:4, :4:2] # 切片
# tensorflow还支持不规则切片(只抽取元素而不改变原张量)
y = tf.gather(t,[a,b,c], axis=1) # 按axis抽取第a,b,c个元素组成,其他维度不变
y = tf.gather_nd(t, indices=[indice_1, indice_2, ...]) # 按坐标indice抽取元素
y