DML_ONE_HOT_OPERATOR_DESC 结构 (directml.h)

生成一个充满 独热编码 值的张量。 此运算符生成一个输出张量,其中,对于所选轴中的所有序列,该序列中除一个元素外的所有元素都设置为 OffValue,其余单个元素设置为 OnValue序列是指沿 OutputTensor维度存在的元素集之一。

每个序列的 OnValue 位置和 OnValue/OffValue 的选择分别由 IndicesTensorValuesTensor 确定。

语法

struct DML_ONE_HOT_OPERATOR_DESC {
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *ValuesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
};

成员

IndicesTensor

类型: const DML_TENSOR_DESC*

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

如果序列的索引值超过 OutputTensor维度上的元素数,则忽略该索引值,并且该序列中的所有元素都将设置为 OffValue

DML_FEATURE_LEVEL_3_0开始,使用此张量使用带符号整型类型时,此运算符支持负索引值。 负索引被解释为相对于序列末尾。 例如,索引 -1 引用序列中的最后一个元素。

此张量必须具有等于 OutputTensor 的维度计数和大小,参数指定的维度除外尺寸的大小必须为 1。 例如,如果 OutputTensor 的大小为 ,{2,3,4,5}而 Axis 为 1,则 IndicesTensor 的大小必须为 {2,1,4,5}

ValuesTensor

类型: const DML_TENSOR_DESC*

此张量可以具有任何大小,只要它至少包含两个元素。 此张量的第 0 个元素被解释为 OffValue,沿大小 >1 的最快变化维度的第 1 个元素解释为 OnValue

OutputTensor

类型: const DML_TENSOR_DESC*

要向其写入结果的输出张量。 此张量必须具有等于 IndicesTensor 的维度计数和大小,参数指定的维度除外。 此张量中 维度的大小可能具有大于 0 的任何值。

Axis

类型: UINT

要沿此生成单热编码序列的维度的索引。 此值必须小于 IndexesTensor 的 DimensionCount

示例

示例 1

IndicesTensor: (Sizes:{1,1,3,1}, DataType:UINT32)
[[[[0],
   [3],
   [2]]]]
   
ValuesTensor: (Sizes:{1,1,1,2}, DataType:FLOAT32)
[[[[0, 1]]]]

Axis: 3

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 0, 0, 0],    // The one-hot encoding is formed across the rows
   [0, 0, 0, 1],
   [0, 0, 1, 0]]]]

示例 2。 使用不同的轴

IndicesTensor: (Sizes:{1,1,1,4}, DataType:UINT32)
[[[[0, 2, 1, 0]]]]
   
ValuesTensor: (Sizes:{1,1,1,2}, DataType:FLOAT32)
[[[[0, 1]]]]

Axis: 2

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 0, 0, 1],    // The one-hot encoding is formed across the columns
   [0, 0, 1, 0],
   [0, 1, 0, 0]]]]

示例 3。 使用不同的开/关值

IndicesTensor: (Sizes:{1,1,3,1}, DataType:UINT32)
[[[[0],
   [3],
   [2]]]]
   
ValuesTensor: (Sizes:{1,1,3,1}, DataType:FLOAT32)
[[[[4],    // off value
   [2],    // on value
   [9]]]] // unused

Axis: 3

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

示例 4. 负索引和超出边界索引

IndicesTensor: (Sizes:{1,1,3,1}, DataType:INT32)
[[[[ -3],
   [100],
   [  3]]]]
   
ValuesTensor: (Sizes:{1,1,1,2}, DataType:FLOAT32)
[[[[0, 1]]]]

Axis: 3

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[0, 1, 0, 0],    // negative indices count from the end
   [0, 0, 0, 0],    // out-of-bounds indices are ignored; all elements are set to OffValue
   [0, 0, 0, 1]]]]

注解

可用性

此运算符是在 中引入的 DML_FEATURE_LEVEL_2_0

张量约束

  • IndexesTensorOutputTensorValuesTensor 必须具有相同的 DimensionCount
  • OutputTensorValuesTensor 必须具有相同 的数据类型

Tensor 支持

DML_FEATURE_LEVEL_4_1 及更高版本

种类 支持的维度计数 支持的数据类型
IndicesTensor 输入 1 到 8 INT64、INT32、UINT64、UINT32
ValuesTensor 输入 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及更高版本

种类 支持的维度计数 支持的数据类型
IndicesTensor 输入 1 到 8 INT64、INT32、UINT64、UINT32
ValuesTensor 输入 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及更高版本

种类 支持的维度计数 支持的数据类型
IndicesTensor 输入 4 UINT32
ValuesTensor 输入 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 输出 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_2_0及更高版本

种类 支持的维度计数 支持的数据类型
IndicesTensor 输入 4 UINT32
ValuesTensor 输入 4 FLOAT32、FLOAT16
OutputTensor 输出 4 FLOAT32、FLOAT16

要求

要求
最低受支持的客户端 Windows 10版本 2004 (10.0;内部版本 19041)
最低受支持的服务器 Windows Server 版本 2004 (10.0;内部版本 19041)
标头 directml.h