累积

计算张量沿轴的连续缩减。输出始终与输入具有相同的形状。

对于多维张量,缩减操作沿指定的轴应用。例如,给定一个二维输入,沿轴 0 的前向包含累积操作将在每列中生成累积和。

如果缩减操作是求和,则也称为前缀和或累积和。

该操作具有前向与反向变体,以及包含与排除变体。

例如,设输入为长度为 n 的向量 x,输出为向量 y。则 y[j] = sum(x[…]),其中 … 表示此表中的索引序列

前向

反向

包含

0..j

j..n-1

排除

0..j-1

j+1..n-1

属性

operation 累积操作可以是以下之一

  • SUM 对元素进行前缀求和。

exclusive 指定层是排除累积层还是包含累积层的布尔值。默认为 false。

reverse 指定是否应向后应用累积操作的布尔值。默认为 false。

输入

input: T1 类型的张量 T1

axis: T2 类型的张量 T2

输出

output: T1 类型的张量 T1

数据类型

操作

T1

T2

SUM

int32, int64, float16, float32, bfloat16

int32, int64

形状信息

inputoutput 是具有相同形状 \([a_0,...,a_n], n \geq 1\) 的张量

axis 必须是构建时常量 0D 张量,并且必须在范围 [-rank(input), rank(input)-1] 内。负值表示从后往前计数维度。

例如,对于输入形状 (D0, D1, D2), axis=2,output_scale 形状为 (D0, D1, D2)

DLA 支持

不支持。

示例

累积
in1 = network.add_input("input1", dtype=trt.float32, shape=(2, 3))
axis_data = np.asarray([1], dtype=np.int32)
in2 = network.add_constant(shape=(), weights=axis_data).get_output(0)
layer = network.add_cumulative(input=in1, axis=in2, op=trt.CumulativeOperation.SUM, exclusive=False, reverse=False)
network.mark_output(layer.get_output(0))

inputs[in1.name] = np.array([[-3.0, -2.0, -1.0], [0.0, 1.0, 2.0]])

outputs[layer.get_output(0).name] = layer.get_output(0).shape
expected[layer.get_output(0).name] = np.array([[-3.0, -5.0, -6.0], [0.0, 1.0, 3.0]])

C++ API

有关 C++ ICumulativeLayer 算子的更多信息,请参阅 C++ ICumulativeLayer 文档

Python API

有关 Python ICumulativeLayer 算子的更多信息,请参阅 Python ICumulativeLayer 文档