структура 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