input(Tensor) – padded batch of variable length sequences.
lengths (Tensor) – list of sequences lengths of each batch element.
batch_first (bool, optional) – ifTrue, the inputis expected in B x T x *format.
pad_packed_sequence 解压
代码示例
import torch
import torch.nn as nn
import torch.nn.utils as utils
from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence
# 定义一个双向lstm网络层
lstm = nn.LSTM(4,100, num_layers=1, batch_first=True, bidirectional=True)# 定义一个有padding的序列数据,也就是有冗余的0
x = torch.tensor([[[1,2,3,4],[2,3,4,5],[2,5,6,0]],[[1,2,1,1],[1,6,7,9],[0,0,0,0]],[[1,2,3,4],[1,1,1,1],[0,0,0,0]],[[1,2,3,4],[0,0,0,0],[0,0,0,0]],])
x = x.float()# 压紧数据,去掉冗余
packed = pack_padded_sequence(x, torch.tensor([3,2,2,1]), batch_first=True)# 打包,压缩# 通过lstm进行计算,得到的结果也是压紧的
output, hidden = lstm(packed)# 解压
encoder_outputs, lenghts = pad_packed_sequence(output, batch_first=True)