Compartir a través de


estructura DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC (directml.h)

Realiza una función de multiplicación de matriz en datos cuantificados. Este operador es matemáticamente equivalente a descatar las entradas, luego realizar la multiplicación de matriz y, a continuación, cuantizar la salida.

Este operador requiere que la matriz multiplique los tensores de entrada para que sean 4D con formato { BatchCount, ChannelCount, Height, Width }. El operador de multiplicación de matriz realizará BatchCount * ChannelCount número de multiplicaciones de matriz independientes.

Por ejemplo, si ATensor tiene Tamaños de { BatchCount, ChannelCount, M, K }, y BTensor tiene Tamaños de { BatchCount, ChannelCount, K, N }y OutputTensor tiene Tamaños de { BatchCount, ChannelCount, M, N }, el operador de multiplicación de matriz realizará las multiplicaciones de matrices independientes de BatchCount * ChannelCount de dimensiones {M,K} x {K,N} = {M,N}.

Función Dequantize

f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale

Quantize (función)

f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)

Sintaxis

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;
};

Miembros

ATensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los datos A. Las dimensiones de este tensor deben ser { BatchCount, ChannelCount, M, K }.

AScaleTensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los datos de escala de ATensor. Las dimensiones esperadas de AScaleTensor son { 1, 1, 1, 1 } si se requiere la cuantificación por tensor, o { 1, 1, M, 1 } si se requiere la cuantificación por fila. Estos valores de escala se usan para desquantizar los valores A.

AZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor opcional que contiene los datos de punto cero de ATensor . Las dimensiones esperadas de AZeroPointTensor son { 1, 1, 1, 1 } si se requiere la cuantificación por tensor, o { 1, 1, M, 1 } si se requiere la cuantificación por fila. Estos valores de punto cero se usan para desquiantizar los valores de ATensor.

BTensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los datos B. Las dimensiones de este tensor deben ser { BatchCount, ChannelCount, K, N }.

BScaleTensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los datos de escala de BTensor . Las dimensiones esperadas de BScaleTensor son { 1, 1, 1, 1 } si se requiere la cuantificación por tensor o { 1, 1, 1, N } si se requiere la cuantificación por columna. Estos valores de escala se usan para desquiantizar los valores de BTensor .

BZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor opcional que contiene los datos de punto cero de BTensor . Las dimensiones esperadas de BZeroPointTensor son { 1, 1, 1, 1 } si se requiere la cuantificación por tensor o { 1, 1, 1, N } si se requiere la cuantificación por columna. Estos valores de punto cero se usan para desquiantizar los valores BTensor .

OutputScaleTensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los datos de escalado de OutputTensor . Las dimensiones esperadas de OutputScaleTensor son { 1, 1, 1, 1 } si se requiere la cuantificación por tensor o { 1, 1, M, 1 } si se requiere la cuantificación por fila. Este valor de escala se usa para desquiantizar los valores outputTensor .

OutputZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor opcional que contiene los datos de punto cero outputTensor . Las dimensiones esperadas de OutputZeroPointTensor son { 1, 1, 1, 1 } si se requiere la cuantificación por tensor o { 1, 1, M, 1 } si se requiere la cuantificación por fila. Este valor de punto cero se usa para desquiantizar los valores outputTensor .

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor en el que se van a escribir los resultados. Las dimensiones de este tensor son { BatchCount, ChannelCount, M, N }.

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_2_1.

Restricciones tensor

  • AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensor y OutputZeroPointTensor deben tener el mismo DimensionCount.
  • ATensor, BTensor y OutputTensor deben tener el mismo DimensionCount.
  • BTensor y BZeroPointTensor deben tener el mismo DataType.
  • OutputTensor y OutputZeroPointTensor deben tener el mismo DataType.
  • AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensor y OutputZeroPointTensor deben tener el mismo DimensionCount.
  • ATensor y AZeroPointTensor deben tener el mismo DataType.

Compatibilidad con Tensor

DML_FEATURE_LEVEL_4_0 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
ATensor Entrada De 2 a 4 INT8, UINT8
AScaleTensor Entrada De 1 a 4 FLOAT32
AZeroPointTensor Entrada opcional De 1 a 4 INT8, UINT8
BTensor Entrada De 2 a 4 INT8, UINT8
BScaleTensor Entrada De 1 a 4 FLOAT32
BZeroPointTensor Entrada opcional De 1 a 4 INT8, UINT8
OutputScaleTensor Entrada De 1 a 4 FLOAT32
OutputZeroPointTensor Entrada opcional De 1 a 4 INT8, UINT8
OutputTensor Resultados De 2 a 4 INT8, UINT8

DML_FEATURE_LEVEL_2_1 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
ATensor Entrada 4 INT8, UINT8
AScaleTensor Entrada 4 FLOAT32
AZeroPointTensor Entrada opcional 4 INT8, UINT8
BTensor Entrada 4 INT8, UINT8
BScaleTensor Entrada 4 FLOAT32
BZeroPointTensor Entrada opcional 4 INT8, UINT8
OutputScaleTensor Entrada 4 FLOAT32
OutputZeroPointTensor Entrada opcional 4 INT8, UINT8
OutputTensor Resultados 4 INT8, UINT8

Requisitos

   
Cliente mínimo compatible compilación 20348 de Windows 10
Servidor mínimo compatible compilación 20348 de Windows 10
Encabezado directml.h