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
維度的數目。 此欄位會決定 InputWindowOffsets、 InputWindowSizes 和 InputWindowStrides 陣列的大小。 此值必須符合輸入和輸出張量的 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 條件約束
InputTensor 和 OutputTensor 必須具有相同 的 DataType 和 DimensionCount。
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 |