《TensorFlow 深度学习》阅读笔记(一) —— TF中常见方法汇总

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,condiTruebi,condiFalse
    其中 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)工具可以设置后续进行批量训练时,喂入神经网络的样本数量。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值