Partager via


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