DML_TOP_K_OPERATOR_DESC 结构 (directml.h)

InputTensor 轴的每个序列中选择最大的 K 元素,并分别返回 OutputValueTensorOutputIndexTensor 中这些元素的值和索引。 序列是指沿 InputTensor维度存在的元素集之一。

语法

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参数指定的维度除外,轴参数的大小必须等于 K

保证从每个输入序列中选择的 K 值按从大到小 (降序排序,) 。

OutputIndexTensor

类型: const DML_TENSOR_DESC*

要向其写入前 K 元素的索引的输出张量。 此张量的大小必须等于 InputTensor参数指定的维度除外,轴参数的大小必须等于 K

此张量中返回的索引相对于其序列 (的开头而不是张量) 的开头进行测量。 例如,索引 0 始终引用轴中所有序列的第一个元素。

如果 top-K 中的两个或更多个元素具有相同的值 (即,当存在平) 时,将包含这两个元素的索引,并保证按升序元素索引进行排序。

Axis

类型: UINT

要选择其上的元素的维度的索引。 此值必须小于 InputTensorDimensionCount

K

类型: UINT

要选择的元素数。 K 必须大于 0,但小于 InputTensor 中沿 Axis 指定的维度的元素数。

示例

示例 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

张量约束

  • InputTensorOutputIndexTensorOutputValueTensor 必须具有相同的 DimensionCount
  • InputTensorOutputValueTensor 必须具有相同的 数据类型

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