Condividi tramite


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 fa riferimento a uno dei set di elementi presenti lungo la dimensione Asse della InputTensor.

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 superiore. I primi K elementi vengono selezionati in base al fatto che siano i più grandi o più piccoli, a seconda del valore di AxisDirection. Questo tensore deve avere dimensioni uguali al InputTensor, tranne per la dimensione specificata dal parametro Axis , che deve avere una dimensione uguale a K.

I valori di K selezionati da ogni sequenza di input devono essere ordinati in ordine decrescente (più grande o più piccolo) se AxisDirection è DML_AXIS_DIRECTION_DECREASING. In caso contrario, l'opposto è true e i valori selezionati devono essere ordinati in ordine crescente (dal più piccolo al più grande).

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 InputTensor, tranne per la dimensione specificata dal parametro Axis , che deve avere una dimensione uguale a K.

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

Tipo: UINT

Indice della dimensione in cui selezionare gli elementi. Questo valore deve essere minore del DimensionCount del InputTensor.

K

Tipo: UINT

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