DML_ONE_HOT_OPERATOR_DESC 结构 (directml.h)
生成一个充满 独热编码 值的张量。 此运算符生成一个输出张量,其中,对于所选轴中的所有序列,该序列中除一个元素外的所有元素都设置为 OffValue,其余单个元素设置为 OnValue。 序列是指沿 OutputTensor 的轴维度存在的元素集之一。
每个序列的 OnValue 位置和 OnValue/OffValue 的选择分别由 IndicesTensor 和 ValuesTensor 确定。
语法
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
。
张量约束
- IndexesTensor、 OutputTensor 和 ValuesTensor 必须具有相同的 DimensionCount。
- OutputTensor 和 ValuesTensor 必须具有相同 的数据类型。
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 |