【问题标题】:Splitting ImageFolder into train and validation datasets将 ImageFolder 拆分为训练和验证数据集
【发布时间】:2020-03-24 06:34:17
【问题描述】:

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

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 类型的数据集

【问题讨论】:

  • “无法迭代...Subset”是什么意思? ImageFolderSubset 应该派生自同一个超类,并且具有非常相似的接口。

标签: python deep-learning computer-vision pytorch


【解决方案1】:

您应该能够很好地遍历子集,因为它实现了 __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 也一样。

【讨论】:

  • 抱歉回复晚了。我能够从子集中创建一个 DataLoader。
猜你喜欢
  • 2019-05-01
  • 2016-09-13
  • 2019-04-22
  • 1970-01-01
  • 2020-10-01
  • 2021-01-19
  • 2018-11-19
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多