前言
可以结合最下面的例子来理解
pack_padded_sequence()与pad_packed_sequence()这两个函数属于torch.nn.utils.rnn,很明显,意义就是为了rnn包来处理数据的。前者pack用于压紧数据,处理经过填充(padded)后的数据;后面pad用于解压数据,把原来咋填充的给你咋释放回去。
一. 官方+理解
1. pack_padded_sequence
'官方函数'
torch.nn.utils.rnn.pack_padded_sequence(input, lengths, batch_first=False) → PackedSequence
↓'返回'
return 一个PackedSequence对象
功能:这里的pack,理解成压紧比较好,压紧被填充过的数据。 将一个 填充过的变长序列 压紧。返回PackedSequence对象。
重点
- 输入的数据
input可以是[Seq_max, batch_size, *]格式,且Seq_max是序列的最大长度。且input必须按序列长度的长短排序,长的在前面,短的在后面,第一个时间步的数据必须是最长的数据。 - input:我们要压缩的数据。当
batch_first是False时候,shape的输入格式是[B,S *],其中B是batch_size,S是seq_len(该batch中最长序列的长度),*可以是任何维度。如果batch_first是True时候,相应的的数据格式必须是[S,B,*]。关于数据格式转置参考 - lengths:输入数据的每个序列的长度。
- batch_first:当为
True,数据格式必须[B, S, *],反之,默认是False。
2. pad_packed_sequence
torch.nn.utils.rnn.pad_packed_sequence(sequence, batch_first=False) → tuple

本文详述PyTorch中处理变长序列数据的方法,包括pack_padded_sequence与pad_packed_sequence函数的使用,通过实例展示如何排序、填充及压缩序列数据,适用于循环神经网络的训练。
最低0.47元/天 解锁文章
813





