共用方式為


DML_TOP_K_OPERATOR_DESC 結構 (directml.h)

InputTensor座標軸的每個序列中選取最大的K元素,並分別傳回OutputValueTensor 和 OutputIndexTensor中那些元素的值和索引。 序列是指在InputTensorAxis維度上存在的其中一組元素。

語法

struct DML_TOP_K_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputValueTensor;
  const DML_TENSOR_DESC *OutputIndexTensor;
  UINT                  Axis;
  UINT                  K;
};

成員

InputTensor

類型:const DML_TENSOR_DESC*

包含要選取之專案的輸入張量。

OutputValueTensor

類型:const DML_TENSOR_DESC*

要寫入前 K 個元素值的輸出張量。 這個張量的大小必須等於InputTensor,但Axis參數指定的維度除外,其大小必須等於K

從每個輸入序列選取的 K 值,保證會遞減 (最大到最小) 。

OutputIndexTensor

類型:const DML_TENSOR_DESC*

要寫入頂端 K 元素索引的輸出張量。 這個張量的大小必須等於InputTensor,但Axis參數指定的維度除外,其大小必須等於K

這個張量中傳回的索引會相對於其序列的開頭來測量 (,而不是 tensor) 的開頭。 例如,0 的索引一律參考座標軸中所有序列的第一個專案。

如果頂端 K 中的兩個或多個元素具有相同的值 (,也就是說,當有系結) 時,會包含這兩個元素的索引,而且保證會依遞增元素索引排序。

Axis

類型: UINT

要跨其中選取專案之維度的索引。 此值必須小於InputTensorDimensionCount

K

類型: UINT

要選取的專案數目。 K必須大於 0,但小於 Axis所指定維度的InputTensor元素數目。

範例

範例 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
   
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
   
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
   
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]]]]

備註

在 中 DML_FEATURE_LEVEL_2_1 引進了較新版本的這個運算子,DML_TOP_K1_OPERATOR_DESC

可用性

這個運算子是在 中 DML_FEATURE_LEVEL_2_0 引進的。

Tensor 條件約束

  • InputTensorOutputIndexTensorOutputValueTensor 必須具有相同的 DimensionCount
  • InputTensorOutputValueTensor 必須具有相同 的 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

DML_FEATURE_LEVEL_2_0和更新版本

種類 支援的維度計數 支援的資料類型
InputTensor 輸入 4 FLOAT32、FLOAT16
OutputValueTensor 輸出 4 FLOAT32、FLOAT16
OutputIndexTensor 輸出 4 UINT32

需求

   
標頭 directml.h