TF中常见方法汇总
注:整理自《TensorFlow 深度学习》(龙龙老师)一书,侵删
-
tf.cast()
方法进行张量数值精度的转换。例如:a = tf.cast(a, tf.float32)
可以将a从其他数值精度转换到数值精度为tf.float32
精度的张量。 -
tf.constant()
创建普通张量。 -
tf.Variable()
创建待优化的张量,可以设置trainable=False
使其不能够训练优化。 -
tf.zeros(shape)
,创建全0张量,shape为一个表达形状的列表。 -
tf.ones(shape)
, 创建全1张量。 -
tf.zeros_like(Tensor)
,tf.ones_like(Tensor)
,创建与某个张量形状一致的全0或全1的张量。 -
tf.fill(shape, value)
, 创建值全为value,形状为shape的自定义张量。 -
tf.random.normal(shape, mean, stddev)
, 创建形状为shape,均值为mean,标准差为stddev的正太分布张量。 -
tf.random.uniform(shape, minval=0, maxval=None, dtype=float32)
,创建区间[minval,maxval]上的均匀分布。若需要采样整型类型的数据,必须给定区间的最大值maxval,同时给定类型tf.int*
。 -
tf.reshape(tensor, shape)
, 用于改变视图,即改变形状,以便达到不同的理解方式,但是不会改变数据的存储顺序。tensor是需要修改视图的张量,shape是修改后的视图,即形状。 -
tf.expand_dim(tensor, axis)
, 用于扩展张量的维度。其中,tensor是待扩展的张量,axis是形状列表中即将增加的维度所在的位置索引。例如,axis=0,即将新增加的维度添加至形状列表位置索引为0的一个维度。可以为负值,此时从右至左索引,最右端的位置索引为-1。 -
tf.squeeze(tensor, axis)
, 删除张量的某一维度,默认删除所有长度为1的维度。与tf.expand_dims()
中的tensor,axis含义相同。 -
tf.transpose(tensor, perm)
, 交换某两个维度。tensor为待处理张量,perm为交换维度位置索引之后的维度位置索引值的列表。 -
tf.tile(tensor, multiples)
, 运算。multiples 分别指定了每个维度上面的复制倍数,对应位置为 1 表明不复制,为 2 表明新长度为原来的长度的 2 倍,即数据复制一份,以此类推。例如,通过tf.tile(b, multiples=[2,1])
即可在 axis=0 维度复制 1 次,在 axis=1 维度不复制。 -
tf.add
,tf.subtract
,tf.multiply
,tf.divide
函数实现加减乘除。 -
tf.matmul(tensor1, tensor2)
, 实现矩阵乘法。 -
tf.square(tensor)
,tf.aqrt(tensor)
, 实现计算平方及开根号。 -
tf.pow(tensor, a)
可以方便地完成乘方运算。 -
tf.pow(a, tensor)
或者**
运算符可以方便实现指数运算。 -
tf.keras.losses.mse()
(或tf.keras.losses.MSE
)返回每个样本上的误差值,最后取误差的均值作为当前 batch 的误差,它是一个标量。 -
tf.concat(tensors, axis)
,其中 tensors 保存了所有需要合并的张量 List,axis 指定需要合并的维度。 -
tf.stack(tensors, axis)
可以合并多个张量 tensors,其中 axis 指定插入新维度的位置,axis 的用法与tf.expand_dims
的一致。 -
tf.norm(x, ord)
求解张量的 L1, L2, ∞等范数,其中参数 ord指定为 1,2 时计算 L1, L2 范数,指定为 np.inf 时计算∞ −范数。 -
tf.reduce_max
,tf.reduce_min
,tf.reduce_mean
,tf.reduce_sum
可以求解张量在某个维度上的最大、最小、均值、和,也可以求全局最大、最小、均值、和信息。可以通过指定方法的axis参数求解对应维度的相应结果,若不指定,则求出全局的结果。 -
tf.argmax(x, axis)
,tf.argmin(x, axis)
可以求解在 axis 轴上,x 的最大值、最小值所在的索引号。 -
tf.equal(a, b)
(或tf.math.equal(a, b)
)函数可以比较 2个张量是否相等,比较的是对应位置的元素是否相等,若相同,结果张量对应位置的值为True,反之为False。即,结果张量为布尔类型。 -
tf.pad(x, paddings)
函数实现填充操作,paddings 是包含了多个[𝐿𝑒𝑓𝑡 𝑃𝑎𝑑𝑑𝑖𝑛𝑔, 𝑅𝑖𝑔ℎ𝑡 𝑃𝑎𝑑𝑑𝑖𝑛𝑔]的嵌套方案 List,如[[0,0],[2,1],[1,2]]表示第一个维度不填充,第二个维度左边(起始处)填充两个单元,右边(结束处)填充一个单元,第三个维度左边填充一个单元,右边填充两个单元。 -
keras.preprocessing.sequence.pad_sequences
可以快速完成句子的填充和截断工作。 -
tf.maximum(x, a)
实现数据的下限幅:𝑥 ∈ [𝑎, +∞);可以通过tf.minimum(x, a)
实现数据的上限幅:𝑥 ∈ (−∞,𝑎]。通过组合
tf.maximum(x, a)
和tf.minimum(x, b)
可以实现同时对数据的上下边界限幅:𝑥 ∈ [𝑎, 𝑏]:tf.minimum(tf.maximum(x,2),7)
表示限幅为 [2,7]。特别的,可以通过tf.clip_by_value(x,2,7)
实现。 -
tf.gather(tensor, list, axis)
: 可以实现根据索引号收集数据的目的。list为需要收集的位置索引号构成的列表,在axis维度上进行收集操作。tf.gather
非常适合索引没有规则的场合,其中索引号可以乱序排列,此时收集的数据也是对应顺序。 -
tf.gather_nd(tensor, indices)
:可以通过指定每次采样的坐标来实现采样多个点的目的。其中,indexes为包含了多个[indice1, indice2, … , indicen]的坐标List。可以通过此方案指定确定的“点”,也可以是前几个大维度下所有后面小维度的值。如:tf.gather_nd(x,[[1,1,2],[2,2,3],[3,3,4]])
。 -
tf.boolean_mask(tensor, mask,axis)
:通过给定掩码(mask)的方式采样,表示在axis维度上,按掩码mask采样。其中,mask为布尔值构成的列表,如:𝑚𝑎𝑠𝑘 = [𝑇𝑟𝑢𝑒, 𝐹𝑎𝑙𝑠𝑒, 𝐹𝑎𝑙𝑠𝑒, 𝑇𝑟𝑢𝑒]。采样值为True所对应位置的值。注意:掩码的长度必须与对应维度的长度一致,如在班级维度上采样,则必须对这 4 个班级是否采样的掩码全部指定,掩码长度为 4。
-
tf.where(cond, a, b)
:可以根据 cond 条件的真假从 a 或 b 中读取数据(a,b的维度相同,cond与a,b维度相同的布尔类型张量),条件判定规则如下:
o i = { a i , c o n d i 为 T r u e b i , c o n d i 为 F a l s e o_i = \begin{cases} a_i , cond_i 为 True\\ b_i , cond_i 为 False \end{cases} oi={ai,condi为Truebi,condi为False
其中 i 为张量的索引,返回张量大小与 a,b 张量一致,当对应位置中 c o n d i cond_i condi为 True, o i o_i oi位置从 a i a_i ai中复制数据;当对应位置中 c o n d i cond_i condi为 False, o i o_i oi位置从 b i b_i bi中复制数据。当 a=b=None 即 a,b 参数不指定时,tf.where 会返回 cond 张量中所有 True 的元素的索引坐标。此时可以通过
tf.gather_nd(tensor, indexes)
方法获取与cond维度相同的张量中对应坐标点的值。cond列表可以通过张量的比较运算得到。 -
tf.scatter_nd(indices, updates, shape)
:可以高效地刷新张量的部分数据,但是只能在全 0 张量的白板上面刷新,因此可能需要结合其他操作来实现现有张量的数据刷新功能。其中,indices为将要插入的位置,updates为需要写入对应位置的数据张量,shape为新张量的形状。 -
tf.meshgrid
:可以方便地生成二维网格采样点坐标,方便可视化等应用场合。 -
tf.one_hot(y, depth)
:将整数向量转换为深度为depth的独热码编码(与整数所对应的位置索引处的值为1,整数从0开始),一般设置深度为整数列表中最大值加1。
keras.datasets.xxx.load_data()
即可实现经典数据集的自动加载,其中 xxx 代表具体的数据集名称。tf.data.Dataset.from_tensor_slices
可以将训练部分的数据图片 x 和标签 y 都转换成Dataset 对象。tf.data.Dataset.shuffle(buffer_size)
工具可以设置 Dataset 对象随机打散数据之间的顺序,防止每次训练时数据按固定顺序产生,从而使得模型尝试“记忆”住标签信息。其中 buffer_size 指定缓冲池的大小,一般设置为一个较大的参数即可。tf.data.Dataset.batch(batch_size)
工具可以设置后续进行批量训练时,喂入神经网络的样本数量。