LRN

计算输入张量上每个元素的局部响应归一化 (LRN) 并输出到输出张量。

给定形状为 \([D_0,...,D_n]\) 的输入张量和参数 \(w, \alpha, \beta, \text{and }k\),归一化计算如下

\[\huge{output_{a_0,...,a_{n-2},a_{n-1},a_{n}} = \frac{input_{a_0,...,a_{n-2},a_{n-1},a_{n}}}{(k+\alpha \sum_{j=max(0, a_{n-2}-w)}^{min(D_{n-2}-1, a_{n-2}+w)}input_{a_0,...,j,a_{n-1},a_{n}}^2)^\beta}}\]

属性

\(w\) 交叉通道窗口的大小。 \(w \in {\{1,3,5,7,9,11,13,15\}}\)

\(\alpha\) 归一化参数。 \(\alpha \in {[-1 \cdot 10^{20}, 1 \cdot 10^{20}]}\)

\(\beta\) 归一化参数。 \(\beta \in {[0.01, 1 \cdot 10^{5}]}\)

\(k\) 归一化参数。 \(k \in {[1 \cdot 10^{5}, 1 \cdot 10^{10}]}\)

输入

input: T1 类型的张量。

输出

output: T1 类型的张量。

数据类型

T1: float32

形状信息

input 是形状为 \([a_0,...,a_n]\) 的张量。

output 具有与 input 相同的形状。

体积限制

inputoutput 最多可以有 \(2^{31}-1\) 个元素。

DLA 支持

支持 DLA FP16。

w \(w \in {\{3,5,7,9\}}\)

示例

LRN
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 5, 2, 2))
layer = network.add_lrn(in1, window=3, alpha=1, beta=1, k=0.1)
network.mark_output(layer.get_output(0))

inputs[in1.name] = np.array(
    [[[[0, 0], [0, 0]], [[1, 1], [1, 1]], [[2, 2], [2, 2]], [[3, 3], [3, 3]], [[4, 4], [4, 4]]]]
)

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, 0.0]],
            [[0.56603765, 0.56603765], [0.56603765, 0.56603765]],
            [[0.4195804, 0.4195804], [0.4195804, 0.4195804]],
            [[0.3071672, 0.3071672], [0.3071672, 0.3071672]],
            [[0.47430828, 0.47430828], [0.47430828, 0.47430828]],
        ]
    ],
)

C++ API

有关 C++ ILRNLayer 运算符的更多信息,请参阅 C++ ILRNLayer 文档

Python API

有关 Python ILRNLayer 运算符的更多信息,请参阅 Python ILRNLayer 文档