estrutura DML_TOP_K1_OPERATOR_DESC (directml.h)
Seleciona o maior ou menor
A escolha de selecionar os maiores elementos K ou os menores elementos K pode ser controlada usando AxisDirection.
Sintaxe
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;
};
Membros
InputTensor
Tipo: const DML_TENSOR_DESC*
O tensor de entrada que contém elementos a serem selecionados.
OutputValueTensor
Tipo: const DML_TENSOR_DESC*
O tensor de saída para o qual gravar os valores dos principais elementos K. Os elementos de K de
Os valores K selecionados de cada sequência de entrada têm a garantia de serem classificados decrescente (maior a menor) se AxisDirection for DML_AXIS_DIRECTION_DECREASING. Caso contrário, o oposto será verdadeiro e os valores selecionados serão classificados em ordem crescente (menor a maior).
OutputIndexTensor
Tipo: const DML_TENSOR_DESC*
O tensor de saída para o qual gravar os índices da parte superior K elementos. Esse tensor deve ter tamanhos iguais ao
Os índices retornados neste tensor são medidos em relação ao início de sua sequência (em vez do início do tensor). Por exemplo, um índice de 0 sempre se refere ao primeiro elemento para todas as sequências em um eixo.
Nos casos em que dois ou mais elementos na parte superior K têm o mesmo valor (ou seja, quando há um empate), os índices de ambos os elementos são incluídos e têm a garantia de serem ordenados pelo índice de elemento crescente. Observe que isso é verdadeiro, independentemente do valor de AxisDirection.
Axis
O índice da dimensão na qual selecionar elementos. Esse valor deve ser menor que o
K
O número de elementos a serem selecionados.
AxisDirection
Tipo: DML_AXIS_DIRECTION
Um valor da enumeração DML_AXIS_DIRECTION. Se definido como DML_AXIS_DIRECTION_INCREASING, esse operador retornará o menorK elementos em ordem de aumento de valor. Caso contrário, ele retornará o maiorK elementos em ordem decrescente.
Exemplos
Exemplo 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]]]]
Exemplo 2. Usando um eixo diferente
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]]]]
Exemplo 3. Valores vinculados
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]]]]
Exemplo 4. Aumentando a direção do eixo
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]]]]
Observações
Quando AxisDirection é definido como DML_AXIS_DIRECTION_DECREASING, esse operador é equivalente a DML_TOP_K_OPERATOR_DESC.
Disponibilidade
Este operador foi introduzido no DML_FEATURE_LEVEL_2_1
.
Restrições do Tensor
- InputTensor, OutputIndexTensore OutputValueTensor devem ter o mesmo DimensionCount.
- InputTensor e OutputValueTensor devem ter o mesmo DataType.
Suporte ao Tensor
DML_FEATURE_LEVEL_5_0 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 1 a 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputValueTensor | Saída | 1 a 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputIndexTensor | Saída | 1 a 8 | UINT64, UINT32 |
DML_FEATURE_LEVEL_3_1 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Saída | 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Saída | 1 a 8 | UINT32 |
DML_FEATURE_LEVEL_2_1 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensor | Entrada | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Saída | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Saída | 4 | UINT32 |
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 10 Build 20348 |
servidor com suporte mínimo | Windows 10 Build 20348 |
cabeçalho | directml.h |