DML_ONE_HOT_OPERATOR_DESC 結構 (directml.h)
產生填入 一熱編碼 值的張量。 這個運算符會產生輸出張量,其中,針對所選座標軸中的所有序列,該序列中除了一個元素都設定為 OffValue,其餘單一元素設定為 OnValue。 序列是指在 OutputTensor的 Axis 維度上存在的其中一組專案。
每個序列的 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 中 Axis 維度的元素數目,則會忽略該索引值,而且該序列中的所有元素都會設定為 OffValue。
從 DML_FEATURE_LEVEL_3_0
開始,當搭配這個張量使用帶正負號整數型別時,這個運算元支援負數索引值。 負數索引會解譯為相對於序列結尾。 例如,-1 的索引是指序列中的最後一個專案。
這個張量必須具有等於 OutputTensor 的維度計數和大小,但 Axis 參數所指定的維度除外。 Axis 維度的大小必須是 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 的維度計數和大小,但 Axis 參數所指定的維度除外。 這個張量中的 Axis 維度大小可能會有任何大於 0 的值。
Axis
類型: UINT
要一併產生一個熱編碼序列之維度的索引。 此值必須小於 IndicesTensor 的 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
引進。
Tensor 條件約束
- IndicesTensor、 OutputTensor 和 ValuesTensor 必須具有相同的 DimensionCount。
- OutputTensor 和 ValuesTensor 必須具有相同 的 DataType。
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 |