假设我们有 03 张不同尺寸的图片。对它们应用pad_sequence 函数将得到如下结果:
import torch
from torch.nn.utils.rnn import pad_sequence
image_1 = torch.ones(25, 30)
image_2 = torch.ones(32, 30)
image_3 = torch.ones(29, 30)
images = pad_sequence([image_1, image_2, image_3])
print(images.size())
# torch.Size([32, 3, 30])
如果您使用 3D 图像,这将保持不变
import torch
from torch.nn.utils.rnn import pad_sequence
image_1 = torch.ones(25, 30, 50)
image_2 = torch.ones(32, 30, 50)
image_3 = torch.ones(29, 30, 50)
images = pad_sequence([image_1, image_2, image_3])
print(images.size())
# torch.Size([32, 3, 30, 50])
使用此功能您应该注意的一件事是,它仅在图像共享n - 1 尺寸时才有效。换句话说,如果你有这样的事情:
import torch
from torch.nn.utils.rnn import pad_sequence
image_1 = torch.ones(25, 30, 50)
image_2 = torch.ones(32, 50, 30)
image_3 = torch.ones(29, 31, 50)
images = pad_sequence([image_1, image_2, image_3])
# RuntimeError: The size of tensor a (50) must match the size of tensor b (30) at non-singleton dimension 2
print(images.size())
这行不通!
但无论如何,由于您使用的是图像,我建议您使用来自 torchvision 的Pad 转换。它的工作原理与pad_sequence 函数相同,但有更多选项。只需关注doc。