DML_DIAGONAL_MATRIX_OPERATOR_DESC structure (directml.h)
Génère une matrice semblable à une identité avec des valeurs (ou une autre valeur explicite) sur la diagonale principale et des zéros partout ailleurs. Les diagonales peuvent être décalées (via Offset) où OutputTensor[i, i + Offset]
= Value, ce qui signifie qu’un argument Offset supérieur à zéro déplace toutes les valeurs vers la 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 tenseur 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 tenseur est traité comme une pile de matrices 2D.
Cet opérateur exécute le pseudocode suivant.
for each coordinate in OutputTensor
OutputTensor[coordinate] = if (coordinate.y + Offset == coordinate.x) then Value else 0
endfor
Syntaxe
struct DML_DIAGONAL_MATRIX_OPERATOR_DESC {
const DML_TENSOR_DESC *OutputTensor;
INT Offset;
FLOAT Value;
};
Membres
OutputTensor
Type : const DML_TENSOR_DESC*
Tenseur 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.
Offset
Type : INT
Décalage pour décaler les lignes diagonales de Valeur, avec des décalages positifs décalant la valeur écrite vers la droite/vers le haut (affichage de la sortie sous la forme d’une matrice avec le haut à gauche comme 0,0) et des décalages négatifs vers la gauche/vers le bas.
Value
Type : FLOAT
Valeur à remplir le long de la diagonale 2D. La valeur standard est 1.0. Notez que si le DataType des tenseurs n’est pas DML_TENSOR_DATA_TYPE_FLOAT16 ou DML_TENSOR_DATA_TYPE_FLOAT32, la valeur peut être tronquée (par exemple, 10,6 devient 10).
Exemples
Matrice d’identité par défaut :
Offset: 0
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]]]
Déplacer vers la droite/vers le haut :
Offset: 1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[ 0, 1, 0],
[ 0, 0, 1],
[ 0, 0, 0]]]]
Décaler vers la gauche/vers le bas :
Offset: -1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[0, 0],
[1, 0],
[0, 1]]]]
Déplacez la ligne diagonale de ceux qui deviennent tous des zéros :
Offset: -3
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[0, 0],
[0, 0],
[0, 0]]]]
Remarques
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_0
.
Prise en charge des tenseurs
DML_FEATURE_LEVEL_5_1 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
OutputTensor | Sortie | 2 à 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_4_0 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
OutputTensor | Sortie | 2 à 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
OutputTensor | Sortie | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_0 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
OutputTensor | Sortie | 4 | FLOAT32, FLOAT16 |
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10, version 2004 (10.0 ; Build 19041) |
Serveur minimal pris en charge | Windows Server, version 2004 (10.0 ; Build 19041) |
En-tête | directml.h |