Разделение ImageFolder на наборы данных обучения и проверки - PullRequest
0 голосов
/ 24 марта 2020

Я загрузил свой набор данных следующим образом:

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_dataset и validation_dataset имеют тип: torch.utils.data.dataset.Subset. Есть ли способ конвертировать эти наборы данных в torchvision.datasets.folder.ImageFolder. Мне нужно сделать это, так как я не могу перебирать наборы данных типа torch.utils.data.dataset.Subset

1 Ответ

0 голосов
/ 25 марта 2020

Вы должны быть в состоянии перебирать подмножество просто отлично, поскольку в нем реализован метод __getitem__, как вы можете видеть из исходного кода *1003*:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...