как настроить загрузчик данных и сделать новый загрузчик данных?

скажем, у меня есть загрузчик данных cifar10
, если я хочу удалить какое-то значение из загрузчика данных и создать новый загрузчик данных
, как мне это сделать?

def load_data_cifar10(batch_size=128,test=False):
    if not test:
        train_dset = torchvision.datasets.CIFAR10(root='/mnt/3CE35B99003D727B/input/pytorch/data', train=True,
                                                download=True, transform=transform)
    else:
        train_dset = torchvision.datasets.CIFAR10(root='/mnt/3CE35B99003D727B/input/pytorch/data', train=False,
                                               download=True, transform=transform)
    train_loader = torch.utils.data.DataLoader(train_dset, batch_size=batch_size, shuffle=True)
    print("LOAD DATA, %d" % (len(train_loader)))
    return train_loader

person Community    schedule 19.12.2019    source источник
comment
Что вы хотите изменить в загрузчике данных?   -  person jchaykow    schedule 19.12.2019


Ответы (1)


Вы можете использовать набор данных Subset. В качестве входных данных требуется другой набор данных, а также список индексов для создания нового набора данных. Скажем, вам нужны первые 1000 записей, тогда вы можете сделать

subset_train_dset = torch.utils.data.Subset(train_dset, range(1000))

Вы также можете создавать наборы данных, состоящие из нескольких наборов данных, используя _3 _ набор данных или комбинации ConcatDataset и Subset для создания всего, что вам нравится

frankenstein_dset = torch.utils.data.ConcatDataset((
    torch.utils.data.Subset(dset1, range(1000)),
    torch.utils.data.Subset(dset2, range(100)))

В вашем случае вам нужно будет либо изучить детали реализации, чтобы определить, какие индексы сохранить, либо вы могли бы написать код для итерации сначала по исходному набору данных и сохранить все индикаторы, которые вы хотите сохранить, а затем определить Subset с соответствующими индексы.

person jodag    schedule 19.12.2019
comment
subset_train_dset.dataset.data.shape. не работает с настоящим загрузчиком данных. а для idx (img, target) в enumerate (dataloader): выплюнуть ошибку: TypeError: объект 'DataLoader' не подлежит подписке - person ; 20.12.2019
comment
subset_train_dset = torch.utils.data.Subset (загрузчик данных, диапазон (1000)) для idx, (img, target) в перечислении (subset_train_dset): print (idx, ':', img.shape) - person ; 20.12.2019
comment
наборы данных обычно не имеют члена .data (это для определенных наборов данных). Прочтите документацию для получения дополнительной информации, но единственное, что требуется для реализации набора данных, - это __getitem__ и __len__. Поэтому, если вам нужна длина объекта набора данных, вы должны использовать len(dataset) для общего решения. - person jodag; 20.12.2019