Pytorch Pytork数据加载器

Pytorch Pytork数据加载器,pytorch,Pytorch,我试图使用多个torch.utils.data.DataLoader来创建应用了不同转换的数据集。目前,我的代码大致是 d_变换=[ transforms.RandomHorizontalFlip(), #其他一些转换。。。 ] 装载机=[] 对于范围内的i(len(d_变换)): dataset=datasets.MNIST('./数据', 火车, 下载=真, 变换=d_变换[i] 加载器.append( 数据加载器(数据集, 洗牌=正确, pin_memory=True, 工人数量=1) )

我试图使用多个
torch.utils.data.DataLoader来创建应用了不同转换的数据集。目前,我的代码大致是

d_变换=[
transforms.RandomHorizontalFlip(),
#其他一些转换。。。
]
装载机=[]
对于范围内的i(len(d_变换)):
dataset=datasets.MNIST('./数据',
火车,
下载=真,
变换=d_变换[i]
加载器.append(
数据加载器(数据集,
洗牌=正确,
pin_memory=True,
工人数量=1)
)
这是可行的,但速度非常慢。这表明我的代码中几乎所有的时间都花在像这样的行上

x, y = next(iter(train_loaders[i]))
我怀疑这是因为我使用了多个
DataLoader
实例,每个实例都有自己的worker,试图读取相同的数据文件


我的问题是,做这件事的更好方法是什么?理想情况下,我会将
torch.utils.data.DataSet子类化,并指定采样时要应用的转换,但这似乎不可能,因为
\uuuu getitem\uuuuuu
无法接受参数。

\uuu getitem\uuuuu
接受的参数是t的索引他知道你想载入的内容

transform = transforms.Compose(
    [transforms.ToTensor(),
     normalize])

class CountDataset(Dataset):

def __init__(self, file,transform=None):

    self.transform = transform
    #self.vocab = vocab
    with open(file,'rb') as f:
        self.data = pickle.load(f)
    self.y = self.data['answers']
    self.I = self.data['images']


def __len__(self):
    return len(self.y)

def __getitem__(self, idx):
    img_name = self.I[idx]
    label = self.y[Idx]
    fname = '/'.join(img_name.split("/")[-2:]) #/train2014/xx.jpg
    DIR = '/hdd/manoj/VQA/Images/mscoco/'
    img_full_path = os.path.join(DIR,fname)
    img = Image.open(img_full_path).convert("RGB")
    img_tensor = self.transform(img.resize((224,224)))
    return img_tensor,label


testset = CountDataset(file = 'testdat.pkl',
                        transform = transform)


testloader = DataLoader(testset, batch_size=32,
                         shuffle=False, num_workers=4)
您不会在循环中调用数据加载器