DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC 結構 (directml.h)
在量化數據上執行矩陣乘法函數。 此運算符在數學上相當於將輸入量化,然後執行矩陣乘法,然後量化輸出。
此運算子需要矩陣將輸入張量乘以 4D,其格式為 { BatchCount, ChannelCount, Height, Width }
。 矩陣乘法運算符會執行獨立矩陣乘法的 BatchCount * ChannelCount 數目。
例如,如果 ATensor的大小為{ BatchCount, ChannelCount, M, K }
,而 BTensor的大小為{ BatchCount, ChannelCount, K, N }
,而 OutputTensor的大小{ BatchCount, ChannelCount, M, N }
為 ,則矩陣乘法運算符會執行維度 {M,K} x {K,N} = {M,N} 的 BatchCount * ChannelCount 獨立矩陣乘法。
Dequantize 函式
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Quantize 函式
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
語法
struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC {
const DML_TENSOR_DESC *ATensor;
const DML_TENSOR_DESC *AScaleTensor;
const DML_TENSOR_DESC *AZeroPointTensor;
const DML_TENSOR_DESC *BTensor;
const DML_TENSOR_DESC *BScaleTensor;
const DML_TENSOR_DESC *BZeroPointTensor;
const DML_TENSOR_DESC *OutputScaleTensor;
const DML_TENSOR_DESC *OutputZeroPointTensor;
const DML_TENSOR_DESC *OutputTensor;
};
成員
ATensor
類型: const DML_TENSOR_DESC*
包含 A 數據的張量。 這個張量維度應該是 { BatchCount, ChannelCount, M, K }
。
AScaleTensor
類型: const DML_TENSOR_DESC*
包含 ATensor 縮放數據的張量。 的預期維度 AScaleTensor
是 { 1, 1, 1, 1 }
如果需要每個張量仲裁,或是 { 1, 1, M, 1 }
需要每個數據列的量化。 這些小數位數值用於將 A 值量化。
AZeroPointTensor
類型:_Maybenull_ const DML_TENSOR_DESC*
選擇性張量,包含 ATensor 零點數據。 AZeroPointTensor 的預期維度是 { 1, 1, 1, 1 }
如果需要每個張量仲裁,或 { 1, 1, M, 1 }
如果需要每個數據列的量化。 這些零點值用於將 ATensor 值取消量化。
BTensor
類型: const DML_TENSOR_DESC*
包含 B 數據的張量。 這個張量維度應該是 { BatchCount, ChannelCount, K, N }
。
BScaleTensor
類型: const DML_TENSOR_DESC*
包含 BTensor 縮放數據的張量。 的預期維度 BScaleTensor
是 { 1, 1, 1, 1 }
如果需要每個張量仲裁,或 { 1, 1, 1, N }
如果需要每個數據行的量化。 這些小數字數值用於將 BTensor 值取消量化。
BZeroPointTensor
類型:_Maybenull_ const DML_TENSOR_DESC*
選擇性的張量,包含 BTensor 零點數據。 的預期維度 BZeroPointTensor
是 { 1, 1, 1, 1 }
如果需要每個張量仲裁,或 { 1, 1, 1, N }
如果需要每個數據行的量化。 這些零點值用於取消量化 BTensor 值。
OutputScaleTensor
類型: const DML_TENSOR_DESC*
包含 OutputTensor 縮放數據的張量。 的預期維度 OutputScaleTensor
是 { 1, 1, 1, 1 }
如果需要每張量仲裁,或是 { 1, 1, M, 1 }
需要每個數據列的量化。 此小數字數值用於將 OutputTensor 值量化。
OutputZeroPointTensor
類型:_Maybenull_ const DML_TENSOR_DESC*
選擇性張量 ,其中包含 OutputTensor 零點數據。 的預期維度 OutputZeroPointTensor
是 { 1, 1, 1, 1 }
如果需要每張量仲裁,或是 { 1, 1, M, 1 }
需要每個數據列的量化。 這個零點值用於將 OutputTensor 值量化。
OutputTensor
類型: const DML_TENSOR_DESC*
要寫入結果的張量。 此張量維度為 { BatchCount, ChannelCount, M, N }
。
可用性
這個運算子是在 中 DML_FEATURE_LEVEL_2_1
引進。
Tensor 條件約束
- AScaleTensor、 AZeroPointTensor、 BScaleTensor、 BZeroPointTensor、 OutputScaleTensor 和 OutputZeroPointTensor 必須具有相同的 DimensionCount。
- ATensor、 BTensor 和 OutputTensor 必須具有相同的 DimensionCount。
- BTensor 和 BZeroPointTensor 必須具有相同 的 DataType。
- OutputTensor 和 OutputZeroPointTensor 必須具有相同 的 DataType。
- AScaleTensor、 AZeroPointTensor、 BScaleTensor、 BZeroPointTensor、 OutputScaleTensor 和 OutputZeroPointTensor 必須具有相同的 DimensionCount。
- ATensor 和 AZeroPointTensor 必須具有相同 的 DataType。
Tensor 支援
DML_FEATURE_LEVEL_4_0和更新版本
張 | 種類 | 支援的維度計數 | 支援的資料類型 |
---|---|---|---|
ATensor | 輸入 | 2 到 4 | INT8、UINT8 |
AScaleTensor | 輸入 | 1 到 4 | FLOAT32 |
AZeroPointTensor | 選擇性輸入 | 1 到 4 | INT8、UINT8 |
BTensor | 輸入 | 2 到 4 | INT8、UINT8 |
BScaleTensor | 輸入 | 1 到 4 | FLOAT32 |
BZeroPointTensor | 選擇性輸入 | 1 到 4 | INT8、UINT8 |
OutputScaleTensor | 輸入 | 1 到 4 | FLOAT32 |
OutputZeroPointTensor | 選擇性輸入 | 1 到 4 | INT8、UINT8 |
OutputTensor | 輸出 | 2 到 4 | INT8、UINT8 |
DML_FEATURE_LEVEL_2_1和更新版本
張 | 種類 | 支援的維度計數 | 支援的資料類型 |
---|---|---|---|
ATensor | 輸入 | 4 | INT8、UINT8 |
AScaleTensor | 輸入 | 4 | FLOAT32 |
AZeroPointTensor | 選擇性輸入 | 4 | INT8、UINT8 |
BTensor | 輸入 | 4 | INT8、UINT8 |
BScaleTensor | 輸入 | 4 | FLOAT32 |
BZeroPointTensor | 選擇性輸入 | 4 | INT8、UINT8 |
OutputScaleTensor | 輸入 | 4 | FLOAT32 |
OutputZeroPointTensor | 選擇性輸入 | 4 | INT8、UINT8 |
OutputTensor | 輸出 | 4 | INT8、UINT8 |
規格需求
最低支援的用戶端 | Windows 10 組建 20348 |
最低支援的伺服器 | Windows 10 組建 20348 |
標頭 | directml.h |