Compartir a través de


estructura DML_DIAGONAL_MATRIX_OPERATOR_DESC (directml.h)

Genera una matriz similar a la identidad con una (u otro valor explícito) en la diagonal principal y ceros en cualquier otro lugar. Las diagonales se pueden desplazar (a través de Desplazamiento) donde OutputTensor[i, i + Offset] = Value, lo que significa que un argumento de Offset 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 que los modelos eviten 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.

for each coordinate in OutputTensor
    OutputTensor[coordinate] = if (coordinate.y + Offset == coordinate.x) then Value else 0
endfor

Sintaxis

struct DML_DIAGONAL_MATRIX_OPERATOR_DESC {
  const DML_TENSOR_DESC *OutputTensor;
  INT                   Offset;
  FLOAT                 Value;
};

Miembros

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.

Offset

Tipo: INT

Desplazamiento para desplazar las líneas diagonales de Value, con desplazamientos positivos que desplazan el valor escrito a la derecha o hacia arriba (viendo la salida como una matriz con la parte superior izquierda como 0,0) y desplazamientos negativos hacia la izquierda o hacia abajo.

Value

Tipo: FLOAT

Valor que se va a rellenar a lo largo de la diagonal 2D. El valor estándar es 1.0. Tenga en cuenta que si el tipo de datos de los tensores no es DML_TENSOR_DATA_TYPE_FLOAT16 o DML_TENSOR_DATA_TYPE_FLOAT32, el valor podría truncarse (por ejemplo, 10,6 se convertirá en 10).

Ejemplos

Matriz de identidad predeterminada:

Offset: 0
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
    [[[[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]]]]

Desplazar uno hacia la derecha o hacia arriba:

Offset: 1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
    [[[[ 0, 1, 0],
       [ 0, 0, 1],
       [ 0, 0, 0]]]]

Desplazar uno hacia la izquierda o hacia abajo:

Offset: -1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
    [[[[0, 0],
       [1, 0],
       [0, 1]]]]

Desplaza la línea diagonal de las hasta ahora que todas se convierten en ceros:

Offset: -3
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
    [[[[0, 0],
       [0, 0],
       [0, 0]]]]

Comentarios

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_2_0.

Compatibilidad con Tensor

DML_FEATURE_LEVEL_5_1 y versiones posteriores

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

DML_FEATURE_LEVEL_4_0 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
OutputTensor Resultados De 2 a 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
OutputTensor Resultados 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_0 y versiones posteriores

Tensor Clase Recuentos de dimensiones admitidos Tipos de datos admitidos
OutputTensor Resultados 4 FLOAT32, FLOAT16

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 2004 (10.0; Compilación 19041)
Servidor mínimo compatible Windows Server, versión 2004 (10.0; Compilación 19041)
Encabezado directml.h