Freigeben über


DML_TOP_K1_OPERATOR_DESC-Struktur (directml.h)

Wählt die größten oder kleinsten K-Elemente aus jeder Sequenz entlang einer Achse des InputTensor aus und gibt die Werte und Indizes dieser Elemente im OutputValueTensor bzw. OutputIndexTensor zurück. Eine Sequenz bezieht sich auf eines der Elemente, die entlang der Achsendimension des InputTensor vorhanden sind.

Die Wahl, ob die größten K-Elemente oder die kleinsten K-Elemente ausgewählt werden sollen, kann mit AxisDirection gesteuert werden.

Syntax

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;
};

Member

InputTensor

Typ: const DML_TENSOR_DESC*

Der Eingabe-Tensor, der die auszuwählenden Elemente enthält.

OutputValueTensor

Typ: const DML_TENSOR_DESC*

Der Ausgabe tensor, in den die Werte der obersten K-Elemente geschrieben werden sollen. Die obersten K-Elemente werden basierend darauf ausgewählt, ob sie das größte oder das kleinste sind, abhängig vom Wert von AxisDirection. Dieser Tensor muss Größen aufweisen, die dem InputTensorentsprechen, mit Ausnahme der vom Axis-Parameter angegebenen Dimension, die eine Größe von K aufweisen muss.

Die aus jeder Eingabesequenz ausgewählten K-Werte werden garantiert absteigend sortiert (größte bis kleinste), wenn AxisDirectionDML_AXIS_DIRECTION_DECREASING ist. Andernfalls ist das Gegenteil wahr, und die ausgewählten Werte werden garantiert aufsteigend sortiert (klein bis groß).

OutputIndexTensor

Typ: const DML_TENSOR_DESC*

Der Ausgabe-Tensor, in den die Indizes der obersten K-Elemente geschrieben werden sollen. Dieser Tensor muss Größen aufweisen, die dem InputTensorentsprechen, mit Ausnahme der vom Axis-Parameter angegebenen Dimension, die eine Größe von K aufweisen muss.

Die in diesem Tensor zurückgegebenen Indizes werden relativ zum Beginn ihrer Sequenz (im Gegensatz zum Anfang des Tensors) gemessen. Beispielsweise bezieht sich ein Index von 0 immer auf das erste Element für alle Sequenzen in einer Achse.

In Fällen, in denen zwei oder mehr Elemente in der obersten K den gleichen Wert haben (d. h. wenn eine Kopplung vorliegt), sind die Indizes beider Elemente enthalten und werden durch den aufsteigenden Elementindex garantiert sortiert. Beachten Sie, dass dies unabhängig vom Wert von AxisDirection gilt.

Axis

Typ: UINT

Der Index der Dimension, für die Elemente ausgewählt werden sollen. Dieser Wert muss kleiner als der DimensionCount des InputTensor sein.

K

Typ: UINT

Die Anzahl der elemente, die ausgewählt werden sollen. K muss größer als 0 sein, aber kleiner als die Anzahl der Elemente im InputTensor entlang der von Axis angegebenen Dimension.

AxisDirection

Typ: DML_AXIS_DIRECTION

Ein Wert aus der DML_AXIS_DIRECTION-Enumeration . Wenn auf DML_AXIS_DIRECTION_INCREASING festgelegt ist, gibt dieser Operator die kleinstenK-Elemente in der Reihenfolge der Wertsteigerung zurück. Andernfalls werden die größtenK-Elemente in abnehmender Reihenfolge zurückgegeben.

Beispiele

Beispiel 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]]]]

Beispiel 2: Verwenden einer anderen Achse

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]]]]

Beispiel 3: Verknüpfte Werte

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]]]]

Beispiel 4. Erhöhen der Achsenrichtung

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]]]]

Hinweise

Wenn AxisDirection auf DML_AXIS_DIRECTION_DECREASING festgelegt ist, entspricht dieser Operator DML_TOP_K_OPERATOR_DESC.

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_2_1eingeführt.

Tensoreinschränkungen

  • InputTensor, OutputIndexTensor und OutputValueTensor müssen über dieselbe DimensionCount verfügen.
  • InputTensor und OutputValueTensor müssen denselben DataType aufweisen.

Tensorunterstützung

DML_FEATURE_LEVEL_5_0 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 1 bis 8 FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputValueTensor Ausgabe 1 bis 8 FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputIndexTensor Ausgabe 1 bis 8 UINT64, UINT32

DML_FEATURE_LEVEL_3_1 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 1 bis 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputValueTensor Ausgabe 1 bis 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputIndexTensor Ausgabe 1 bis 8 UINT32

DML_FEATURE_LEVEL_2_1 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputValueTensor Ausgabe 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputIndexTensor Ausgabe 4 UINT32

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 10 Build 20348
Unterstützte Mindestversion (Server) Windows 10 Build 20348
Kopfzeile directml.h