struttura DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC (directml.h)
Esegue una funzione di moltiplicazione della matrice sui dati quantizzati. Questo operatore equivale matematicamente a dequantizzare gli input, quindi a eseguire la moltiplicazione della matrice e quindi a quantizzare l'output.
Questo operatore richiede che i tensori di input di moltiplicazione della matrice siano 4D formattati come { BatchCount, ChannelCount, Height, Width }
. L'operatore di moltiplicazione matrice eseguirà BatchCount * ChannelCount numero di moltiplicazioni di matrici indipendenti.
Ad esempio, se
Funzione Dequantize
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Funzione Quantize
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
Sintassi
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;
};
Membri
ATensor
Tipo: const DML_TENSOR_DESC*
Tensore contenente i dati A. Le dimensioni del tensore devono essere { BatchCount, ChannelCount, M, K }
.
AScaleTensor
Tipo: const DML_TENSOR_DESC*
Tensore contenente i dati di scala ATensor. Le dimensioni previste del AScaleTensor
sono { 1, 1, 1, 1 }
se è necessaria la quantizzazione per tensore o { 1, 1, M, 1 }
se è necessaria la quantizzazione per riga. Questi valori di scala vengono usati per dequantizzare i valori A.
Nota
Un valore di scala pari a 0 comporta un comportamento non definito.
AZeroPointTensor
Tipo: _Maybenull_ const DML_TENSOR_DESC*
Tensore facoltativo contenente i dati ATensor punto zero. Le dimensioni previste di AZeroPointTensor sono { 1, 1, 1, 1 }
se è necessaria la quantizzazione per tensor o { 1, 1, M, 1 }
se è necessaria la quantizzazione per riga. Questi valori di zero punti vengono usati per dequantizzare i valori ATensor.
BTensor
Tipo: const DML_TENSOR_DESC*
Tensore contenente i dati B. Le dimensioni del tensore devono essere { BatchCount, ChannelCount, K, N }
.
BScaleTensor
Tipo: const DML_TENSOR_DESC*
Tensore contenente i dati di scalabilità di BTensor. Le dimensioni previste del BScaleTensor
sono { 1, 1, 1, 1 }
se è necessaria la quantizzazione per tensore o { 1, 1, 1, N }
se è necessaria la quantizzazione per colonna. Questi valori di scala vengono usati per dequantizzare i valori
Nota
Un valore di scala pari a 0 comporta un comportamento non definito.
BZeroPointTensor
Tipo: _Maybenull_ const DML_TENSOR_DESC*
Tensore facoltativo contenente i dati BTensor zero punti. Le dimensioni previste del BZeroPointTensor
sono { 1, 1, 1, 1 }
se è necessaria la quantizzazione per tensore o { 1, 1, 1, N }
se è necessaria la quantizzazione per colonna. Questi valori di zero punti vengono usati per dequantizzare i valori di BTensor
OutputScaleTensor
Tipo: const DML_TENSOR_DESC*
Tensore contenente i dati di scalabilità di OutputTensor. Le dimensioni previste del OutputScaleTensor
sono { 1, 1, 1, 1 }
se è necessaria la quantizzazione per tensore o { 1, 1, M, 1 }
se è necessaria la quantizzazione per riga. Questo valore di scala viene usato per dequantizzare i valori OutputTensor.
Nota
Un valore di scala pari a 0 comporta un comportamento non definito.
OutputZeroPointTensor
Tipo: _Maybenull_ const DML_TENSOR_DESC*
Tensore facoltativo contenente il OutputTensor dati di zero punti. Le dimensioni previste del OutputZeroPointTensor
sono { 1, 1, 1, 1 }
se è necessaria la quantizzazione per tensore o { 1, 1, M, 1 }
se è necessaria la quantizzazione per riga. Questo valore zero point viene usato per dequantizzare i valori OutputTensor.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Tensore in cui scrivere i risultati. Le dimensioni del tensore sono { BatchCount, ChannelCount, M, N }
.
Disponibilità
Questo operatore è stato introdotto in DML_FEATURE_LEVEL_2_1
.
Vincoli tensor
- AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensore OutputZeroPointTensor devono avere lo stesso DimensionCount.
- ATensor, BTensore OutputTensor devono avere lo stesso DimensionCount.
- BTensor e BZeroPointTensor devono avere lo stesso DataType.
- OutputTensor e OutputZeroPointTensor devono avere lo stesso DataType.
- AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensore OutputZeroPointTensor devono avere lo stesso DimensionCount.
- ATensor e AZeroPointTensor devono avere lo stesso DataType.
Supporto tensor
DML_FEATURE_LEVEL_4_0 e versioni successive
Tensore | Gentile | Conteggi delle dimensioni supportati | Tipi di dati supportati |
---|---|---|---|
ATensor | Immissione | da 2 a 4 | INT8, UINT8 |
AScaleTensor | Immissione | Da 1 a 4 | FLOAT32 |
AZeroPointTensor | Input facoltativo | Da 1 a 4 | INT8, UINT8 |
BTensor | Immissione | da 2 a 4 | INT8, UINT8 |
BScaleTensor | Immissione | Da 1 a 4 | FLOAT32 |
BZeroPointTensor | Input facoltativo | Da 1 a 4 | INT8, UINT8 |
OutputScaleTensor | Immissione | Da 1 a 4 | FLOAT32 |
OutputZeroPointTensor | Input facoltativo | Da 1 a 4 | INT8, UINT8 |
OutputTensor | Prodotto | da 2 a 4 | INT8, UINT8 |
DML_FEATURE_LEVEL_2_1 e versioni successive
Tensore | Gentile | Conteggi delle dimensioni supportati | Tipi di dati supportati |
---|---|---|---|
ATensor | Immissione | 4 | INT8, UINT8 |
AScaleTensor | Immissione | 4 | FLOAT32 |
AZeroPointTensor | Input facoltativo | 4 | INT8, UINT8 |
BTensor | Immissione | 4 | INT8, UINT8 |
BScaleTensor | Immissione | 4 | FLOAT32 |
BZeroPointTensor | Input facoltativo | 4 | INT8, UINT8 |
OutputScaleTensor | Immissione | 4 | FLOAT32 |
OutputZeroPointTensor | Input facoltativo | 4 | INT8, UINT8 |
OutputTensor | Prodotto | 4 | INT8, UINT8 |
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 10 Build 20348 |
server minimo supportato | Windows 10 Build 20348 |
intestazione |
directml.h |