强制pad_sequence到一定长度
Enforce pad_sequence to a certain length
我有一组张量,我正在用 pad_sequence
填充,但我需要保证它们的长度固定。我现在不能这样做,因为 pad_sequence
会将较短的张量扩展到最长的张量,如果最长的张量没有达到我想要的长度,我就完蛋了。我认为一个解决方案可能是向其中一个张量添加零以填充到我想要的长度,因此该填充的结果将具有我想要的长度。我不知道怎么做
假设我有一个形状为 torch.Size([44])
且所需长度为 50 的张量,我如何向其添加零以达到 torch.Size([50])
的形状?无论初始张量形状如何,这都需要保持。
你可以这样实现你的逻辑:
from torch.nn.utils.rnn import pad_sequence
# Desired max length
max_len = 50
# 100 seqs of variable length (< max_len)
seq_lens = torch.randint(low=10,high=44,size=(100,))
seqs = [torch.rand(n) for n in seq_lens]
# pad first seq to desired length
seqs[0] = nn.ConstantPad1d((0, max_len - seqs[0].shape[0]), 0)(seqs[0])
# pad all seqs to desired length
seqs = pad_sequence(seqs)
我有一组张量,我正在用 pad_sequence
填充,但我需要保证它们的长度固定。我现在不能这样做,因为 pad_sequence
会将较短的张量扩展到最长的张量,如果最长的张量没有达到我想要的长度,我就完蛋了。我认为一个解决方案可能是向其中一个张量添加零以填充到我想要的长度,因此该填充的结果将具有我想要的长度。我不知道怎么做
假设我有一个形状为 torch.Size([44])
且所需长度为 50 的张量,我如何向其添加零以达到 torch.Size([50])
的形状?无论初始张量形状如何,这都需要保持。
你可以这样实现你的逻辑:
from torch.nn.utils.rnn import pad_sequence
# Desired max length
max_len = 50
# 100 seqs of variable length (< max_len)
seq_lens = torch.randint(low=10,high=44,size=(100,))
seqs = [torch.rand(n) for n in seq_lens]
# pad first seq to desired length
seqs[0] = nn.ConstantPad1d((0, max_len - seqs[0].shape[0]), 0)(seqs[0])
# pad all seqs to desired length
seqs = pad_sequence(seqs)