Numpy 如何调整数据加载器并制作新的数据加载器?

Numpy 如何调整数据加载器并制作新的数据加载器?,numpy,pytorch,dataloader,Numpy,Pytorch,Dataloader,假设我有一个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,

假设我有一个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
您可以使用数据集。这将使用另一个数据集作为输入以及索引列表来构建新的数据集。假设你想要前1000个条目,那么你就可以

subset_train_dset = torch.utils.data.Subset(train_dset, range(1000))
您还可以使用dataset或
ConcatDataset
Subset
的组合构建由多个数据集组成的数据集,以构建您喜欢的任何内容

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

在您的情况下,您需要查看实现细节以确定要保留哪些索引,或者您可以编写一些代码,首先遍历原始数据集并保存所有要保留的索引,然后用适当的索引定义一个子集。

关于数据加载器,您想更改什么?子集_train _dset.dataset.data.shape。无法使用真正的数据加载器。对于枚举(dataloader)中的idx(img,target):抛出错误:TypeError:“dataloader”对象不是subscriptablesubset\u train\u dset=torch.utils.data.Subset(dataloader,range(1000))对于枚举(Subset\u train\u dset)中的idx(img,target):print(idx,,:',img.shape)数据集通常没有
成员(这是针对特定数据集的)。有关更多信息,请阅读文档,但数据集需要实现的唯一内容是
\uuuu getitem\uuuuuuuuu
\uuuuu len\uuuuu
。因此,如果您想要数据集对象的长度,必须使用
len(数据集)
作为一般解决方案。