从 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
,int64
。begin[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.getitem
或 Variable.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 > 0
和begin - end
如果stride < 0
.begin
和end
可以是负数-1
是最后一个元素,-2
是倒数第二个。begin_mask
控制是否替换显式给定的begin
隐含有效值为0
如果stride > 0
和-1
如果stride < 0
.end_mask
是类似的,但产生创建最大开区间所需的数字。例如,给定一个形状(3,)
张量foo[:]
, 有效begin
和end
是0
和3
.不要假设这等同于foo[0:-1]
有一个有效的begin
和end
的0
和2
.另一个例子是foo[-2::-1]
它反转张量的第一个维度,同时删除最后两个(以原始顺序元素)。例如foo = [1,2,3,4]; foo[-2::-1]
是[4,3]
.单个索引。这用于仅保留具有给定索引的元素。例如(形状
(5,6)
张量上的foo[2,:]
会产生形状(6,)
张量。这是在begin
和end
和shrink_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)。让我们逐步了解每个参数规范。
示例切片中的第一个参数转换为
begin = 1
和end = begin + 1 = 2
。为了消除原始规范2:4
的歧义,我们还在shrink_axis_mask
中设置了适当的位。2:4
为开始、结束和跨步贡献 2、4、1。所有掩码都有零位贡献。None 是
tf.newaxis
的同义词。这意味着在最终形状中插入尺寸为 1 的尺寸。在设置new_axis_mask 位时,为开始、结束和跨步提供了虚拟值。...
根据需要从尽可能多的维度获取完整范围,以便为输入形状的每个维度完全指定切片。:-3:-1
显示负索引的使用。与具有形状s
的维度关联的负索引i
被转换为正索引s + i
。所以-1
变成s-1
(即最后一个元素)。此转换在内部完成,因此 begin、end 和 strides 接收 x、-3 和 -1。设置适当的begin_mask 位以指示起始范围是整个范围(忽略 x)。:
表示选中对应维度的全部内容。这相当于::
或0::1
。 begin、end 和 strides 分别接收 0、0 和 1。begin_mask
和end_mask
中的相应位也被设置。
要求:0 != strides[i] for i in [0, m)
ellipsis_mask must be a power of two (only one ellipsis)
相关用法
- Python tf.raw_ops.StringStrip用法及代码示例
- Python tf.raw_ops.StringToHashBucketStrong用法及代码示例
- Python tf.raw_ops.StringLength用法及代码示例
- Python tf.raw_ops.StringToHashBucketFast用法及代码示例
- Python tf.raw_ops.StringToNumber用法及代码示例
- Python tf.raw_ops.StringJoin用法及代码示例
- Python tf.raw_ops.StringSplitV2用法及代码示例
- Python tf.raw_ops.StringUpper用法及代码示例
- Python tf.raw_ops.StringLower用法及代码示例
- Python tf.raw_ops.StatelessCase用法及代码示例
- Python tf.raw_ops.StopGradient用法及代码示例
- Python tf.raw_ops.StatelessSampleDistortedBoundingBox用法及代码示例
- Python tf.raw_ops.SelfAdjointEigV2用法及代码示例
- Python tf.raw_ops.Size用法及代码示例
- Python tf.raw_ops.ScatterUpdate用法及代码示例
- Python tf.raw_ops.ScatterNdUpdate用法及代码示例
- Python tf.raw_ops.SparseCrossV2用法及代码示例
- Python tf.raw_ops.ScatterAdd用法及代码示例
- Python tf.raw_ops.Sub用法及代码示例
- Python tf.raw_ops.SparseCross用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.raw_ops.StridedSlice。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。