Reduce¶
跨输入张量的维度计算规约,得到输出张量。
属性¶
operation
Reduce 操作可以是以下之一
SUM
对元素求和。PROD
对元素求积。MAX
检索最大元素。MIN
检索最小元素。AVG
计算元素的平均值。
axes
要规约的轴,表示为位掩码。例如,当 \(axes=6\) 时,维度 1 和 2 被规约。
keep_dims
控制是否通过保留规约后的维度(维度为 1)来保持原始秩,或者降低张量的秩。
输入¶
input: 类型为 T
的张量。
输出¶
output: 类型为 T
的张量。
数据类型¶
T: int8
, int32
, int64
, float16
, float32
, bfloat16
形状信息¶
input 是一个形状为 \([a_0,...,a_n], n \geq 1\) 的张量
当 keep_dims
设置为 True
时,output 是一个形状为 \([b_0,...,b_n]\) 的张量,其中: \(b_i = \begin{cases}a_i, & axes[i] = 0 \\1, & axes[i] = 1 \\\end{cases}\)
当 keep_dims
设置为 False
时,output 是一个形状为 \([b_0,...,b_m]\) 的张量,并且它的形状等效于 keep_dims = true
的情况,只是移除了规约后的单位维度。
DLA 支持¶
DLA 支持以下 operation
类型
MAX
,其中 CHW 的任意组合被规约。
请注意,DLA 的批大小是除 CHW 维度之外的所有维度的乘积。
示例¶
Reduce
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 2, 2, 3))
layer = network.add_reduce(in1, op=trt.ReduceOperation.MAX, axes=4, keep_dims=True)
network.mark_output(layer.get_output(0))
inputs[in1.name] = np.array(
[
[
[[-3.0, -2.0, -1.0], [0.0, 1.0, 2.0]],
[[3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],
]
]
)
outputs[layer.get_output(0).name] = layer.get_output(0).shape
expected[layer.get_output(0).name] = np.array(
[
[
[[0.0, 1.0, 2.0]],
[[6.0, 7.0, 8.0]],
]
]
)
Reduce,keep_dims 设置为 false
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 2, 2, 3))
layer = network.add_reduce(in1, op=trt.ReduceOperation.PROD, axes=6, keep_dims=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]],
[[3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],
]
]
)
outputs[layer.get_output(0).name] = layer.get_output(0).shape
expected[layer.get_output(0).name] = np.array([[0.0, -56.0, -80.0]])
C++ API¶
有关 C++ IReduceLayer 算子的更多信息,请参阅 C++ IReduceLayer 文档。
Python API¶
有关 Python IReduceLayer 算子的更多信息,请参阅 Python IReduceLayer 文档。