PyTorch 框架报错处理汇总

Error 汇总

1. CUDA out of memory

原因: GPU内存溢出
解决: 减小 BATCH_SIZE


2. CUDA error: device-side assert triggered

原因: 实际输入的label类别或Mask图像的像素类别超过了设定的类别数 NUM_CLASSES
解决: 检查label值或mask图像的像素值, 如二值图像则令mask[mask>1]=1


3. RuntimeError: Can’t call numpy() on Variable that requires grad. Use var.detach().numpy() instead.

原因: 带梯度变量不能直接转为numpy类型
解决: 采用建议的增加var.detach().numpy() 或者使用with torch.no_grad(): 或者 @torch.no_grad()


4. OSError: [Errno 22] Invalid argument \u202a

'\u202aD:/coco2017/annotations/instances_val2017.json
原因: 在win下,文件属性页安全选项卡中复制得到的路径中存在其他字符 \u202aD
解决: 手动输入出错位置 D:/


5. ImportError: DLL load failed: 页面文件太小,无法完成操作。

原因: 多线程问题, 虚拟内存不足
解决: 减小num_workers或扩大虚拟内存


6. BrokenPipeError: [Errno 32] Broken pipe

原因: windows下多线程的问题,和DataLoader类有关
解决: 减小num_workers


模型加载错误汇总

本文中描述不清的地方,请参考:
最完整、最全面:https://blog.youkuaiyun.com/LXYTSOS/article/details/90639524
无法加载问题:https://blog.youkuaiyun.com/m0_37518259/article/details/106050327
加载键值可匹配的权重:https://blog.youkuaiyun.com/qq_36523492/article/details/108769572
只想训练个别层:https://blog.youkuaiyun.com/qq_34351621/article/details/79967463
又一篇汇总:https://blog.youkuaiyun.com/hungryof/article/details/81364487

1. size mismatch

RuntimeError: Error(s) in loading state_dict for Yolact: size mismatch for prediction_layers.0.conf_layer.weight: copying a param with shape torch.Size([243, 256, 3, 3]) from checkpoint, the shape in current model is torch.Size([21, 256, 3, 3]).
原因: 构造模型与导入模型的参数Size不一致, 是由于微调模型改变了输出层的形状
解决: 先导入可以匹配的模型参数, 再另外将输出层权重初始化

2. Missing key(s)

RuntimeError: Error(s) in loading state_dict for Yolact: Missing key(s) in state_dict: "backbone.layers.2.6.conv1.weight", ...

原因: 权重文件中的参数不匹配
解决: 将权重读出来, 对比报错信息, 更换权重文件或适配模型代码

import torch

path = "yolact_base_54_800000.pth"
state_dict = torch.load(path)
print(list(state_dict.keys()))

3. Missing key(s) 并行训练

RuntimeError: Error(s) in loading state_dict: Missing key(s) in state_dict: "module..."; Unexpected key(s) in state_dict

原因: 模型训练时使用了 torch.nn.DataParallel(),而此时加载模型参数后没有使用
解决:
法① 添加 net = nn.DataParallel(net)
法② 替换导入

net.load_state_dict({k.replace('module.',''):v for k,v in torch.load(参数路径).items()}) 

4. ModuleNotFoundError: No module named ‘model’

result = unpickler.load() ModuleNotFoundError: No module named 'models.yolo'

原因: 原始模型保存不规范,导致在加载时依赖工程目录
解决: 在原始工程下将权重resume之后,重新保存model.state_dict即可


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值