PyTorch:图像尺寸问题

时间:2018-08-18 18:20:29

标签: python-3.x image-processing machine-learning python-imaging-library pytorch

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

Promise {<pending>}

现在对于批量大小为32的每个批次,暗度为: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 。我知道 Pytorch 使用 PIL 加载图像。但是,当我尝试使用PIL并使用以下代码段从大小为32的名为[32,3,224,224]的列表中加载图像时:

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)的两种情况下,如何使批次具有相同的形状?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您应该使用.transpose而不是使用im.permute(),因为它需要多次调暗才能进行交换。 您的情况是im.permute(0, 3, 1, 2)