当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.raw_ops.StridedSlice用法及代码示例


input 返回一个跨步切片。

用法

tf.raw_ops.StridedSlice(
    input, begin, end, strides, begin_mask=0, end_mask=0, ellipsis_mask=0,
    new_axis_mask=0, shrink_axis_mask=0, name=None
)

参数

  • input 一个Tensor
  • begin 一个Tensor。必须是以下类型之一:int32 , int64begin[k] 指定k th 范围规范的偏移量。这对应的确切维度将由上下文决定。超出范围的值将被静默钳制。如果 begin_mask 的第 k 位,则忽略 begin[k],而是使用适当尺寸的整个范围。负值导致索引从最高元素开始,例如如果 foo==[1,2,3] 那么 foo[-1]==3
  • end 一个Tensor。必须与 begin 具有相同的类型。 end[i]begin 类似,但 end_mask 用于确定完整范围。
  • strides 一个Tensor。必须与 begin 具有相同的类型。 strides[i] 指定提取给定元素后的第 i 规范中的增量。负索引将反转原始顺序。超出或范围值被限制为 [0,dim[i]) if slice[i]>0[-1,dim[i]-1] if slice[i] < 0
  • begin_mask 可选的 int 。默认为 0 。一个位掩码,其中位 i 为 1 意味着忽略开始值,而是使用可能的最大间隔。在运行时 begin[i] 将替换为 [0, n-1) 如果 stride[i] > 0[-1, n-1] 如果 stride[i] < 0
  • end_mask 可选的 int 。默认为 0 。类似于begin_mask
  • ellipsis_mask 可选的 int 。默认为 0 。位掩码,其中位 i 为 1 表示 i 位置实际上是省略号。最多一位可以是 1。如果 ellipsis_mask == 0 ,则提供 1 << (m+1) 的隐式省略号掩码。这意味着 foo[3:5] == foo[3:5, ...] 。省略号会根据需要隐式创建尽可能多的范围规范,以完全指定每个维度的切片范围。例如,对于 4 维张量 foo 切片 foo[2, ..., 5:8] 意味着 foo[2,:,:, 5:8]
  • new_axis_mask 可选的 int 。默认为 0 。位掩码,其中位 i 为 1 表示 i th 规范创建新的形状 1 维。例如 foo[:4, tf.newaxis,:2] 会产生一个形状 (4, 1, 2) 张量。
  • shrink_axis_mask 可选的 int 。默认为 0 。位掩码,其中位 i 意味着 i th 规范应该缩小维度。 begin 和 end 必须暗示维度中大小为 1 的切片。例如,在 python 中,可能会执行 foo[:, 3,:],这将导致 shrink_axis_mask 为 2。
  • name 操作的名称(可选)。

返回

  • 一个Tensor。具有与 input 相同的类型。

请注意,大多数 python 用户都希望使用 Python Tensor.getitemVariable.getitem 而不是直接使用此操作。

此操作的目标是使用来自n 维度input 张量的元素子集生成一个新张量。使用编码到此函数的参数中的 m 稀疏范围规范序列选择子集。请注意,在某些情况下 m 可能等于 n ,但不一定是这种情况。每个范围规范条目可以是以下之一:

  • 省略号 (...)。椭圆用于暗示 full-dimension 选择的零个或多个维度,并使用 ellipsis_mask 生成。例如,foo[...] 是标识切片。

  • 一个新的轴。这用于插入一个新的 shape=1 维度,并使用 new_axis_mask 生成。例如,foo[:, ...] 其中 foo 是形状 (3, 4) 会产生 (1, 3, 4) 张量。

  • 一个范围begin:end:stride.这用于指定从给定维度中选择多少。stride可以是除 0 以外的任何整数。begin是一个整数,表示要选择的第一个值的索引,而end表示要选择的最后一个值的索引。每个维度中选择的值的数量是end - begin如果stride > 0begin - end如果stride < 0.beginend可以是负数-1是最后一个元素,-2是倒数第二个。begin_mask控制是否替换显式给定的begin隐含有效值为0如果stride > 0-1如果stride < 0.end_mask是类似的,但产生创建最大开区间所需的数字。例如,给定一个形状(3,)张量foo[:], 有效beginend03.不要假设这等同于foo[0:-1]有一个有效的beginend02.另一个例子是foo[-2::-1]它反转张量的第一个维度,同时删除最后两个(以原始顺序元素)。例如foo = [1,2,3,4]; foo[-2::-1][4,3].

  • 单个索引。这用于仅保留具有给定索引的元素。例如(形状 (5,6) 张量上的 foo[2,:] 会产生形状 (6,) 张量。这是在 beginendshrink_axis_mask 中编码的。

每个概念范围规范都编码在 op 的参数中。通过考虑一个重要的示例可以最好地理解这种编码。特别是,foo[1, 2:4, None, ...,:-3:-1,:] 将被编码为

begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0)
end = [2, 4, x, x, -3, x]
strides = [1, 1, x, x, -1, 1]
begin_mask = 1<<4 | 1<<5 = 48
end_mask = 1<<5 = 32
ellipsis_mask = 1<<3 = 8
new_axis_mask = 1<<2 = 4
shrink_axis_mask = 1<<0 = 1

在这种情况下,如果 foo.shape 为 (5, 5, 5, 5, 5, 5),则切片的最终形状变为 (2, 1, 5, 5, 2, 5)。让我们逐步了解每个参数规范。

  1. 示例切片中的第一个参数转换为 begin = 1end = begin + 1 = 2 。为了消除原始规范 2:4 的歧义,我们还在 shrink_axis_mask 中设置了适当的位。

  2. 2:4 为开始、结束和跨步贡献 2、4、1。所有掩码都有零位贡献。

  3. None 是 tf.newaxis 的同义词。这意味着在最终形状中插入尺寸为 1 的尺寸。在设置new_axis_mask 位时,为开始、结束和跨步提供了虚拟值。

  4. ... 根据需要从尽可能多的维度获取完整范围,以便为输入形状的每个维度完全指定切片。

  5. :-3:-1 显示负索引的使用。与具有形状 s 的维度关联的负索引 i 被转换为正索引 s + i 。所以-1变成s-1(即最后一个元素)。此转换在内部完成,因此 begin、end 和 strides 接收 x、-3 和 -1。设置适当的begin_mask 位以指示起始范围是整个范围(忽略 x)。

  6. :表示选中对应维度的全部内容。这相当于 ::0::1 。 begin、end 和 strides 分别接收 0、0 和 1。 begin_maskend_mask 中的相应位也被设置。

要求0 != strides[i] for i in [0, m) ellipsis_mask must be a power of two (only one ellipsis)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.raw_ops.StridedSlice。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。