structure DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC (directml.h)
Effectue une fonction de multiplication de matrice sur des données quantifiées. Cet opérateur équivaut mathématiquement à déquanter les entrées, à effectuer une multiplication de matrices, puis à quantifier la sortie.
Cet opérateur exige que la matrice multiplie les tenseurs d’entrée soit 4D qui sont mis en forme comme { BatchCount, ChannelCount, Height, Width }
. L’opérateur de multiplication de matrices effectue BatchCount * ChannelCount nombre de multiplications de matrice indépendantes.
Par exemple, si
Dequantize, fonction
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Quantize, fonction
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
Syntaxe
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;
};
Membres
ATensor
Type : const DML_TENSOR_DESC*
Un capteur contenant les données A. Les dimensions de ce capteur doivent être { BatchCount, ChannelCount, M, K }
.
AScaleTensor
Type : const DML_TENSOR_DESC*
Un tensor contenant les données de mise à l’échelle ATensor. Les dimensions attendues de l'AScaleTensor
sont { 1, 1, 1, 1 }
si la quantisation par capteur est requise, ou { 1, 1, M, 1 }
si la quantisation par ligne est requise. Ces valeurs d’échelle sont utilisées pour déquanter les valeurs A.
Note
Une valeur d’échelle de 0 entraîne un comportement non défini.
AZeroPointTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Un capteur facultatif contenant les données ATensor point zéro. Les dimensions attendues de l’AZeroPointTensor sont { 1, 1, 1, 1 }
si la quantisation par tensoriel est requise, ou { 1, 1, M, 1 }
si la quantisation par ligne est requise. Ces valeurs de point zéro sont utilisées pour déquanter les valeurs ATensor.
BTensor
Type : const DML_TENSOR_DESC*
Un capteur contenant les données B. Les dimensions de ce capteur doivent être { BatchCount, ChannelCount, K, N }
.
BScaleTensor
Type : const DML_TENSOR_DESC*
Un capteur contenant les données de mise à l’échelle BTensor. Les dimensions attendues de l'BScaleTensor
sont { 1, 1, 1, 1 }
si la quantisation par capteur est requise, ou { 1, 1, 1, N }
si la quantisation par colonne est requise. Ces valeurs d’échelle sont utilisées pour déquanter les valeurs BTensor.
Note
Une valeur d’échelle de 0 entraîne un comportement non défini.
BZeroPointTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Un capteur facultatif contenant les données BTensor point zéro. Les dimensions attendues de l'BZeroPointTensor
sont { 1, 1, 1, 1 }
si la quantisation par capteur est requise, ou { 1, 1, 1, N }
si la quantisation par colonne est requise. Ces valeurs de point zéro sont utilisées pour déquanter les valeurs BTensor.
OutputScaleTensor
Type : const DML_TENSOR_DESC*
Un capteur contenant les données de mise à l’échelle OutputTensor. Les dimensions attendues de l'OutputScaleTensor
sont { 1, 1, 1, 1 }
si la quantisation par capteur est requise, ou { 1, 1, M, 1 }
si la quantisation par ligne est requise. Cette valeur d’échelle est utilisée pour déquanter les valeurs OutputTensor.
Note
Une valeur d’échelle de 0 entraîne un comportement non défini.
OutputZeroPointTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Un capteur facultatif contenant les données OutputTensor point zéro. Les dimensions attendues de l'OutputZeroPointTensor
sont { 1, 1, 1, 1 }
si la quantisation par capteur est requise, ou { 1, 1, M, 1 }
si la quantisation par ligne est requise. Cette valeur de point zéro est utilisée pour déquanter les valeurs OutputTensor.
OutputTensor
Type : const DML_TENSOR_DESC*
Un tensoriel dans lequel écrire les résultats. Les dimensions de ce capteur sont { BatchCount, ChannelCount, M, N }
.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_1
.
Contraintes Tensor
- AScaleTensor , AZeroPointTensor, BScaleTensor, BZeroPointTensor , OutputScaleTensoret OutputZeroPointTensor doivent avoir le même DimensionCount.
- ATensor, BTensor et OutputTensor doivent avoir le même DimensionCount.
- BTensor et BZeroPointTensor doivent avoir le même DataType.
- OutputTensor et OutputZeroPointTensor doivent avoir le même DataType.
- AScaleTensor , AZeroPointTensor, BScaleTensor, BZeroPointTensor , OutputScaleTensoret OutputZeroPointTensor doivent avoir le même DimensionCount.
- ATensor et AZeroPointTensor doivent avoir le même type de données .
Prise en charge de Tensor
DML_FEATURE_LEVEL_4_0 et versions ultérieures
Tenseur | Gentil | Nombres de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
ATensor | Entrée | 2 à 4 | INT8, UINT8 |
AScaleTensor | Entrée | 1 à 4 | FLOAT32 |
AZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
BTensor | Entrée | 2 à 4 | INT8, UINT8 |
BScaleTensor | Entrée | 1 à 4 | FLOAT32 |
BZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
OutputScaleTensor | Entrée | 1 à 4 | FLOAT32 |
OutputZeroPointTensor | Entrée facultative | 1 à 4 | INT8, UINT8 |
OutputTensor | Sortie | 2 à 4 | INT8, UINT8 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
Tenseur | Gentil | Nombres de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
ATensor | Entrée | 4 | INT8, UINT8 |
AScaleTensor | Entrée | 4 | FLOAT32 |
AZeroPointTensor | Entrée facultative | 4 | INT8, UINT8 |
BTensor | Entrée | 4 | INT8, UINT8 |
BScaleTensor | Entrée | 4 | FLOAT32 |
BZeroPointTensor | Entrée facultative | 4 | INT8, UINT8 |
OutputScaleTensor | Entrée | 4 | FLOAT32 |
OutputZeroPointTensor | Entrée facultative | 4 | INT8, UINT8 |
OutputTensor | Sortie | 4 | INT8, UINT8 |
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 10 Build 20348 |
serveur minimum pris en charge | Windows 10 Build 20348 |
d’en-tête | directml.h |