структура DML_GATHER_ELEMENTS_OPERATOR_DESC (directml.h)
Собирает элементы из входного тензора вдоль заданной оси с помощью тензора индексов для повторного сопоставления во входные данные. Этот оператор выполняет следующий псевдокод, при этом точное поведение зависит от оси, количества входных измерений и количества измерений индексов.
output[i, j, k, ...] = input[index[i, j, k, ...], j, k, ...] // if axis == 0
output[i, j, k, ...] = input[i, index[i, j, k, ...], k, ...] // if axis == 1
output[i, j, k, ...] = input[i, j, index[i, j, k, ...], ...] // if axis == 2
...
Синтаксис
struct DML_GATHER_ELEMENTS_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
Члены
InputTensor
Тип: const DML_TENSOR_DESC*
Тензор для чтения.
IndicesTensor
Тип: const DML_TENSOR_DESC*
Индексы входного тензора вдоль активной оси. Размеры должны соответствовать InputTensor.Sizes для каждого измерения, кроме оси.
Начиная с DML_FEATURE_LEVEL_3_0
, этот оператор поддерживает отрицательные значения индекса при использовании целочисленного типа со знаком с этим тензором. Отрицательные индексы интерпретируются как относящиеся к концу измерения оси. Например, индекс -1 ссылается на последний элемент в этом измерении.
OutputTensor
Тип: const DML_TENSOR_DESC*
Тензор, в который записываются результаты. Размеры должны соответствовать ИндексыTensor.Sizes, а DataType — InputTensor.DataType.
Axis
Тип: UINT
Измерение оси InputTensor для сбора в диапазоне [0, *InputTensor.DimensionCount*)
от .
Примеры
Axis = 0
InputTensor: (Sizes:{3,3}, DataType:FLOAT32)
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
IndicesTensor: (Sizes:{2,3}, DataType:UINT32)
[[1, 2, 0],
[2, 0, 0]]
// output[y, x] = input[indices[y, x], x]
OutputTensor: (Sizes:{2,3}, DataType:UINT32)
[[4, 8, 3], // select elements vertically from data
[7, 2, 3]]
Доступность
Этот оператор появился в DML_FEATURE_LEVEL_2_1
.
Ограничения тензоров
IndicesTensor
, InputTensor и OutputTensor должны иметь одинаковые значения DimensionCount.- InputTensor и OutputTensor должны иметь один и тот же тип DataType.
Поддержка тензоров
DML_FEATURE_LEVEL_4_1 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | От 1 до 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
IndicesTensor | Входные данные | От 1 до 8 | INT64, INT32, UINT64, UINT32 |
OutputTensor | Выходные данные | От 1 до 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | От 1 до 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | Входные данные | От 1 до 8 | INT64, INT32, UINT64, UINT32 |
OutputTensor | Выходные данные | От 1 до 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | Входные данные | 4 | UINT32 |
OutputTensor | Выходные данные | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | сборка Windows 10 20348 |
Минимальная версия сервера | сборка Windows 10 20348 |
Верхняя часть | directml.h |