ElementWise¶
计算两个输入张量之间的逐元素二元运算,生成一个输出张量。如果适用,则使用广播(有关更多信息,请参阅形状信息)。
属性¶
operation
ElementWise 操作可以是以下之一
SUM
\(output=input1+input2\)PROD
\(output=input1*input2\)MAX
\(output=max(input1,input2)\)MIN
\(output=min(input1,input2)\)SUB
\(output=input1-input2\)DIV
\(output=\frac{input1}{input2}\)POWER
\(output=input1^{input2}\)FLOOR_DIV
\(output=\lfloor\frac{a}{b}\rfloor\)AND
\(output=and(input1,input2)\)OR
\(output=or(input1,input2)\)XOR
\(output=xor(input1,input2)\)EQUAL
\(output=(input1==input2)\)GREATER
\(output=(input1>input2)\)LESS
\(output=(input1<input2)\)
输入¶
input1: 类型为 T1
的张量
input2: 类型为 T1
的张量
输出¶
output: 类型为 T2
的张量
数据类型¶
如果未明确指定,则 T1==T2
操作 |
T1 |
T2 |
|
---|---|---|---|
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
|
|
|
|
|
|
|
|
|
形状信息¶
输入必须具有相同的秩。对于每个维度,它们的长度必须匹配,或者其中一个必须等于 1。在后一种情况下,张量会沿该轴广播。
输出与输入具有相同的秩。对于每个输出维度,如果对应的输入维度长度匹配,则其长度等于输入维度的长度;否则,等于不为 1 的长度。
DLA 支持¶
DLA 在特定条件下支持以下 operation
类型
POW
其中只有一个输入是常量DIV
其中最多只有一个输入是常量EQUAL
其中最多只有一个输入是常量GREATER
其中最多只有一个输入是常量LESS
其中最多只有一个输入是常量
比较操作(EQUAL
、GREATER
和 LESS
)支持广播。但是,为了在 DLA 上被认为是广播兼容的,一个形状必须具有以下配置之一:NCHW(即形状相等)、NC11(即 N 和 C 相等,H 和 W 为 1)或 N111(即 N 相等,C、H 和 W 为 1)。
当 GREATER
/LESS
和 EQUAL
都具有相同的输入时,DLA 也支持“大于或等于”和“小于或等于”。
示例¶
ElementWise 广播示例
in1 = network.add_input("input1", dtype=trt.float32, shape=(2, 3))
in2 = network.add_input("input2", dtype=trt.float32, shape=(1, 3))
layer = network.add_elementwise(in1, in2, op=trt.ElementWiseOperation.PROD)
network.mark_output(layer.get_output(0))
inputs[in1.name] = np.array([[-3.0, -2.0, -1.0], [0.0, 1.0, 2.0]])
inputs[in2.name] = np.array([[4.0, 5.0, 6.0]])
outputs[layer.get_output(0).name] = layer.get_output(0).shape
expected[layer.get_output(0).name] = np.array([[-12.0, -10.0, -6.0], [0.0, 5.0, 12.0]])
C++ API¶
有关 C++ IElementWiseLayer 算子的更多信息,请参阅 C++ IElementWiseLayer 文档。
Python API¶
有关 Python IElementWiseLayer 算子的更多信息,请参阅 Python IElementWiseLayer 文档。