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 |