Pytorch: как заставить загрузчика поезда использовать определенное количество изображений? - PullRequest
0 голосов
/ 11 июня 2018

Предположим, что я использую следующие вызовы:

trainset = torchvision.datasets.ImageFolder(root="imgs/", transform=transform)
trainloader = torch.utils.data.DataLoader(trainset,batch_size=4,suffle=True,num_workers=1)

Насколько я могу судить, это определяет набор поездов, состоящий из всех изображений в папке "images", с метками, как определеноконкретное местоположение папки.

Мой вопрос: есть ли какой-либо прямой / простой способ определить набор поездов, чтобы быть подобразцом изображений в этой папке?Например, определить набор поездов как случайную выборку из 10 изображений из каждой подпапки?

Заранее спасибо

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете заключить класс DatasetFolder (или ImageFolder) в другой класс, чтобы ограничить набор данных:

class LimitDataset(data.Dataset):
    def __init__(self, dataset, n):
        self.dataset = dataset
        self.n = n

    def __len__(self):
        return self.n

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

Вы также можете определить некоторое отображение между индексом в LimitDataset и индекс в исходном наборе данных для определения более сложного поведения (например, случайных подмножеств).

Если вы хотите ограничить количество пакетов для каждой эпохи вместо размера набора данных:

from itertools import islice
for data in islice(dataloader, 0, batches_per_epoch):
   ...

Обратите внимание, что если вы используете этот случайный порядок, размер набора данных будет таким же, но данные, которые увидит каждая эпоха, будут ограничены.Если вы не перетасуете набор данных, это также ограничит размер набора данных.

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