将ImageFolder分为训练和验证数据集

时间:2020-03-24 06:34:17

标签: python deep-learning computer-vision pytorch

我已按如下方式加载我的数据集:

full_dataset = ImageFolder(root = os.path.join(root, 'train'), transform=train_transforms)

现在要将数据集分为训练和验证集,我使用了以下代码:

train_size = int(0.8 * len(full_dataset))
validation_size = len(full_dataset) - train_size
train_dataset, validation_dataset = random_split(full_dataset, [train_size, validation_size])

train_datasetvalidation_dataset的类型均为:torch.utils.data.dataset.Subset。有什么方法可以将这些数据集转换为torchvision.datasets.folder.ImageFolder。 我需要这样做,因为我无法遍历类型为torch.utils.data.dataset.Subset

的数据集

1 个答案:

答案 0 :(得分:0)

您应该能够很好地遍历子集,因为它实现了__getitem__方法,如您从source code所见:

class Subset(Dataset):
    r"""
    Subset of a dataset at specified indices.

    Arguments:
        dataset (Dataset): The whole Dataset
        indices (sequence): Indices in the whole set selected for subset
    """
    def __init__(self, dataset, indices):
        self.dataset = dataset
        self.indices = indices

    def __getitem__(self, idx):
        return self.dataset[self.indices[idx]]

    def __len__(self):
        return len(self.indices)

因此,以下方法应该起作用:

for image, label in train_dataset:
    print(image, label)

或者您可以从子集中创建数据加载器:

train_dataloader = DataLoader(train_dataset, batch_size, shuffle)

for images, labels in train_dataloader:
    print(images, labels)

validation_dataset相同。