Pytorch Pytork:如何让火车装载机使用特定数量的图像?

Pytorch Pytork:如何让火车装载机使用特定数量的图像?,pytorch,Pytorch,假设我正在使用以下调用: trainset = torchvision.datasets.ImageFolder(root="imgs/", transform=transform) trainloader = torch.utils.data.DataLoader(trainset,batch_size=4,suffle=True,num_workers=1) 据我所知,这将列车集定义为包含文件夹“images”中的所有图像,标签由特定文件夹位置定义 我的问题是— 是否有任何直接/简单的方法

假设我正在使用以下调用:

trainset = torchvision.datasets.ImageFolder(root="imgs/", transform=transform)
trainloader = torch.utils.data.DataLoader(trainset,batch_size=4,suffle=True,num_workers=1)
据我所知,这将列车集定义为包含文件夹“images”中的所有图像,标签由特定文件夹位置定义

我的问题是— 是否有任何直接/简单的方法将列车组定义为该文件夹中图像的子样本?例如,将列车集定义为每个子文件夹中10幅图像的随机样本

提前感谢

您可以将类(或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):
   ...

请注意,如果使用这种无序排列,数据集大小将相同,但每个历元将看到的数据将受到限制。如果不洗牌数据集,这也会限制数据集的大小。

我认为没有快速解决此类问题的方法。也许最好的解决方案是创建一个自定义采样器,但它不是单线解决方案。佩雷斯:谢谢你的回答。为了使用您刚刚编写的LimitDataSet类(而不是Imagefolder),请将我应该写的行添加到您的答案中,好吗?我是python和Pytorch的新手,在这方面遇到了很多麻烦。谢谢
LimitDataset(列车组,n=200)
以限制列车组的200个数据点,例如。太好了。谢谢!