Compartir a través de


Estructura DML_DIAGONAL_MATRIX1_OPERATOR_DESC (directml.h)

Genera una matriz similar a la identidad con uno (u otro valor explícito) a lo largo del intervalo diagonal especificado, con otros elementos que se rellenan con los valores de entrada o ceros (si no se pasa ningún InputTensor). Los valores de la diagonal se pueden desplazar a cualquier lugar entre DiagonalFillBegin y DiagonalFillEnd, donde un valor mayor que cero desplaza todos los valores a la derecha y menos de cero los desplaza a la izquierda. Este operador de generador es útil para los modelos, para evitar almacenar un tensor constante grande. Las dimensiones iniciales anteriores a las dos últimas se tratan como un recuento de lotes, lo que significa que el tensor se trata como pila de matrices 2D. Este operador desempeña el pseudocódigo siguiente:

// Given each current coordinate's x, figure out the corresponding x on the top (0th) row.
// Then fill it with Value if that x coordinate is either within the fill bounds, or outside
// the fill bounds when inverted. Otherwise, use the original input value or zero.

for each coordinate in OutputTensor
    topX = coordinate.x - coordinate.y
    useValue = (DiagonalFillEnd >= DiagonalFillBegin) ^ (topX >= DiagonalFillBegin) ^ (topX < DiagonalFillEnd)
    OutputTensor[coordinate] = if useValue then Value
                               else if InputTensor not null then InputTensor[coordinate]
                               else 0
endfor

Importante

Esta API está disponible como parte del paquete redistribuible independiente DirectML (consulte la versión 1.9 y versiones posteriores de Microsoft.AI.DirectML). Consulte también el historial de versiones de DirectML.

Sintaxis

struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC
{
    _Maybenull_ const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    DML_TENSOR_DATA_TYPE ValueDataType;
    DML_SCALAR_UNION Value;
    INT DiagonalFillBegin;
    INT DiagonalFillEnd;
};

Miembros

InputTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Un tensor de entrada opcional.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor en el que se va a escribir el resultado. Las dimensiones son { Batch1, Batch2, OutputHeight, OutputWidth }. No es necesario que el alto y el ancho sean cuadrados.

ValueDataType

Tipo: DML_TENSOR_DATA_TYPE

El tipo de datos del miembro Value, que debe coincidir con OutputTensor::DataType.

Value

Tipo: DML_SCALAR_UNION

Un valor constante para rellenar la salida, con ValueDataType que determina cómo interpretar el miembro.

DiagonalFillBegin

Tipo: INT

Límite inferior (principio incluido) del intervalo que se va a rellenar con Value. Si el principio y el final se invierten (principio > final), se invertirá el relleno.

DiagonalFillEnd

Tipo: INT

Límite superior (se excluye el final) del intervalo que se va a rellenar con Value. Si el principio y el final se invierten (principio > final), se invertirá el relleno.

Ejemplos

Matriz de identidad predeterminada:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[1, 0, 0, 0, 0],
     [0, 1, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 1, 0]]

Rellene una franja diagonal con un ancho de 3 elementos:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 3
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[7, 7, 7, 0, 0],
     [0, 7, 7, 7, 0],
     [0, 0, 7, 7, 7],
     [0, 0, 0, 7, 7]]

Mantenga la mitad superior derecha de la diagonal (el triángulo estrictamente superior), con ceros en la parte inferior izquierda.

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: INT32_MIN
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[0, 7, 3, 7, 9],
     [0, 0, 8, 6, 9],
     [0, 0, 0, 8, 7],
     [0, 0, 0, 0, 4]]

Mantenga solo los valores en la diagonal, con ceros en el resto.

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: 1
DiagonalFillEnd: 0
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 0, 0, 0, 0],
     [0, 2, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 2, 0]]

Comentarios

Este operador es equivalente a DML_DIAGONAL_MATRIX_OPERATOR_DESC cuando DiagonalFillBegin se establece en DML_OPERATOR_DIAGONAL_MATRIX::Offset y DiagonalFillEnd se establece en DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1.

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_5_1.

Restricciones de tensor

InputTensor y OutputTensor deben tener los mismos DataType y DimensionCount.

Compatibilidad del tensor

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada opcional De 2 a 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Salida De 2 a 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Requisitos

   
Encabezado directml.h