共用方式為


DML_SLICE1_OPERATOR_DESC結構 (directml.h)

擷取單一子系 (輸入張量 ) 。

輸入視窗描述配量中要考慮的輸入張量界限。 視窗是針對每個維度使用三個值來定義。

  • 位移會標記維度中視窗的開頭
  • 大小會標示維度中視窗的範圍。 維度中 視窗的結尾offset + size - 1
  • 跨步指出如何周遊維度中的專案。
    • 步幅的大小表示在視窗內複製時要前進的元素數目。
    • 如果步進為正數,則會從維度中視窗 的開頭 開始複製元素。
    • 如果分步是負數,則會從維度中視窗 的結尾 開始複製專案。

下列虛擬程式代碼說明如何使用輸入視窗複製元素。 請注意,維度中的元素從開始到結尾如何以正向的步幅複製,並從端複製到以負步進開始。

CopyStart = InputWindowOffsets
for dimension i in [0, DimensionCount - 1]:
    if InputWindowStrides[i] < 0:
        CopyStart[i] += InputWindowSizes[i] - 1 // start at the end of the window in this dimension

OutputTensor[OutputCoordinates] = InputTensor[CopyStart + InputWindowStrides * OutputCoordinates]

輸入視窗不得在任何維度中是空的,而且該視窗不能延伸到超出輸入張量 (超出界限讀取的維度,) 不允許。 視窗的大小和步進可有效地限制可能從輸入張量的每個維度 i 複製的項目數目。

MaxCopiedElements[i] = 1 + (InputWindowSize[i] - 1) / InputWindowStrides[i]

不需要輸出張量,即可複製視窗內所有可連線的專案。 配量有效, 1 <= OutputSizes[i] <= MaxCopiedElements[i]只要是 。

語法

struct DML_SLICE1_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  DimensionCount;
  const UINT            *InputWindowOffsets;
  const UINT            *InputWindowSizes;
  const INT             *InputWindowStrides;
};

成員

InputTensor

類型: const DML_TENSOR_DESC*

要從中擷取配量的張量。

OutputTensor

類型: const DML_TENSOR_DESC*

要寫入交叉分析數據結果的張量。

DimensionCount

類型: UINT

維度的數目。 此欄位會決定 InputWindowOffsetsInputWindowSizesInputWindowStrides 陣列的大小。 此值必須符合輸入和輸出張量的 DimensionCount 。 此值必須介於 1 到 8 之間,從 開始 DML_FEATURE_LEVEL_3_0,先前的功能層級需要 4 或 5 的值。

InputWindowOffsets

類型:_Field_size_ (DimensionCount) const UINT*

陣列,包含每個維度中輸入視窗) 項目的開頭 (。 陣列中的值必須滿足條件約束 InputWindowOffsets[i] + InputWindowSizes[i] <= InputTensor.Sizes[i]

InputWindowSizes

類型:_Field_size_ (DimensionCount) const UINT*

陣列,包含每個維度中輸入視窗) 元素 (範圍。 陣列中的值必須滿足條件約束 InputWindowOffsets[i] + InputWindowSizes[i] <= InputTensor.Sizes[i]

InputWindowStrides

類型:_Field_size_ (DimensionCount) const UINT*

數位,包含元素中輸入張量每個維度的配量步進。 步幅的大小表示在輸入視窗中複製時要前進的元素數目。 步進的正負號會決定從視窗開頭開始複製元素, (正步進) 或視窗結尾 (負步進) 。 跨步可能不會是 0。

範例

下列範例會使用相同的輸入張量。

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[ 1,  2,  3,  4],
   [ 5,  6,  7,  8],
   [ 9, 10, 11, 12],
   [13, 14, 15, 16]]]]

範例 1. 具有正面步幅的跨步配量

InputWindowOffsets = {0, 0, 0, 1}
InputWindowSizes   = {1, 1, 4, 3}
InputWindowStrides = {1, 1, 2, 2}

OutputTensor: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[ 2,  4],
   [10, 12]]]]

複製的項目計算方式如下。

Output[0,0,0,0] = {0,0,0,1} + {1,1,2,2} * {0,0,0,0} = Input[{0,0,0,1}] = 2
Output[0,0,0,1] = {0,0,0,1} + {1,1,2,2} * {0,0,0,1} = Input[{0,0,0,3}] = 4
Output[0,0,1,0] = {0,0,0,1} + {1,1,2,2} * {0,0,1,0} = Input[{0,0,2,1}] = 10
Output[0,0,1,1] = {0,0,0,1} + {1,1,2,2} * {0,0,1,1} = Input[{0,0,2,3}] = 12

範例 2. 具有負步幅的跨量分量

InputWindowOffsets = {0, 0, 0, 1}
InputWindowSizes   = {1, 1, 4, 3}
InputWindowStrides = {1, 1, -2, 2}

OutputTensor: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[14, 16],
   [ 6,  8]]]]

回想一下,具有負視窗步調的維度會在該維度的輸入視窗結尾開始複製;這是藉由將 新增 InputWindowSize[i] - 1 至視窗位移來完成。 具有正面步幅的維度只會從 開始 InputWindowOffset[i]

  • 軸 0 (+1 視窗間距) 開始在 複製 InputWindowOffsets[0] = 0
  • 座標軸 1 (+1 視窗間距) 開始在 複製 InputWindowOffsets[1] = 0
  • 軸 2 (-2 視窗步幅) 開始在 複製 InputWindowOffsets[2] + InputWindowSizes[0] - 1 = 0 + 4 - 1 = 3
  • 軸 3 (+2 視窗步幅) 開始在 複製 InputWindowOffsets[3] = 1

複製的項目計算方式如下。

Output[0,0,0,0] = {0,0,3,1} + {1,1,-2,2} * {0,0,0,0} = Input[{0,0,3,1}] = 14
Output[0,0,0,1] = {0,0,3,1} + {1,1,-2,2} * {0,0,0,1} = Input[{0,0,3,3}] = 16
Output[0,0,1,0] = {0,0,3,1} + {1,1,-2,2} * {0,0,1,0} = Input[{0,0,1,1}] = 6
Output[0,0,1,1] = {0,0,3,1} + {1,1,-2,2} * {0,0,1,1} = Input[{0,0,1,3}] = 8

備註

此運算符類似於 DML_SLICE_OPERATOR_DESC,但兩個重要方式不同。

  • 配量步幅可能是負數,可讓沿著維度反轉值。
  • 輸入視窗大小不一定與輸出張量大小相同。

可用性

這個運算子是在 中 DML_FEATURE_LEVEL_2_1引進。

Tensor 條件約束

InputTensorOutputTensor 必須具有相同 的 DataTypeDimensionCount

Tensor 支援

DML_FEATURE_LEVEL_4_1和更新版本

種類 支援的維度計數 支援的資料類型
InputTensor 輸入 1 到 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
OutputTensor 輸出 1 到 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_3_0和更新版本

種類 支援的維度計數 支援的資料類型
InputTensor 輸入 1 到 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 輸出 1 到 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_2_1和更新版本

種類 支援的維度計數 支援的資料類型
InputTensor 輸入 4 到 5 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 輸出 4 到 5 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

規格需求

需求
最低支援的用戶端 Windows 10 組建 20348
最低支援的伺服器 Windows 10 組建 20348
標頭 directml.h