填充

警告

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}\]

体积限制

inputoutput 最多可以有 \(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 文档