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 |