Прежде всего, вам нужно разделить ваши последовательности. Pack_sequence принимает список тензоров, каждый из которых имеет форму L x *. Другие размеры всегда должны быть одинаковыми для всех последовательностей, но L или длина последовательности могут быть разными. Например, ваша последовательность 0 и 1 может быть упакована как:
sequences = [torch.tensor([[5,6]]), torch.tensor([[2,1],[3,0]])]
packed_seq = torch.nn.utils.rnn.pack_sequence(sequences, enforce_sorted=False)
Здесь, в последовательностях, последовательность [0] имеет форму (1,2), а последовательности [1] имеет форму (2, 2). Первое измерение представляет их длину, которая равна 1 и 2 соответственно.
Вы можете разделить последовательности следующим образом:
sequences = torch.tensor([[2,1],[5,6],[3,0]])
indexes = torch.tensor([1,0,1])
num_seq = np.unique(indexes)
sequences = [sequences[indexes==seq_id] for seq_id in num_seq]
Это создает sequences=[torch.tensor([[5,6]]), torch.tensor([[2,1],[3,0]])]
.