當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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