共用方式為


DML_ONE_HOT_OPERATOR_DESC 結構 (directml.h)

產生填入 一熱編碼 值的張量。 這個運算符會產生輸出張量,其中,針對所選座標軸中的所有序列,該序列中除了一個元素都設定為 OffValue,其餘單一元素設定為 OnValue序列是指在 OutputTensor的 Axis 維度上存在的其中一組專案。

每個序列的 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 的索引一律會參考座標軸中所有序列的第一個專案。

如果序列的索引值超過 OutputTensorAxis 維度的元素數目,則會忽略該索引值,而且該序列中的所有元素都會設定為 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 條件約束

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