我正在处理图像分类器数据集。我的数据集中有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)
的两种情况下,如何使批次具有相同的形状?
答案 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)