解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(一)

问题1: load() missing 1 required positional argument: ‘Loader’

问题原因:该报错原因提示为load函数缺少必填的Loader参数

解决方案1:使用safe_load()函数代替 load()

import yaml
    with open(filename, 'r') as f:
        yaml_cfg = edict(yaml.safe_load(f))

解决方案2:添加参数 Loader=yaml.FullLoader

import yaml
    with open(filename, 'r') as f:
        yaml_cfg = edict(yaml.load(f,Loader=yaml.FullLoader))

解决方案3:降级pyyaml 版本(亲测有效)
pip install pyyaml==5.4.1

问题2:ModuleNotFoundError: No module named ‘dateutil’

问题原因:pip install dateutil失败,因为该模块非常坑,他叫 python-dateutil
解决方案: pip3 install python-dateuti

问题3:RuntimeError: Expected object of backend CPU but got backend CUDA for argument #4 ‘mat1’

问题原因:期望的对象是在后端CPU,但参数在后端CUDA上面,直白来说,就是模型没有放到cuda上面,但是模型需要的参数或者模型的部分模块被放到了cuda上面。

解决方案:将模型也放到cuda上

# 进行可用设备检测, 有GPU的话将优先使用GPU
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model = model.to(device) 或 model = model.cuda(device)

问题4:ValueError: not enough values to unpack (expected 3, got 2)

问题原因:期望有三个返回值,但其实函数只有两个返回值

解决方案:定位到错误,检查函数和接收函数返回值的参数个数

问题5:Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same

问题原因:输入的数据类型为torch.cuda.FloatTensor,说明输入数据在GPU中
模型参数的数据类型为torch.FloatTensor,说明模型还在CPU

解决方案:将对应的模型参数放入cuda
如:

proj = nn.Conv2d(3, 3, 3, 4, 0)
imgs[i] = proj(imgs[i])

出错,说明img[i]在gpu上面,而我们的proj还在cpu上,所以要把proj放到cuda上面去:

proj = nn.Conv2d(3, 3, 3, 4, 0)
proj = proj.cuda()
imgs[i] = proj(imgs[i])

猜你喜欢

转载自blog.csdn.net/air__Heaven/article/details/124191059
今日推荐