PackedSequence
See
pack_padded_sequence
./code/packed-sequence/main.cc
1static void TestPadPackedSequence() {
2 torch::Tensor t = torch::tensor({
3 {{10, 20, 30}, {0, 0, 0}, {0, 0, 0}},
4 {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}},
5 {{-1, 2, 3}, {-4, 5, 6}, {0, 0, 0}},
6 });
7 torch::Tensor lengths = torch::tensor({1, 3, 2});
8 torch::nn::utils::rnn::PackedSequence packed_seq =
9 torch::nn::utils::rnn::pack_padded_sequence(
10 t, lengths, /*batch_first*/ true, /*enforce_sorted*/ false);
11 std::cout << "data: " << packed_seq.data() << "\n";
12 std::cout << "batch_sizes: " << packed_seq.batch_sizes() << "\n";
13 std::cout << "sorted_indices: " << packed_seq.sorted_indices() << "\n";
14 std::cout << "unsorted_indices: " << packed_seq.unsorted_indices() << "\n";
15}
16/*
17data: 1 2 3
18 -1 2 3
19 10 20 30
20 4 5 6
21 -4 5 6
22 7 8 9
23[ CPULongType{6,3} ]
24batch_sizes: 3
25 2
26 1
27[ CPULongType{3} ]
28sorted_indices: 1
29 2
30 0
31[ CPULongType{3} ]
32unsorted_indices: 2
33 0
34 1
35[ CPULongType{3} ]
36 */
The output is
./code/packed-sequence/main.cc
1}
2/*
3data: 1 2 3
4 -1 2 3
5 10 20 30
6 4 5 6
7 -4 5 6
8 7 8 9
9[ CPULongType{6,3} ]
10batch_sizes: 3
11 2
12 1
13[ CPULongType{3} ]
14sorted_indices: 1
15 2