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
形状信息¶
input 和 output 是形状为 \([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 文档。