DML_NONZERO_COORDINATES_OPERATOR_DESC structure (directml.h)
Calcule les coordonnées de n dimensions de tous les éléments non nuls du tenseur d’entrée.
Cet opérateur produit une matrice MxN de valeurs, où chaque ligne M contient une coordonnée de N dimensions d’une valeur autre que zéro de l’entrée. Lors de l’utilisation d’entrées FLOAT32 ou FLOAT16 , 0 négatif et positif (0,0f et -0,0f) sont traités comme zéro aux fins de cet opérateur.
L’opérateur exige que l’élément OutputCoordinatesTensor ait une taille suffisamment grande pour prendre en charge un scénario dans le pire des cas où chaque élément de l’entrée est différent de zéro. Cet opérateur retourne le nombre d’éléments autres que zéro par le biais du OutputCountTensor, que les appelants peuvent inspecter pour déterminer le nombre de coordonnées écrites dans outputCoordinatesTensor.
Syntaxe
struct DML_NONZERO_COORDINATES_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputCountTensor;
const DML_TENSOR_DESC *OutputCoordinatesTensor;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur d’entrée.
OutputCountTensor
Type : const DML_TENSOR_DESC*
Tenseur de sortie qui contient le nombre d’éléments non nuls dans le tenseur d’entrée. Ce tenseur doit être un scalaire, c’est-à-dire que les tailles de ce tenseur doivent toutes être 1. Le type de ce tenseur doit être UINT32.
OutputCoordinatesTensor
Type : const DML_TENSOR_DESC*
Tenseur de sortie qui contient les coordonnées ndimensionnelles des éléments d’entrée qui ne sont pas zéro.
Ce tenseur doit avoir des tailles de {1,1,M,N}
(si DimensionCount a la valeur 4) ou {1,1,1,M,N}
(si DimensionCount a la valeur 5), où M est le nombre total d’éléments dans le InputTensor, et N est supérieur ou égal au rang effectif de InputTensor, jusqu’au DimensionCount de l’entrée.
Le rang effectif d’un tenseur est déterminé par le DimensionCount de ce tenseur, à l’exclusion des dimensions de début de taille 1. Par exemple, un tenseur avec des tailles de {1,2,3,4}
a le rang effectif 3, tout comme un tenseur avec des tailles de {1,1,5,5,5}
. Un tenseur avec des {1,1,1,1}
tailles a le rang effectif 0.
Prenons l’exemple d’un InputTensor avec des tailles de {1,1,12,5}
. Ce tenseur d’entrée contient 60 éléments et a un rang effectif de 2. Dans cet exemple, toutes les tailles valides de OutputCoordinatesTensor sont de la forme {1,1,60,N}
, où N >= 2 mais pas supérieur à DimensionCount (4 dans cet exemple).
Les coordonnées écrites dans ce tenseur sont assurées d’être triées par l’index d’élément croissant. Par exemple, si le tenseur d’entrée a 3 valeurs non nulles {1,0}aux coordonnées , {1,2}et {0,5}, les valeurs écrites dans OutputCoordinatesTensor seront [[0,5], [1,0], [1,2]]
.
Bien que ce tenseur exige que sa dimension M soit égale au nombre d’éléments dans le tenseur d’entrée, cet opérateur n’écrit qu’un maximum d’éléments OutputCount dans ce tenseur. Le OutputCount est retourné par le biais du OutputCountTensor scalaire.
Notes
Les éléments restants de ce tenseur au-delà de OutputCount ne sont pas définis une fois cet opérateur terminé. Vous ne devez pas vous appuyer sur les valeurs de ces éléments.
Exemple
InputTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[1.0f, 0.0f, 0.0f, 2.0f],
[-0.0f, 3.5f, 0.0f, -5.2f]]
OutputCountTensor: (Sizes:{1,1,1,1}, DataType:UINT32)
[4]
OutputCoordinatesTensor: (Sizes:{1,1,8,3}, DataType:UINT32)
[[0, 0, 0],
[0, 0, 3],
[0, 1, 1],
[0, 1, 3],
[0, 0, 0], //
[0, 0, 0], // Values in rows >= OutputCountTensor (4 in
[0, 0, 0], // this case) are left undefined
[0, 0, 0]] //
Remarques
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_3_0
.
Prise en charge des tenseurs
DML_FEATURE_LEVEL_4_0 et versions ultérieures
Tenseur | Genre | Dimensions | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|---|
InputTensor | Entrée | { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputCountTensor | Sortie | { [1], [1], [1], [1], [1], [1], [1], 1 } | 1 à 8 | UINT32 |
OutputCoordinatesTensor | Sortie | { [1], [1], [1], [1], [1], [1], [1], M, N } | 2 à 8 | UINT32 |
DML_FEATURE_LEVEL_3_0 et versions ultérieures
Tenseur | Genre | Dimensions | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|---|
InputTensor | Entrée | { [D0], D1, D2, D3, D4 } | 4 à 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputCountTensor | Sortie | { [1], 1, 1, 1, 1 } | 4 à 5 | UINT32 |
OutputCoordinatesTensor | Sortie | { [1], 1, 1, M, N } | 4 à 5 | UINT32 |
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10 Build 20348 |
Serveur minimal pris en charge | Windows 10 Build 20348 |
En-tête | directml.h |