Scale

计算每个元素的仿射变换: \(output = (\text{input} \cdot \text{scale} + \text{shift})^{\text{power}}\),将输入张量转换为输出张量。

属性

mode 缩放系数可以应用于: - UNIFORM 所有元素使用相同的系数。 - CHANNEL 同一通道中的所有元素使用相同的系数。 - ELEMENTWISE 具有相同通道和空间坐标的所有元素使用相同的系数。

scale 要使用的缩放系数。如果为空,则默认为 1

shift 要使用的偏移系数。如果为空,则默认为 0

power 要使用的幂系数。如果为空,则默认为 1

channel_axis 要使用的通道轴。在使用 CHANNEL 变换的情况下,对于输入 \([a_0,..,a_{\text{channel_axis}},..,a_n]\),系数在 \([a_{\text{channel_axis}}]\) 处寻址。在使用 ELEMENTWISE 变换的情况下,对于输入 \([a_0,..,a_{\text{channel_axis}},..,a_n]\),系数在 \([a_{\text{channel_axis}},..,a_n]\) 处寻址。

输入

input: 类型为 T 的张量。

输出

output: 类型为 T 的张量。

数据类型

T: int8, float16, float32, bfloat16

形状信息

inputoutput 是形状为 \([a_0,...,a_n], n \geq 4\) 的张量

DLA 支持

支持 DLA FP16 和 DLA INT8。不支持 power 系数的自定义值。

示例

Scale 4D
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 1, 3, 3))
scale_u = np.array([2], np.float32).reshape(-1)
shift_u = np.array([1], np.float32).reshape(-1)
power_u = np.array([2], np.float32).reshape(-1)
layer = network.add_scale(in1, trt.ScaleMode.UNIFORM, shift=shift_u, scale=scale_u, power=power_u)
network.mark_output(layer.get_output(0))

inputs[in1.name] = np.array(
    [
        [
            [
                [1.0, 2.0, 3.0],
                [4.0, 5.0, 6.0],
                [7.0, 8.0, 9.0],
            ]
        ]
    ]
)

outputs[layer.get_output(0).name] = layer.get_output(0).shape

expected[layer.get_output(0).name] = np.array([[[[9.0, 25.0, 49.0], [81.0, 121.0, 169.0], [225.0, 289.0, 361.0]]]])
Scale 5D
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 2, 1, 3, 3))
scale_u = np.array([1, 2], np.float32).reshape(-1)
shift_u = np.array([0, 1], np.float32).reshape(-1)
power_u = np.array([1, 2], np.float32).reshape(-1)
layer = network.add_scale_nd(
    in1, trt.ScaleMode.CHANNEL, shift=shift_u, scale=scale_u, power=power_u, channel_axis=1
)
network.mark_output(layer.get_output(0))

inputs[in1.name] = np.array(
    [
        [
            [
                [
                    [1.0, 2.0, 3.0],
                    [4.0, 5.0, 6.0],
                    [7.0, 8.0, 9.0],
                ]
            ],
            [
                [
                    [1.0, 2.0, 3.0],
                    [4.0, 5.0, 6.0],
                    [7.0, 8.0, 9.0],
                ]
            ],
        ]
    ]
)

outputs[layer.get_output(0).name] = layer.get_output(0).shape

expected[layer.get_output(0).name] = np.array(
    [
        [
            [
                [
                    [1.0, 2.0, 3.0],
                    [4.0, 5.0, 6.0],
                    [7.0, 8.0, 9.0],
                ]
            ],
            [[[9.0, 25.0, 49.0], [81.0, 121.0, 169.0], [225.0, 289.0, 361.0]]],
        ]
    ]
)

C++ API

有关 C++ IScaleLayer 算子的更多信息,请参阅 C++ IScaleLayer 文档

Python API

有关 Python IScaleLayer 算子的更多信息,请参阅 Python IScaleLayer 文档