Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Génère une matrice de type identité avec une valeur (ou une autre valeur explicite) le long de l’étendue diagonale donnée, avec d’autres éléments remplis avec les valeurs d’entrée ou les 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 moins de 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 tensoriel constant volumineux. Toutes les dimensions de début avant les deux dernières sont traitées comme un nombre de lots, ce qui signifie que le tensoriel 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 tensoreur d’entrée facultatif.
OutputTensor
Type : const DML_TENSOR_DESC*
Le capteur dans lequel écrire les résultats. Les dimensions sont { Batch1, Batch2, OutputHeight, OutputWidth }. La hauteur et la largeur n’ont pas besoin d’être carrées.
ValueDataType
Type : DML_TENSOR_DATA_TYPE
Type de données du membre Value , qui doit correspondre à OutputTensor ::D ataType.
Value
Type : DML_SCALAR_UNION
Valeur constante pour remplir la sortie, avec ValueDataType déterminant comment interpréter le membre.
DiagonalFillBegin
Type : INT
Limite inférieure (début inclus) de la plage à remplir avec valeur. Si le début et la fin sont inversés (fin de début > ), le remplissage est inversé.
DiagonalFillEnd
Type : INT
Limite supérieure (fin exclusive) de la plage à remplir avec valeur. Si le début et la fin sont inversés (fin de début > ), 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 à 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 le bas à 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]]
Remarques
Cet opérateur équivaut à DML_DIAGONAL_MATRIX_OPERATOR_DESC lorsque DiagonalFillBegin est défini sur DML_OPERATOR_DIAGONAL_MATRIX ::Offset, et 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 Tensor
InputTensor et OutputTensor doivent avoir le même DataType et DimensionCount.
Prise en charge de Tensor
| Tenseur | Genre | Nombres 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 |
| Tenseur de sortie | Sortie | 2 à 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
Spécifications
| En-tête | directml.h |