Обычно, когда мы загружаем данные в pytorch, мы делаем следующее
for x, y in dataloaders:
# Do something
Однако в этом наборе данных, называемом MusicNet , они объявляют свой собственный набор данных и загрузчик данных следующим образом
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
Я не понимаю, почему код не работает без строки with train_set, test_set
.
Вопрос 2
Кроме того, как мне получить доступ к данным?
Я пытался
train_set.access(2560,0)
и
with train_set, test_set:
x, y = train_set.access(2560,0)
Они либо выдают мне сообщение об ошибке типа
KeyError Traceback (последний вызов последним) в
----> 1 train_set.access (2560,0)
/ рабочая область / raven_data / AMT / MusicNet / pytorch_musicnet / musicnet.py в
доступ (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 остальное: 110 fid, _ = self.records [rec_id]
KeyError: 2560
или давая мне пустое x
и y