Поделиться через


структура DML_TOP_K1_OPERATOR_DESC (directml.h)

Выбирает самые крупные или наименьшие элементы K из каждой последовательности вдоль осиinputTensor , а также возвращает значения и индексы этих элементов в OutputValueTensor и OutputIndexTensorсоответственно. Последовательность относится к одному из наборов элементов, которые существуют вдоль оси измерения InputTensor.

Выбор того, следует ли выбирать самые крупные элементы 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. Этот тензор должен иметь размеры, равные inputTensor, за исключением измерения, указанного параметром оси , который должен иметь размер, равный K.

Значения K, выбранные из каждой входной последовательности, гарантированно сортируются по убыванию (по величине до наименьшего), если AxisDirectionDML_AXIS_DIRECTION_DECREASING. В противном случае противоположность имеет значение true, и выбранные значения гарантированно будут отсортированы по возрастанию (наименьшее по величине).

OutputIndexTensor

Тип: const DML_TENSOR_DESC*

Выходной тензор для записи индексов верхних K элементов. Этот тензор должен иметь размеры, равные inputTensor, за исключением измерения, указанного параметром оси , который должен иметь размер, равный K.

Индексы, возвращаемые в этом тензоре, измеряются относительно начала их последовательности (в отличие от начала тензора). Например, индекс 0 всегда ссылается на первый элемент для всех последовательностей в оси.

В случаях, когда два или более элементов в верхней части K имеют одно и то же значение (т. е. при наличии галстука), индексы обоих элементов включаются и гарантированно упорядочены по индексу элементов по возрастанию. Обратите внимание, что это верно независимо от значения AxisDirection.

Axis

Тип: UINT

Индекс измерения для выбора элементов по всему. Это значение должно быть меньше DimensionCountInputTensor.

K

Тип: UINT

Количество элементов, которые нужно выбрать. K должно быть больше 0, но меньше количества элементов в InputTensor вдоль измерения, указанногооси .

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