我正在研究图像分类器数据集。我的数据集中有31个班级,每个班级都有一个文件夹。为了进行培训,我以以下方式加载数据:

from torchvision import datasets, transforms
import torch

def load_training(root_path, dir, batch_size, kwargs):
    transform = transforms.Compose(
        [transforms.Resize([256, 256]),
         transforms.RandomCrop(224),
         transforms.RandomHorizontalFlip(),
         transforms.ToTensor()])
    data = datasets.ImageFolder(root=root_path + dir, transform=transform)
    train_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, shuffle=False, drop_last=True, **kwargs)
    return train_loader


现在,对于32的批次大小,每个批次暗淡为:[32,3,224,224]。我知道Pytorch使用PIL加载图像。但是,当我尝试使用以下代码片段使用PIL从大小为32的images列表中加载图像时:

for i in images:
    im = Image.open(root_dir + dir + i)
    im = im.convert('RGB')
    im.load()
    im = im.resize((224, 224))
    im = np.asarray( im, dtype="int32" )
    print(im.shape)
    temp_im_2 = torch.from_numpy(np.array(temp_im)).float()


它说im.shape(32,224,224,3)。我究竟做错了什么?在两种情况下说[32,3,224,224],我该怎么做才能使批次具有相同的形状?

最佳答案

仅交换轴怎么样?如果im.transpose(0, 3, 1, 2)具有四个维度,则类似于im。但是,im.shape应该返回(224, 224, 3),因为您仅加载了一个图像,所以im.transpose(2, 0, 1)应该为您提供具有第一维通道的图像,您可以将该通道堆叠在一起以形成一个批处理。

关于python-3.x - PyTorch:图像尺寸问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51911447/

10-10 15:13