Partager via


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