從 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。