Python 在pytorch中加载自定义数据集
通常,当我们在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
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
,因为这是我在中发现的)