structure DML_TOP_K_OPERATOR_DESC (directml.h)
Sélectionne les plus grands éléments K de chaque séquence le long d’un axe du InputTensor et retourne les valeurs et les index de ces éléments dans outputValueTensor et OutputIndexTensor, respectivement. Une séquence fait référence à l’un des ensembles d’éléments qui existent le long de la dimension Axe du inputTensor.
Syntaxe
struct DML_TOP_K_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputValueTensor;
const DML_TENSOR_DESC *OutputIndexTensor;
UINT Axis;
UINT K;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur d’entrée contenant les éléments à sélectionner.
OutputValueTensor
Type : const DML_TENSOR_DESC*
Tenseur de sortie dans lequel écrire les valeurs des éléments K supérieurs. Ce tenseur doit avoir des tailles égales à inputTensor, à l’exception de la dimension spécifiée par le paramètre Axis , qui doit avoir une taille égale à K.
Les valeurs K sélectionnées à partir de chaque séquence d’entrée sont triées de façon décroissante (de la plus grande à la plus petite).
OutputIndexTensor
Type : const DML_TENSOR_DESC*
Tenseur de sortie dans lequel écrire les index des éléments K supérieurs. Ce tenseur doit avoir des tailles égales à inputTensor, à l’exception de la dimension spécifiée par le paramètre Axis , qui doit avoir une taille égale à K.
Les index retournés dans ce tenseur sont mesurés par rapport au début de leur séquence (par opposition au début du tenseur). Par exemple, un index de 0 fait toujours référence au premier élément pour toutes les séquences d’un axe.
Dans les cas où deux éléments ou plus dans le K supérieur ont la même valeur (c’est-à-dire, en cas d’égalité), les index des deux éléments sont inclus et sont assurés d’être triés par l’index d’élément croissant.
Axis
Type : UINT
Index de la dimension dans laquelle sélectionner des éléments. Cette valeur doit être inférieure à dimensionCount de l’inputTensor.
K
Type : UINT
Nombre d’éléments à sélectionner. K doit être supérieur à 0, mais inférieur au nombre d’éléments du inputTensor le long de la dimension spécifiée par Axis.
Exemples
Exemple 1
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 0, 1, 10, 11],
[ 3, 2, 9, 8],
[ 4, 5, 6, 7]]]]
Axis: 3
K: 2
OutputValueTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[11, 10],
[ 9, 8],
[ 7, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,2}, DataType:UINT32)
[[[[3, 2],
[2, 3],
[3, 2]]]]
Exemple 2. Utilisation d’un autre axe
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 0, 1, 10, 11],
[ 3, 2, 9, 8],
[ 4, 5, 6, 7]]]]
Axis: 2
K: 2
OutputValueTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[[[ 4, 5, 10, 11],
[ 3, 2, 9, 8]]]]
OutputIndexTensor: (Sizes:{1,1,2,4}, DataType:UINT32)
[[[[2, 2, 0, 0],
[1, 1, 1, 1]]]]
Exemple 3. Valeurs liées
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 3],
[3, 4, 5, 5],
[6, 6, 6, 6]]]]
Axis: 3
K: 3
OutputValueTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[3, 2, 2],
[5, 5, 4],
[6, 6, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,3}, DataType:UINT32)
[[[[3, 1, 2],
[2, 3, 1],
[0, 1, 2]]]]
Notes
Une version plus récente de cet opérateur, DML_TOP_K1_OPERATOR_DESC, a été introduite dans DML_FEATURE_LEVEL_2_1
.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_0
.
Contraintes tensoriels
- InputTensor, OutputIndexTensor et OutputValueTensor doivent avoir le même DimensionCount.
- InputTensor et OutputValueTensor doivent avoir le même DataType.
Prise en charge de Tensor
DML_FEATURE_LEVEL_5_0 et versions ultérieures
Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputValueTensor | Output | 1 à 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputIndexTensor | Output | 1 à 8 | UINT64, UINT32 |
DML_FEATURE_LEVEL_3_1 et versions ultérieures
Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Output | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Output | 1 à 8 | UINT32 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Output | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Output | 4 | UINT32 |
DML_FEATURE_LEVEL_2_0 et versions ultérieures
Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 4 | FLOAT32, FLOAT16 |
OutputValueTensor | Output | 4 | FLOAT32, FLOAT16 |
OutputIndexTensor | Output | 4 | UINT32 |
Spécifications
En-tête | directml.h |