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

要将元素相乘的维度的索引。 此值必须小于 InputTensorDimensionCount

AxisDirection

类型: DML_AXIS_DIRECTION

DML_AXIS_DIRECTION 枚举的值之 。 如果设置为 DML_AXIS_DIRECTION_INCREASING,则乘积是通过按元素索引升序沿指定轴遍历张量发生的。 如果设置为 DML_AXIS_DIRECTION_DECREASING,则相反为 true,并且乘积通过按降序索引遍历元素发生。

HasExclusiveProduct

类型: BOOL

如果 为 TRUE,则在将正在运行的计价写入输出张量时,将排除当前元素的值。 如果 为 FALSE,则当前元素的值将包含在正在运行的 tally 中。

示例

本节中的示例都使用相同的输入张量。

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引入的。

张量约束

InputTensorOutputTensor 必须具有相同的 DataTypeDimensionCountSize

张量支持

DML_FEATURE_LEVEL_5_0 及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 1 到 8 FLOAT32、FLOAT16、INT64、INT32、UINT64、UINT32
OutputTensor 输出 1 到 8 FLOAT32、FLOAT16、INT64、INT32、UINT64、UINT32

DML_FEATURE_LEVEL_4_0 及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 1 到 8 FLOAT32、FLOAT16、INT32、UINT32
OutputTensor 输出 1 到 8 FLOAT32、FLOAT16、INT32、UINT32

DML_FEATURE_LEVEL_3_1 及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 4 FLOAT32、FLOAT16、INT32、UINT32
OutputTensor 输出 4 FLOAT32、FLOAT16、INT32、UINT32

要求

要求
最低受支持的客户端 Windows 内部版本 22000
最低受支持的服务器 Windows 内部版本 22000
标头 directml.h