我有一组张量,使用pad_sequence
进行填充,但我需要确保它们有一个固定的长度。现在我无法做到这一点,因为pad_sequence
会将较短的张量扩展到最长的那个张量长度,如果最长的张量没有达到我想要的长度,我就会陷入困境。我想过一个解决方案是向其中一个张量添加零,以填充到我想要的长度,这样填充的结果就会达到我期望的长度。但我不知道该怎么做
假设我有一个形状为torch.Size([44])
的张量,并且希望的长度是50,我如何向其中添加零以达到torch.Size([50])
的形状?无论初始张量的形状如何,这一点都必须保持不变。
回答:
你可以按照以下方式实现你的逻辑:
from torch.nn.utils.rnn import pad_sequence# 期望的最大长度max_len = 50# 100个长度可变的序列(< max_len)seq_lens = torch.randint(low=10,high=44,size=(100,))seqs = [torch.rand(n) for n in seq_lens]# 将第一个序列填充到期望的长度seqs[0] = nn.ConstantPad1d((0, max_len - seqs[0].shape[0]), 0)(seqs[0])# 将所有序列填充到期望的长度seqs = pad_sequence(seqs)