Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 |