Partager via


structure DML_DIAGONAL_MATRIX1_OPERATOR_DESC (directml.h)

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