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


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

Умножает элементы тензора вдоль оси, записывая результат подсчета продукта в выходной тензор.

Синтаксис

struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveProduct;
};

Члены

InputTensor

Тип: const DML_TENSOR_DESC*

Тензор, содержащий входные данные. Обычно это тот же тензор, который был предоставлен в качестве inputTensor для DML_BATCH_NORMALIZATION_OPERATOR_DESC в переадресации.

Входной тензор, содержащий элементы для умножения.

OutputTensor

Тип: const DML_TENSOR_DESC*

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

Axis

Тип: UINT

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

AxisDirection

Тип: DML_AXIS_DIRECTION

Одно из значений перечисления DML_AXIS_DIRECTION . Если задано значение DML_AXIS_DIRECTION_INCREASING, продукт выполняется путем обхода тензора вдоль указанной оси по возрастанию индекса элемента. Если задано значение DML_AXIS_DIRECTION_DECREASING, обратное значение равно true, а продукт выполняется путем обхода элементов по убыванию индекса.

HasExclusiveProduct

Тип: BOOL

Если задано значение TRUE, значение текущего элемента исключается при записи выполняющегося подсчета в выходной тензор. Если значение РАВНО FALSE, то значение текущего элемента включается в выполняющееся подсчет.

Примеры

В примерах в этом разделе используется тот же входной тензор.

InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
   [3, 8, 7, 3],
   [9, 6, 2, 4]]]]

Пример 1. Накопительный продукт по горизонтальным щепкам

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  2,   6,  30],       // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
   [3, 24, 168, 504],       //      [...                   ]
   [9, 54, 108, 432]]]]     //      [...                   ]

Пример 2. Эксклюзивные продукты

Если для параметра HasExclusiveProduct задано значение TRUE , значение текущего элемента исключается из выполняющегося подсчета при записи в выходной тензор.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2,  2,   6],      // Notice the product is written before multiplying the input,
   [1, 3, 24, 168],      // and the final total is not written to any output.
   [1, 9, 54, 108]]]]

Пример 3. Направление оси

Если задать для AxisDirectionзначение DML_AXIS_DIRECTION_DECREASING , при вычислении выполняющегося подсчета будет отменен порядок обхода элементов.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30,  15, 15, 5],    // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
   [504, 168, 21, 3],    //      [...                   ]
   [432,  48,  8, 4]]]]  //      [...                   ]

Пример 4. Умножение вдоль другой оси

В этом примере продукт выполняется вертикально вдоль оси высоты (второе измерение).

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 6,  8, 21, 15],   //      [2*3,  ...]
   [54, 48, 42, 60]]]] //      [2*3*9 ...]

Комментарии

Этот оператор поддерживает выполнение на месте, что означает, что выходной тензор допускается для псевдонима InputTensor во время привязки .

Доступность

Этот оператор появился в DML_FEATURE_LEVEL_3_1.

Ограничения тензоров

InputTensor и OutputTensor должны иметь одинаковые значения DataType, DimensionCount и Sizes.

Поддержка тензоров

DML_FEATURE_LEVEL_5_0 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные От 1 до 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor Выходные данные От 1 до 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные От 1 до 8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Выходные данные От 1 до 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_1 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Выходные данные 4 FLOAT32, FLOAT16, INT32, UINT32

Требования

Требование Значение
Минимальная версия клиента Сборка Windows 22000
Минимальная версия сервера Сборка Windows 22000
Верхняя часть directml.h