Pythorch修改数据集实验室

2024-04-26 11:11:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这是从pytorch transfer learning tutorial将图像作为数据集加载的代码段:

data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

data_dir = 'data'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
                                          data_transforms[x])
                  for x in ['train', 'val']}

dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4,
                                             shuffle=True, num_workers=4)
              for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}

这是dataset中的一个示例:

^{pr2}$

是否有任何方法(最佳实践)来更改数据集中的示例数据,例如将标签0更改为标签1。以下操作无效:

image_datasets['val'][0] = (image_datasets['val'][0][0], 1)

Tags: 数据composeinimage示例fordatadir
1条回答
网友
1楼 · 发布于 2024-04-26 11:11:17

是的,虽然不容易编程。标签来自torchvision.datasets.ImageFolder,反映了数据集的目录结构(如硬盘上所示)。首先,我想您可能想知道作为字符串的目录名。这一点没有得到很好的记录,但是dataloader有一个classes属性来存储这些属性。所以

img, lbl = image_datasets['val'][0]
directory_name = image_datasets['val'].classes[lbl]

如果您希望一致地返回这些而不是类id,可以使用target_transformapi,如下所示:

^{pr2}$

这将使加载程序从现在起返回字符串而不是id。如果您正在寻找更高级的东西,您可以从ImageFolder或{}重新实现/继承并实现自己的语义。您只需要提供__len__和{}。在

相关问题 更多 >