# RaggedSoftMax¶

Applies the SoftMax function on an input tensor made of sequences across the sequence lengths specified, so that the values in the output lies in the range $$[0,1]$$, and the sum of all the values of each slice along the applied dimension is equal to 1. Values outside of the specified lengths are set to zero.

The SoftMax function is defined as:

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

## Inputs¶

input: tensor of type T1

bounds: tensor of type T2 describing the sequences lengths.

## Outputs¶

output: tensor of type T1

## Data Types¶

T1: float32

T2: int32

## Shape Information¶

input and output are tensors with a shape of $$[a_0,...,a_n]$$, $$n\in(2,3)$$.

## Examples¶

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))
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],
]
],
)