Path: blob/master/site/zh-cn/guide/tensor_slicing.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
张量切片简介
在处理目标检测和 NLP 等机器学习应用时,有时需要使用张量的子部分(切片)。例如,如果您的模型架构包含路由,则其中一层可能控制将哪个训练样本路由到下一层。在这种情况下,可以使用张量切片运算将张量拆分并以正确的顺序将它们重新组合在一起。
在 NLP 应用中,可以在训练时使用张量切片来执行单词遮盖。例如,可以通过在每个句子中选择要遮盖的单词索引,将单词作为标签,然后使用遮盖词例替换选中的单词,以从句子列表中生成训练数据。
在本指南中,您将学习如何使用 TensorFlow API 执行以下操作:
从张量中提取切片
在张量中的特定索引处插入数据
本指南假定您熟悉张量索引。在开始学习本指南之前,请阅读张量和 TensorFlow NumPy 指南的索引部分。
安装
提取张量切片
使用 tf.slice
执行类似 NumPy 的张量切片。
或者,您也可以使用更具 Python 风格的语法。请注意,张量切片在开始-停止范围内均匀分布。
对于二维张量,可以使用以下代码:
您也可以在更高维度的张量上使用 tf.slice
。
还可以使用 tf.strided_slice
通过在张量维度上“跨步”来提取张量切片。
使用 tf.gather
从张量的单个轴中提取特定索引。
tf.gather
不要求索引均匀分布。
要从张量的多个轴中提取切片,请使用 tf.gather_nd
。当您想要收集矩阵的元素而不仅仅是它的行或列时,这非常有用。
将数据插入张量
使用 tf.scatter_nd
在张量的特定切片/索引处插入数据。请注意,您将值插入的张量是用零初始化的。
像 tf.scatter_nd
这样需要零初始化张量的方法类似于稀疏张量初始值设定项。可以使用 tf.gather_nd
和 tf.scatter_nd
来模拟稀疏张量运算的行为。
考虑一个将这两种方法结合使用来构造稀疏张量的示例。
这类似于:
要将数据插入到具有既有值的张量中,请使用 tf.tensor_scatter_nd_add
。
类似地,可以使用 tf.tensor_scatter_nd_sub
从具有既有值的张量中减去值。
使用 tf.tensor_scatter_nd_min
将逐元素最小值从一个张量复制到另一个。
类似地,使用 tf.tensor_scatter_nd_max
将逐元素最大值从一个张量复制到另一个。