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 diagonales se pueden desplazar en 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 realiza 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 de DirectML (consulte Microsoft.AI.DirectML versión 1.9 y posteriores). Consulte también 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 van a escribir los resultados. Las dimensiones son { Batch1, Batch2, OutputHeight, OutputWidth }. No es necesario que el alto y el ancho sean cuadrados.

ValueDataType

Tipo: DML_TENSOR_DATA_TYPE

Tipo de datos del miembro Value , que debe coincidir con OutputTensor::D ataType.

Value

Tipo: DML_SCALAR_UNION

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

DiagonalFillBegin

Tipo: INT

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

DiagonalFillEnd

Tipo: INT

Límite superior (final exclusivo) del intervalo que se va a rellenar con Value. Si el principio y el final se invierten (fin inicial > ), 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 ancha 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 diagonal superior derecha (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 a lo largo de la diagonal, con ceros en todos los demás.

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]]

Observaciones

Este operador equivale a DML_DIAGONAL_MATRIX_OPERATOR_DESC cuando DiagonalFillBegin está establecido 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 tensor

InputTensor y OutputTensor deben tener el mismo DataType y DimensionCount.

Compatibilidad con Tensor

Tensor Variante Recuentos de dimensiones admitidos Supported data types (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