DML_TOP_K1_OPERATOR_DESC結構 (directml.h)
從 InputTensor軸選取最大或最小的 K 元素,並分別傳回 OutputValueTensor 和 OutputIndexTensor中的這些專案值和索引。 序列 是指 InputTensorAxis 維度上存在的其中一組元素。
選擇選取最大的 K 元素或最小的 K 元素,可以使用 AxisDirection來控制。
語法
struct DML_TOP_K1_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputValueTensor;
const DML_TENSOR_DESC *OutputIndexTensor;
UINT Axis;
UINT K;
DML_AXIS_DIRECTION AxisDirection;
};
成員
InputTensor
類型:const DML_TENSOR_DESC*
包含要選取之元素的輸入張量。
OutputValueTensor
類型:const DML_TENSOR_DESC*
要寫入前 K 元素值的輸出張量。 根據 AxisDirection的值,選取最上方 K 元素。 這個張量的大小必須等於 inputTensor
如果 AxisDirectionDML_AXIS_DIRECTION_DECREASING,從每個輸入序列選取的 K 值,一定會排序遞減(最大到最小)。 否則,相反是 true,而且所選取的值保證會以遞增方式排序(最小到最大)。
OutputIndexTensor
類型:const DML_TENSOR_DESC*
要寫入前 K 元素索引的輸出張量。 這個張量的大小必須等於 inputTensor
這個張量中傳回的索引會相對於其序列的開頭來測量(相對於張量的開頭)。 例如,索引 0 一律參考座標軸中所有序列的第一個專案。
如果 top-K 中的兩個或多個元素具有相同的值(也就是有系結時),則會包含這兩個元素的索引,並保證會依遞增元素索引來排序。 請注意,不論 axisDirection
Axis
類型:UINT
要跨其中選取元素的維度索引。 此值必須小於 InputTensorDimensionCount。
K
類型:UINT
要選取的項目數目。 K 必須大於 0,但小於 InputTensor 中 Axis所指定維度中的元素數目。
AxisDirection
來自 DML_AXIS_DIRECTION 列舉的值。 如果設定為 DML_AXIS_DIRECTION_INCREASING,則此運算符會傳回 最小K 元素,以增加值的順序。 否則,它會以遞減順序傳回 最大K 元素。
例子
範例 1
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 0, 1, 10, 11],
[ 3, 2, 9, 8],
[ 4, 5, 6, 7]]]]
Axis: 3
K: 2
AxisDirection: DML_AXIS_DIRECTION_DECREASING
OutputValueTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[11, 10],
[ 9, 8],
[ 7, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,2}, DataType:UINT32)
[[[[3, 2],
[2, 3],
[3, 2]]]]
範例 2. 使用不同的軸
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 0, 1, 10, 11],
[ 3, 2, 9, 8],
[ 4, 5, 6, 7]]]]
Axis: 2
K: 2
AxisDirection: DML_AXIS_DIRECTION_DECREASING
OutputValueTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[[[ 4, 5, 10, 11],
[ 3, 2, 9, 8]]]]
OutputIndexTensor: (Sizes:{1,1,2,4}, DataType:UINT32)
[[[[2, 2, 0, 0],
[1, 1, 1, 1]]]]
範例 3. 系結值
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 3],
[3, 4, 5, 5],
[6, 6, 6, 6]]]]
Axis: 3
K: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
OutputValueTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[3, 2, 2],
[5, 5, 4],
[6, 6, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,3}, DataType:UINT32)
[[[[3, 1, 2],
[2, 3, 1],
[0, 1, 2]]]]
範例 4. 增加軸方向
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 3],
[3, 4, 5, 5],
[6, 6, 6, 6]]]]
Axis: 3
K: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputValueTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[1, 2, 2],
[3, 4, 5],
[6, 6, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,3}, DataType:UINT32)
[[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]]
言論
當 AxisDirection 設定為 DML_AXIS_DIRECTION_DECREASING時,這個運算子相當於 DML_TOP_K_OPERATOR_DESC。
可用性
此運算子是在 DML_FEATURE_LEVEL_2_1
中引進的。
Tensor 條件約束
- InputTensor、OutputIndexTensor和 OutputValueTensor 必須具有相同的 DimensionCount 。
InputTensor 和OutputValueTensor 必須具有相同的 DataType。
Tensor 支援
DML_FEATURE_LEVEL_5_0和更新版本
張肌 | 類 | 支援的維度計數 | 支援的數據類型 |
---|---|---|---|
InputTensor | 輸入 | 1 到 8 | FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
OutputValueTensor | 輸出 | 1 到 8 | FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
OutputIndexTensor | 輸出 | 1 到 8 | UINT64、UINT32 |
DML_FEATURE_LEVEL_3_1和更新版本
張肌 | 類 | 支援的維度計數 | 支援的數據類型 |
---|---|---|---|
InputTensor | 輸入 | 1 到 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputValueTensor | 輸出 | 1 到 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputIndexTensor | 輸出 | 1 到 8 | UINT32 |
DML_FEATURE_LEVEL_2_1和更新版本
張肌 | 類 | 支援的維度計數 | 支援的數據類型 |
---|---|---|---|
InputTensor | 輸入 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputValueTensor | 輸出 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputIndexTensor | 輸出 | 4 | UINT32 |
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 10 組建 20348 |
支援的最低伺服器 | Windows 10 組建 20348 |
標頭 | directml.h |