estructura DML_TOP_K1_OPERATOR_DESC (directml.h)
Selecciona los elementos de
La elección de si se seleccionan los elementos K más grandes o los elementos K más pequeños se pueden controlar mediante AxisDirection.
Sintaxis
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;
};
Miembros
InputTensor
Tipo: const DML_TENSOR_DESC*
Tensor de entrada que contiene elementos que se van a seleccionar.
OutputValueTensor
Tipo: const DML_TENSOR_DESC*
Tensor de salida en el que se escribirán los valores de los elementos de K superiores. Los elementos K superior se seleccionan en función de si son los más grandes o los más pequeños, en función del valor de AxisDirection. Este tensor debe tener tamaños iguales al
Se garantiza que los valores de de
OutputIndexTensor
Tipo: const DML_TENSOR_DESC*
Tensor de salida en el que se van a escribir los índices de los elementos de K superiores. Este tensor debe tener tamaños iguales al
Los índices devueltos en este tensor se miden en relación con el principio de su secuencia (en lugar del principio del tensor). Por ejemplo, un índice de 0 siempre hace referencia al primer elemento de todas las secuencias de un eje.
En los casos en los que dos o más elementos de la parte superior K tienen el mismo valor (es decir, cuando hay un empate), se incluyen los índices de ambos elementos y se garantiza que se ordenan mediante un índice de elemento ascendente. Tenga en cuenta que esto es cierto independientemente del valor de AxisDirection.
Axis
Tipo: UINT de
Índice de la dimensión en la que se van a seleccionar los elementos. Este valor debe ser menor que el DimensionCount de
K
Tipo: UINT de
Número de elementos que se van a seleccionar. K debe ser mayor que 0, pero menor que el número de elementos de la InputTensor a lo largo de la dimensión especificada por Axis.
AxisDirection
Tipo: DML_AXIS_DIRECTION
Valor de la enumeración DML_AXIS_DIRECTION. Si se establece en DML_AXIS_DIRECTION_INCREASING, este operador devuelve el más pequeñoK elementos en orden de aumento de valor. De lo contrario, devuelve el más grandeK elementos en orden decreciente.
Ejemplos
Ejemplo 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]]]]
Ejemplo 2. Uso de un eje 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]]]]
Ejemplo 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]]]]
Ejemplo 4. Aumento de la dirección del eje
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]]]]
Observaciones
Cuando AxisDirection se establece en DML_AXIS_DIRECTION_DECREASING, este operador equivale a DML_TOP_K_OPERATOR_DESC.
Disponibilidad
Este operador se introdujo en DML_FEATURE_LEVEL_2_1
.
Restricciones tensor
- InputTensor, OutputIndexTensory OutputValueTensor deben tener el mismo DimensionCount.
- InputTensor y OutputValueTensor deben tener el mismo DataType.
Compatibilidad con Tensor
DML_FEATURE_LEVEL_5_0 y versiones posteriores
Tensor | Amable | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | De 1 a 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputValueTensor | Salida | De 1 a 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputIndexTensor | Salida | De 1 a 8 | UINT64, UINT32 |
DML_FEATURE_LEVEL_3_1 y versiones posteriores
Tensor | Amable | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | De 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Salida | De 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Salida | De 1 a 8 | UINT32 |
DML_FEATURE_LEVEL_2_1 y versiones posteriores
Tensor | Amable | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Salida | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Salida | 4 | UINT32 |
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Compilación 20348 de Windows 10 |
servidor mínimo admitido | Compilación 20348 de Windows 10 |
encabezado de |
directml.h |