填充¶
警告
IPaddingLayer 在 TensorRT 8.2 中已弃用。使用 ISliceLayer 来填充张量,它支持新的非恒定、反射填充模式和 clamp,并支持动态形状的填充输出。
沿两个最内层维度用零填充(或修剪)输入张量,并将结果存储在输出张量中。
属性¶
pre_padding_nd
每个维度要使用的前置填充量。如果为正数,则张量用零填充,否则将被修剪。
post_padding_nd
每个维度要使用的后置填充量。如果为正数,则张量用零填充,否则将被修剪。
输入¶
input: 类型为 T
的张量。
输出¶
output: 类型为 T
的张量。
数据类型¶
T: int8
, int32
, float16
, float32
形状信息¶
input 是形状为 \([a_0,...,a_{n-1}], \, n \geq 4\) 的张量
output 是形状为 \([b_0,...,b_{n-1}]\) 的张量,其中
\[\begin{split}p_j^{pre} - \text{空间维度 j 上的前置填充}\\ p_j^{post} - \text{空间维度 j 上的后置填充}\\\end{split}\]
\[\begin{split}b_i = \begin{cases} a_i, & 0 \leq i < n-2 \\ a_i + p_j^{pre} + p_j^{post}, & n-2 \leq i < n, & j=i-(n-2) \end{cases}\end{split}\]
体积限制¶
input 和 output 最多可以有 \(2^{31}-1\) 个元素。
示例¶
填充 (Padding)
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 1, 3, 5))
layer = network.add_padding_nd(in1, pre_padding=(-1, 3), post_padding=(3, -2))
network.mark_output(layer.get_output(0))
inputs[in1.name] = np.array(
[[[[-3.0, -2.0, -1.0, 10.0, -25.0], [-4.0, -9.0, -1.0, 10.0, -25.0], [0.0, 1.0, 2.0, -2.0, -1.0]]]]
)
outputs[layer.get_output(0).name] = layer.get_output(0).shape
expected[layer.get_output(0).name] = np.array(
[
[
[
[0.0, 0.0, 0.0, -4.0, -9.0, -1.0],
[0.0, 0.0, 0.0, 0.0, 1.0, 2.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
]
]
]
)
C++ API¶
有关 C++ IPaddingLayer 运算符的更多信息,请参阅 C++ IPaddingLayer 文档。
Python API¶
有关 Python IPaddingLayer 运算符的更多信息,请参阅 Python IPaddingLayer 文档。