PyTorch 数据集:并行读取多个音频文件错误 无法获取<模块'__main__'(内置)上的属性'AudioDataset'



我正在尝试创建一个PyTorchDataset,用于读取两个音频文件作为功能。该代码被设计为采用两个音频路径并对其进行预处理并返回频谱图,特征等,这需要花费大量时间。虽然创建一个数据集需要花费很多时间,900个文件大约需要15分钟,尽管数据集很小,但我有很好的可用内存。是否有一种方法,我可以使用并行或任何其他方法来提高它的性能?

class AudioDataset(Dataset):
def __init__(self, paths_list, targets, preprocess=preprocess_fn):
self.preprocess = preprocess
self.features = []
self.labels = []
self.paths_list = paths_list

self.targets = targets
self._init_dataset()


def _init_dataset(self):

#         paths_list, targets
try:
for p, target in tqdm(zip(self.paths_list, self.targets)):
audio_1 = self.preprocess(p[0])
audio_2 = self.preprocess(p[1])
self.features.append([audio_1, audio_2])
self.labels.append(target)

except ValueError as e:
print(f"Error occured at {e}")

#         self.transform = transform
def __len__(self):
return len(self.features)
def __getitem__(self, idx):
sample = self.features[idx]
label = self.labels[idx]
return sample, label

尝试使用DataLoader设置工作数=10,但会抛出错误

[00:00<?, ?it/s]Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/cm/local/apps/python37/lib/python3.7/multiprocessing/spawn.py", line 105, in spawn_main
exitcode = _main(fd)
File "/cm/local/apps/python37/lib/python3.7/multiprocessing/spawn.py", line 115, in _main
self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'AudioDataset' on <module '__main__' (built-in)>

代码在没有多个工作者的情况下工作。有办法让我解决这个问题吗?谢谢你,

为了提高加载速度,您应该考虑将这些特性保存到.pt文件中,并设计一个不同的数据集和加载器来从.pt文件中读取这些特性。这叫做迁移学习。你可以谷歌一下。对于错误,我认为我需要更多关于代码和堆栈跟踪的信息。

相关内容

最新更新