структура DML_TOP_K1_OPERATOR_DESC (directml.h)
Выбирает самые крупные или наименьшие элементы
Выбор того, следует ли выбирать самые крупные элементы K или наименьшие элементы K, можно управлять с помощью AxisDirection.
Синтаксис
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;
};
Члены
InputTensor
Тип: const DML_TENSOR_DESC*
Входной тензор, содержащий элементы для выбора.
OutputValueTensor
Тип: const DML_TENSOR_DESC*
Выходной тензор для записи значений верхнего K элементов. Верхние K элементы выбираются на основе того, являются ли они самыми большими или наименьшими, в зависимости от значения AxisDirection. Этот тензор должен иметь размеры, равные
Значения K, выбранные из каждой входной последовательности, гарантированно сортируются по убыванию (по величине до наименьшего), если AxisDirectionDML_AXIS_DIRECTION_DECREASING. В противном случае противоположность имеет значение true, и выбранные значения гарантированно будут отсортированы по возрастанию (наименьшее по величине).
OutputIndexTensor
Тип: const DML_TENSOR_DESC*
Выходной тензор для записи индексов верхних K элементов. Этот тензор должен иметь размеры, равные
Индексы, возвращаемые в этом тензоре, измеряются относительно начала их последовательности (в отличие от начала тензора). Например, индекс 0 всегда ссылается на первый элемент для всех последовательностей в оси.
В случаях, когда два или более элементов в верхней части K имеют одно и то же значение (т. е. при наличии галстука), индексы обоих элементов включаются и гарантированно упорядочены по индексу элементов по возрастанию. Обратите внимание, что это верно независимо от значения AxisDirection.
Axis
Тип: UINT
Индекс измерения для выбора элементов по всему. Это значение должно быть меньше
K
Тип: UINT
Количество элементов, которые нужно выбрать.
AxisDirection
Тип: DML_AXIS_DIRECTION
Значение из перечисления DML_AXIS_DIRECTION. Если задано значение DML_AXIS_DIRECTION_INCREASING, этот оператор возвращает наименьшиеK элементов в порядке увеличения значения. В противном случае возвращается крупнейших элементовK в порядке уменьшения.
Примеры
Пример 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]]]]
Пример 2. Использование другой оси
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]]]]
Пример 3. Привязанные значения
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]]]]
Пример 4. Увеличение направления оси
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]]]]
Замечания
Если AxisDirection задано значение DML_AXIS_DIRECTION_DECREASING, этот оператор эквивалентен DML_TOP_K_OPERATOR_DESC.
Наличие
Этот оператор появился в DML_FEATURE_LEVEL_2_1
.
Ограничения Tensor
- InputTensor, OutputIndexTensorи OutputValueTensor должны иметь одинаковые DimensionCount.
- InputTensor и OutputValueTensor должны иметь одинаковые DataType.
Поддержка Tensor
DML_FEATURE_LEVEL_5_0 и выше
Тензор | Добрый | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Ввод | От 1 до 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputValueTensor | Выпуск | От 1 до 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputIndexTensor | Выпуск | От 1 до 8 | UINT64, UINT32 |
DML_FEATURE_LEVEL_3_1 и выше
Тензор | Добрый | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Ввод | От 1 до 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Выпуск | От 1 до 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Выпуск | От 1 до 8 | UINT32 |
DML_FEATURE_LEVEL_2_1 и выше
Тензор | Добрый | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Ввод | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputValueTensor | Выпуск | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputIndexTensor | Выпуск | 4 | UINT32 |
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Сборка Windows 10 20348 |
минимальный поддерживаемый сервер | Сборка Windows 10 20348 |
заголовка | directml.h |