структура DML_SPLIT_OPERATOR_DESC (directml.h)
Разделяет входной тензор вдоль оси на несколько выходных тензоров.
Все входные и выходные тензоры должны иметь одинаковые размеры, за исключением оси разделения. Размер входного тензора на оси разбиения определяет возможные разбиения. Например, если ось разбиения входного тензора имеет размер 3, то возможны следующие возможные разбиения: 1+1+1 (3 выхода), 1+2 (2 выхода), 2+1 (2 выхода) или 3 (1 выход, который является просто копией входного тензора). Размеры осей разделения выходных тензоров должны точно соответствовать размеру оси разделения входного тензора. Эти ограничения показаны в псевдокоде ниже.
splitSize = 0;
for (i = 0; i < OutputCount; i++) {
assert(outputTensors[i]->DimensionCount == inputTensor->DimensionCount);
for (dim = 0; dim < inputTensor->DimensionCount; dim++) {
if (dim == Axis) { splitSize += outputTensors[i]->Sizes[dim]; }
else { assert(outputTensors[i]->Sizes[dim] == inputTensor->Sizes[dim]); }
}
}
assert(splitSize == inputTensor->Sizes[Axis]);
Разделение на один выходной тензор просто создает копию входного тензора.
Этот оператор является обратным DML_JOIN_OPERATOR_DESC.
Синтаксис
struct DML_SPLIT_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
UINT OutputCount;
const DML_TENSOR_DESC *OutputTensors;
UINT Axis;
};
Члены
InputTensor
Тип: const DML_TENSOR_DESC*
Тензор для разделения на несколько выходных тензоров.
OutputCount
Тип: UINT
Это поле определяет размер массива OutputTensors . Это значение должно быть больше 0.
OutputTensors
Тип: const DML_TENSOR_DESC*
Массив, содержащий описания тензоров, разделенных от входного тензора. Размеры выходных данных должны иметь те же размеры, что и входной тензор, за исключением оси разбиения.
Axis
Тип: UINT
Индекс измерения входного тензора для разделения. Все входные и выходные тензоры должны иметь одинаковые размеры во всех измерениях, кроме этой оси. Это значение должно находиться в диапазоне [0, InputTensor.DimensionCount - 1]
.
Примеры
В следующих примерах используется тот же входной тензор.
InputTensor: (Sizes:{1, 1, 6, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10],
[11, 12]]]]
Пример 1. Ось разделения 2
OutputCount: 3
Axis: 2
OutputTensors[0]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4]]]]
OutputTensors[1]: (Sizes:{1, 1, 1, 2}, DataType:FLOAT32)
[[[[5, 6]]]]
OutputTensors[2]: (Sizes:{1, 1, 3, 2}, DataType:FLOAT32)
[[[[7, 8],
[9, 10],
[11, 12]]]]
Пример 2. Ось разделения 3
OutputCount: 2
Axis: 3
OutputTensors[0]: (Sizes:{1, 1, 6, 1}, DataType:FLOAT32)
[[[[1],
[3],
[5],
[7],
[9],
[11]]]]
OutputTensors[1]: (Sizes:{1, 1, 6, 1}, DataType:FLOAT32)
[[[[2],
[4],
[6],
[8],
[10],
[12]]]]
Доступность
Этот оператор появился в DML_FEATURE_LEVEL_1_0
.
Ограничения тензоров
InputTensor и OutputTensor должны иметь одинаковые значения DataType и DimensionCount.
Поддержка тензоров
DML_FEATURE_LEVEL_4_1 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | От 1 до 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
Выходные значения | Массив выходных данных | От 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 |
Выходные значения | Массив выходных данных | От 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 |
Выходные значения | Массив выходных данных | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16 |
Выходные значения | Массив выходных данных | 4 | FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16 |
Требования
Требование | Значение |
---|---|
Заголовок | directml.h |