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_1
eingefü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 |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für