RaggedSoftMax

在由指定的序列长度组成的输入张量的序列上应用 SoftMax 函数,以便输出中的值位于范围 \([0,1]\) 内,并且沿应用维度的每个切片的所有值之和等于 1。指定长度之外的值设置为零。

SoftMax 函数定义为

\[\large{Softmax(x_{a_0,...,a_i,...,a_n}) = \frac{e^{x_{a_0,...,a_i,...,a_n}}}{\sum\limits_{j \in [:,...,a_i,...,:]}{e^{x_j}}}}\]

输入

input: 类型为 T1 的张量

bounds: 类型为 T2 的张量,描述序列长度。

输出

output: 类型为 T1 的张量

数据类型

T1: float32

T2: int32

形状信息

inputoutput 是形状为 \([a_0,...,a_n]\) 的张量,其中 \(n\in(2,3)\)

体积限制

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

示例

RaggedSoftMax
in1 = network.add_input("input1", dtype=trt.float32, shape=(1, 2, 5))
bounds = network.add_input("bounds", dtype=trt.int32, shape=(1, 2, 1))
layer = network.add_ragged_softmax(in1, bounds)
network.mark_output(layer.get_output(0))

inputs[in1.name] = np.array(
    [
        [1.0, 1.0, 1.0, 1.0, 0.5],
        [3.0, 4.0, -20.0, 10.0, 5.0],
    ]
)
inputs[bounds.name] = np.array([5, 3])
outputs[layer.get_output(0).name] = layer.get_output(0).shape
expected[layer.get_output(0).name] = np.array(
    [
        [
            [0.21, 0.21, 0.21, 0.21, 0.13],
            [0.26, 0.73, 0.01, 0.0, 0.0],
        ]
    ],
)

C++ API

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

Python API

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