Partager via


structure DML_TOP_K1_OPERATOR_DESC (directml.h)

Sélectionne les éléments K les plus volumineux ou les plus petits à partir de chaque séquence le long d’un axe duInputTensor , puis retourne les valeurs et les index de ces éléments dans le 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 duInputTensor .

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 , sauf pour la dimension spécifiée par le paramètre axe , qui doit avoir une taille égale à K.

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 , sauf pour la dimension spécifiée par le paramètre axe , qui doit avoir une taille égale à K.

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 duInputTensor .

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 Axe.

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