Structure DML_DIAGONAL_MATRIX1_OPERATOR_DESC (directml.h)
Génère une matrice de type identité avec des 1 (ou une autre valeur si explicite) le long de l’étendue diagonale donnée. Les autres éléments sont remplis avec les valeurs d’entrée ou des zéros (si aucun InputTensor n’est passé). Les valeurs diagonales peuvent être décalées n’importe où entre DiagonalFillBegin et DiagonalFillEnd, où une valeur supérieure à zéro déplace toutes les valeurs à droite, et une valeur inférieure à zéro les déplace vers la gauche. Cet opérateur de générateur est utile pour les modèles afin d’éviter de stocker un tenseur de constantes volumineux. Toutes les dimensions précédant les deux dernières sont traitées comme un nombre de lots, ce qui signifie que le tenseur est traité comme une pile de matrices 2D. Cet opérateur effectue le pseudocode suivant :
// 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
Important
Cette API est disponible dans le cadre du package redistribuable autonome DirectML (voir Microsoft.AI.DirectML version 1.9 et ultérieures). Consultez également l’historique des versions DirectML.
Syntaxe
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;
};
Membres
InputTensor
Type : _Maybenull_ const DML_TENSOR_DESC*
Un tenseur d’entrée facultatif.
OutputTensor
Type : const DML_TENSOR_DESC*
Tenseur dans lequel le résultat doit être écrit. Les dimensions sont { Batch1, Batch2, OutputHeight, OutputWidth }
. La hauteur et la largeur n’ont pas besoin d’être carré.
ValueDataType
Type : DML_TENSOR_DATA_TYPE
Type de données du membre Value, devant correspondre à OutputTensor::DataType.
Value
Type : DML_SCALAR_UNION
Valeur constante pour remplir la sortie, avec ValueDataType déterminant comment interpréter le membre.
DiagonalFillBegin
Type : ENT
Limite inférieure (début inclus) de la plage à remplir avec Value. Si le début et la fin sont inversés (début > fin), le remplissage est inversé.
DiagonalFillEnd
Type : ENT
Limite supérieure (fin exclue) de la plage à remplir avec Value. Si le début et la fin sont inversés (début > fin), le remplissage est inversé.
Exemples
Matrice d’identité par défaut :
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]]
Remplissez une bande diagonale large de 3 éléments :
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]]
Conservez la moitié diagonale supérieure droite (le triangle strictement supérieur), en mettant à zéro la partie inférieure gauche.
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]]
Conservez uniquement les valeurs le long de la diagonale, en mettant à zéro tous les autres.
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]]
Notes
Cet opérateur équivaut à DML_DIAGONAL_MATRIX_OPERATOR_DESC lorsque DiagonalFillBegin est défini sur DML_OPERATOR_DIAGONAL_MATRIX::Offset, et que DiagonalFillEnd est défini sur DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_5_1.
Contraintes de tenseur
InputTensor et OutputTensor doivent avoir le même DataType et DimensionCount.
Prise en charge des tenseurs
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée facultative | 2 à 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Sortie | 2 à 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
Spécifications
En-tête | directml.h |