Python 在pytorch中加载自定义数据集

Python 在pytorch中加载自定义数据集,python,python-3.x,pytorch,Python,Python 3.x,Pytorch,通常,当我们在pytorch中加载数据时,我们会执行以下操作 for x, y in dataloaders: # Do something 但是,在这个名为的dataset中,它们声明自己的dataset和dataloader,如下所示 train_set = musicnet.MusicNet(root=root, train=True, download=True, window=window)#, pitch_shift=5, jitter=.1) test_set = mus

通常,当我们在pytorch中加载数据时,我们会执行以下操作

for x, y in dataloaders:
    # Do something
但是,在这个名为的dataset中,它们声明自己的dataset和dataloader,如下所示

train_set = musicnet.MusicNet(root=root, train=True, download=True, window=window)#, pitch_shift=5, jitter=.1)
test_set = musicnet.MusicNet(root=root, train=False, window=window, epoch_size=50000)

train_loader = torch.utils.data.DataLoader(dataset=train_set,batch_size=batch_size,**kwargs)
test_loader = torch.utils.data.DataLoader(dataset=test_set,batch_size=batch_size,**kwargs)
with train_set, test_set:
    for i, (x, y) in enumerate(train_loader):
        # Do something
然后他们像这样加载数据

train_set = musicnet.MusicNet(root=root, train=True, download=True, window=window)#, pitch_shift=5, jitter=.1)
test_set = musicnet.MusicNet(root=root, train=False, window=window, epoch_size=50000)

train_loader = torch.utils.data.DataLoader(dataset=train_set,batch_size=batch_size,**kwargs)
test_loader = torch.utils.data.DataLoader(dataset=test_set,batch_size=batch_size,**kwargs)
with train_set, test_set:
    for i, (x, y) in enumerate(train_loader):
        # Do something
问题1 我不明白为什么没有带有train\u set、test\u set的行
,代码就不能工作

问题2 另外,我如何访问数据

我试过了

train_set.access(2560,0)

他们要么给我一个错误信息,比如

中的KeyError回溯(最近一次调用) ---->1列车组通道(2560,0)

/工作区/raven_数据/AMT/MusicNet/pytorch_MusicNet/MusicNet.py in 访问(self,rec_id,s,shift,jitter)106 107如果self.mmap: -->108 x=np.frombuffer(self.records[rec_id][0][ssz_float:int(s+scaleself.window)*sz_float], dtype=np.float32).copy()109 else:110 fid,u=self.records[rec\u id]

关键字错误:2560

或者给我一个空的
x
y

问题1

我不明白为什么没有带有train\u set、test\u set的行
,代码就不能工作

为了能够将与自定义数据集设计一起使用,必须创建数据集的一个类,该类包含子类(并实现特定的函数),并将其传递给dataloader,即使他们这样说:

所有其他数据集都应该将其子类化。所有子类都应重写提供数据集大小的
\uuuuuuu len\uuuu
,以及
\uuuuuuuu getitem\uuuuu
,支持0到len(self)exclusive范围内的整数索引

这就是发生在:

train_set = musicnet.MusicNet(root=root, train=True, download=True, window=window)#, pitch_shift=5, jitter=.1)

test_set = musicnet.MusicNet(root=root, train=False, window=window, epoch_size=50000)

train_loader = torch.utils.data.DataLoader(dataset=train_set,batch_size=batch_size,**kwargs)
test_loader = torch.utils.data.DataLoader(dataset=test_set,batch_size=batch_size,**k
如果你检查他们的,你会发现他们这样做

问题2

另外,我如何访问数据

有几种可能的方法:

要仅从数据集中获取批次,可以执行以下操作:

batch = next(iter(train_loader))
要访问整个数据集(尤其是在您的示例中),请执行以下操作:

(不同数据集的
.records
可能不同,我说
.records
,因为这是我在中发现的)