structure DML_TOP_K1_OPERATOR_DESC (directml.h)
Sélectionne les éléments
Le choix de sélectionner les plus grands éléments K ou les plus petits éléments K peut être contrôlé à l’aide de AxisDirection.
Syntaxe
struct DML_TOP_K1_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputValueTensor;
const DML_TENSOR_DESC *OutputIndexTensor;
UINT Axis;
UINT K;
DML_AXIS_DIRECTION AxisDirection;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Capteur d’entrée contenant des éléments à sélectionner.
OutputValueTensor
Type : const DML_TENSOR_DESC*
Le tensoriel de sortie dans lequel écrire les valeurs des éléments K supérieurs. Les éléments K supérieurs sont sélectionnés selon qu’ils sont le plus grand ou le plus petit, en fonction de la valeur de AxisDirection. Ce tensor doit avoir des tailles égales auInputTensor
Les valeurs K sélectionnées à partir de chaque séquence d’entrée sont garanties de tri décroissant (la plus grande à la plus petite) si AxisDirection est DML_AXIS_DIRECTION_DECREASING. Dans le cas contraire, l’inverse est vrai et les valeurs sélectionnées sont garanties d’être triées par ordre croissant (plus petite à la plus grande).
OutputIndexTensor
Type : const DML_TENSOR_DESC*
Le tensoriel de sortie dans lequel écrire les index des éléments K principaux. Ce tensor doit avoir des tailles égales auInputTensor
Les index retournés dans ce capteur sont mesurés par rapport au début de leur séquence (par opposition au début du capteur). Par exemple, un index de 0 fait toujours référence au premier élément de toutes les séquences d’un axe.
Dans les cas où deux éléments ou plus dans le haut-K ont la même valeur (autrement dit, lorsqu’il existe une liaison), les index des deux éléments sont inclus et sont garantis d’être classés par index d’élément croissant. Notez que cela est vrai, quelle que soit la valeur de AxisDirection.
Axis
Type : UINT
Index de la dimension dans laquelle sélectionner des éléments. Cette valeur doit être inférieure à la DimensionCount
K
Type : UINT
Nombre d’éléments à sélectionner.
AxisDirection
Type : DML_AXIS_DIRECTION
Valeur de l’énumération DML_AXIS_DIRECTION. S’il est défini sur DML_AXIS_DIRECTION_INCREASING, cet opérateur retourne les plus petits élémentsK dans l’ordre d’augmentation de la valeur. Sinon, elle retourne le plus grandéléments K dans l’ordre décroissant.
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
AxisDirection: DML_AXIS_DIRECTION_DECREASING
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
AxisDirection: DML_AXIS_DIRECTION_DECREASING
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
AxisDirection: DML_AXIS_DIRECTION_DECREASING
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]]]]
Exemple 4. Augmentation de la direction de l’axe
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 3],
[3, 4, 5, 5],
[6, 6, 6, 6]]]]
Axis: 3
K: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputValueTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[1, 2, 2],
[3, 4, 5],
[6, 6, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,3}, DataType:UINT32)
[[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]]
Remarques
Lorsque AxisDirection est défini sur DML_AXIS_DIRECTION_DECREASING, cet opérateur équivaut à DML_TOP_K_OPERATOR_DESC.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_1
.
Contraintes Tensor
- InputTensor , OutputIndexTensoret OutputValueTensor doivent avoir le même DimensionCount.
- InputTensor et OutputValueTensor doivent avoir le même type de données .
Prise en charge de Tensor
DML_FEATURE_LEVEL_5_0 et versions ultérieures
Tenseur | Gentil | Nombres 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 | Sortie | 1 à 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputIndexTensor | Sortie | 1 à 8 | UINT64, UINT32 |
DML_FEATURE_LEVEL_3_1 et versions ultérieures
Tenseur | Gentil | Nombres 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 | Sortie | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Sortie | 1 à 8 | UINT32 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
Tenseur | Gentil | Nombres 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 | Sortie | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Sortie | 4 | UINT32 |
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 10 Build 20348 |
serveur minimum pris en charge | Windows 10 Build 20348 |
d’en-tête | directml.h |