运行pytorch代码遇到的error解决办法

1.no CUDA-capable device is detected

首先考虑的是cuda的驱动问题,查看gpu显示是否正常,然后更新最新的cuda驱动;

第二个考虑的是cuda设备的默认参数是否修改,平常一块显卡的设置是0,多块可能会修改此参数:

CUDA_VISIBLE_DEVICES="3" ,把它修改为0即可解决。

2.out of gpu memory

调小batch_size。

换一个简单的模型,例如从resnet101换成resnet50

根据任务不同,情况不同可以修改base_size和crop_size.

图片格式从float换成int

优化程序,每一步都释放掉多余的占用显存的变量

3.因为模型结构下载出现问题,或者别的预加载文件出现问题

直接换网络,或者用外网。

4.明显的存在的文件,但是导入代码出现错误,例如

from ..utils import get_upsampling_weight

两点代表上上一级目录,这里识别不出来,可以直接设定根目录,然后把两个点去掉.

,增大batchsize,因为在batch中计算平均值和方差时不能设置batchsize为1.

6.UserWarning: invalid index of a 0-dim tensor.

修改loss.data[0]为loss.item()

7.torch 未定义

重新输入,让ide重新识别

RuntimeError: invalid argument 0:

  • 你输入的图像数据的维度不完全是一样的,比如是训练的数据有100组,其中99组是256*256,但有一组是384*384,这样会导致Pytorch的检查程序报错
  • 可以尝试添加img = img.convert('RGB')到您__getitem__Dataset。(有时已经添加也无法改变)
  • 另外一个则是比较隐晦的batchsize的问题,Pytorch中检查你训练维度正确是按照每个batchsize的维度来检查的,比如你有1000组数据(假设每组数据为三通道256px*256px的图像),batchsize为4,那么每次训练则提取(4,3,256,256)维度的张量来训练,刚好250个epoch解决(250*4=1000)。但是如果你有999组数据,你继续使用batchsize为4的话,这样999和4并不能整除,你在训练前249组时的张量维度都为(4,3,256,256)但是最后一个批次的维度为(3,3,256,256),Pytorch检查到(4,3,256,256) != (3,3,256,256),维度不匹配,自然就会报错了,这可以称为一个小bug。

那么怎么解决,针对第一种,很简单,整理一下你的数据集保证每个图像的维度和通道数都一直即可。第二种来说,挑选一个可以被数据集个数整除的batchsize或者直接把batchsize设置为1即可。

9.