struttura DML_TOP_K1_OPERATOR_DESC (directml.h)
Seleziona gli elementi più grandi o più piccoli K da ogni sequenza lungo un asse del InputTensore restituisce rispettivamente i valori e gli indici di tali elementi nella OutputValueTensor e OutputIndexTensor. Un sequenza di
La scelta di selezionare gli elementi K più grandi o i più piccoli elementi K può essere controllata usando AxisDirection.
Sintassi
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;
};
Membri
InputTensor
Tipo: const DML_TENSOR_DESC*
Tensore di input contenente elementi da selezionare.
OutputValueTensor
Tipo: const DML_TENSOR_DESC*
Tensore di output in cui scrivere i valori degli elementi
I valori di
OutputIndexTensor
Tipo: const DML_TENSOR_DESC*
Tensore di output in cui scrivere gli indici degli elementi K superiore. Questo tensore deve avere dimensioni uguali al
Gli indici restituiti in questo tensore vengono misurati rispetto all'inizio della loro sequenza (anziché all'inizio del tensore). Ad esempio, un indice pari a 0 fa sempre riferimento al primo elemento per tutte le sequenze in un asse.
Nei casi in cui due o più elementi nella parte superiore K hanno lo stesso valore (ovvero quando è presente un legame), gli indici di entrambi gli elementi vengono inclusi e vengono garantiti l'ordinamento in base all'indice degli elementi crescente. Si noti che questo valore è true indipendentemente dal valore di AxisDirection.
Axis
Indice della dimensione in cui selezionare gli elementi. Questo valore deve essere minore del DimensionCount del InputTensor.
K
Numero di elementi da selezionare. K deve essere maggiore di 0, ma minore del numero di elementi nel InputTensor lungo la dimensione specificata da Asse.
AxisDirection
Tipo: DML_AXIS_DIRECTION
Valore dell'enumerazione DML_AXIS_DIRECTION. Se impostato su DML_AXIS_DIRECTION_INCREASING, questo operatore restituisce gli elementi più piccoliK in ordine di aumento del valore. In caso contrario, restituisce gli elementi più grandiK in ordine decrescente.
Esempi
Esempio 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]]]]
Esempio 2. Uso di un asse diverso
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]]]]
Esempio 3. Valori associati
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]]]]
Esempio 4. Direzione dell'asse crescente
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]]]]
Osservazioni
Quando AxisDirection è impostato su DML_AXIS_DIRECTION_DECREASING, questo operatore equivale a DML_TOP_K_OPERATOR_DESC.
Disponibilità
Questo operatore è stato introdotto in DML_FEATURE_LEVEL_2_1
.
Vincoli tensor
- InputTensor, OutputIndexTensore OutputValueTensor devono avere lo stesso DimensionCount.
- inputTensor e OutputValueTensor devono avere lo stesso DataType.
Supporto tensor
DML_FEATURE_LEVEL_5_0 e versioni successive
Tensore | Gentile | Conteggi delle dimensioni supportati | Tipi di dati supportati |
---|---|---|---|
InputTensor | Immissione | Da 1 a 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputValueTensor | Prodotto | Da 1 a 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputIndexTensor | Prodotto | Da 1 a 8 | UINT64, UINT32 |
DML_FEATURE_LEVEL_3_1 e versioni successive
Tensore | Gentile | Conteggi delle dimensioni supportati | Tipi di dati supportati |
---|---|---|---|
InputTensor | Immissione | Da 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Prodotto | Da 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Prodotto | Da 1 a 8 | UINT32 |
DML_FEATURE_LEVEL_2_1 e versioni successive
Tensore | Gentile | Conteggi delle dimensioni supportati | Tipi di dati supportati |
---|---|---|---|
InputTensor | Immissione | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Prodotto | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Prodotto | 4 | UINT32 |
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 10 Build 20348 |
server minimo supportato | Windows 10 Build 20348 |
intestazione |
directml.h |