nn.utils.rnn.pack_padded_sequence¶
- lucid.nn.utils.rnn.pack_padded_sequence(input_: Tensor, lengths: Sequence[int] | Tensor, batch_first: bool = False, enforce_sorted: bool = True) PackedSequence¶
Function Signature¶
def pack_padded_sequence(
input_: Tensor,
lengths: Sequence[int] | Tensor,
batch_first: bool = False,
enforce_sorted: bool = True,
) -> PackedSequence
Parameters¶
input_ (Tensor): A padded tensor of shape (seq_len, batch, feature) or (batch, seq_len, feature) when batch_first=True.
lengths (Sequence[int] | Tensor): Sequence lengths for each batch element. Must be 1D and match the batch size.
batch_first (bool, optional): If True, input_ is interpreted as (batch, seq_len, feature). Default is False.
enforce_sorted (bool, optional): If True, lengths must be sorted in decreasing order. If False, the function will sort internally and populate sorted_indices/unsorted_indices. Default is True.
Return Value¶
PackedSequence: A packed representation containing data, batch_sizes, and optional sort/unsort indices.
Behavior¶
The maximum sequence length is inferred from lengths.
The returned batch_sizes is a 1D tensor of length max_len.
When enforce_sorted=False, the input is sorted by length internally.
Examples¶
import lucid
import lucid.nn as nn
x = lucid.randn(5, 3, 4) # (seq_len=5, batch=3, feature=4)
lengths = [5, 3, 2]
packed = nn.utils.rnn.pack_padded_sequence(x, lengths)
out, h_n = nn.RNN(4, 6)(packed)