什么可以提高这个"RuntimeError: Trying to resize storage that is not resizable"?



有人遇到过上面的错误吗?知道是什么引起的吗?

我只在一个特定的数据集上得到错误,并且它在第19批加载时抛出,总是19。即使数据是随机分割的

数据集由5秒音频。wav文件组成,我在获取时将其转换为频谱图。

Starting training for 1000 epoch(s)
Epoch 1/1000
26%|█████████████████████▉                                                             | 19/72 [00:04<00:13,  3.86it/s, loss=33.745]
Traceback (most recent call last):
File "train.py", line 202, in <module>
train_and_evaluate(model, train_dl, test_dl, optimizer, cost, params, args.model_dir, args.experiment_name, args.restore_file)
File "train.py", line 129, in train_and_evaluate
train(model, optimizer, loss_fn, train_dataloader, params, epoch, writer)
File "train.py", line 52, in train
for i, (train_batch, current_rpm, next_rpm, next_pr) in enumerate(dataloader):
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 628, in __next__
data = self._next_data()
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1333, in _next_data
return self._process_data(data)
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1359, in _process_data
data.reraise()
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/_utils.py", line 543, in reraise
raise exception
RuntimeError: Caught RuntimeError in DataLoader worker process 3.
Original Traceback (most recent call last):
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", line 302, in _worker_loop
data = fetcher.fetch(index)
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 61, in fetch
return self.collate_fn(data)
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 265, in default_collate
return collate(batch, collate_fn_map=default_collate_fn_map)
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 143, in collate
return [collate(samples, collate_fn_map=collate_fn_map) for samples in transposed]  # Backwards compatibility.
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 143, in <listcomp>
return [collate(samples, collate_fn_map=collate_fn_map) for samples in transposed]  # Backwards compatibility.
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 120, in collate
return collate_fn_map[elem_type](batch, collate_fn_map=collate_fn_map)
File "/home/ubuntu/miniconda3/envs/SFB/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 162, in collate_tensor_fn
out = elem.new(storage).resize_(len(batch), *list(elem.size()))
RuntimeError: Trying to resize storage that is not resizable

我已经尝试了2秒。wav录音的不同数据集,它工作得很好。

我在为嵌入式系统开发计算机视觉项目时遇到了这个错误。该项目的目标是使用神经网络比较两幅图像,该网络必须说明这两幅图像是否相似。为了减小网络的大小,我没有将整个图像馈送给网络,而是使用ORB算法获得的特征向量。

问题是我从每个图像(不同的关键点)获得一个大小不同的向量。Dataloader对象的默认collate_fn不允许这种情况发生。我有两个解决方案:

  1. 手动添加一种填充,使当前批处理中的所有特征向量具有相同的大小;或
  2. 编写一个自定义collate_fn能够处理不同大小的批处理元素

我遵循了第一个解决方案,它对我有效:我编写了一个自定义Dataset对象,将每个特征向量调整大小并填充到固定大小(在__getitem__方法中)。

也许,在你的情况下,你应该需要一个自定义的collate_fn。

我建议你阅读:

  • Dataloader类的官方文档
  • 博客文章,展示了一个NLP用例,其中自定义collate_fn非常有用

相关内容

最新更新