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.
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:运行pytorch代码遇到的error解决办法 - Python技术站