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
要将元素相乘的维度的索引。 此值必须小于 InputTensor 的 DimensionCount。
AxisDirection
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
引入的。
张量约束
InputTensor 和 OutputTensor 必须具有相同的 DataType、 DimensionCount 和 Size。
张量支持
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 |