繁体   English   中英

Pytorch 错误:“BiSeNet”object 没有属性“模块”

[英]Pytorch error: 'BiSeNet' object has no attribute 'module'

我是 pytorch 的新手,我正在尝试研究 BiSeNet 进行图像分割(代码取自 github 存储库: Z5E056C500A1C4B6A7110B50D807BADEflow./5ZNetblob/b/imasterflow// 在训练阶段,在经过一些训练 epoch 之后,网络会进行验证,如果 val 的结果比之前的更好,则尝试保存 model 的参数。 在最后一次操作中,我在第 109 行(以及训练期间的 102)中收到此错误:

AttributeError: 'BiSeNet' object has no attribute 'module'

我没有在这里粘贴所有代码,而只是主要步骤。

首先,他们像这样构建了 model:

os.environ['CUDA_VISIBLE_DEVICES'] = args.cuda
model = BiSeNet(args.num_classes, args.context_path)
if torch.cuda.is_available() and args.use_gpu:
        model = model.cuda()

因此存在一个 BiSeNet object,这要归功于一个名为“model”的导入模块,其中有一个名为 build_BiSeNet.py 的文件; 在此脚本中,定义了 class BiSeNet,并且没有名为模块的属性。 查看 pytorch 文档,似乎在 Model class 中有一个名为 modules 的属性,其中包含我想保存的模块。 在文档中,他们还建议执行torch.save(model.state_dict(), ...)以保存 model,而无需调用模块属性,就像在第 109 行中完成的那样)

所以,最后,我的问题是:为了避免给我的错误,我应该在第 109 行(以及第 102 行)中删除.module 还是将这个属性更改为.modules?

查看他们的demo.py ,他们正在定义 model:

model = BiSeNet(args.num_classes, args.context_path)
if torch.cuda.is_available() and args.use_gpu:
  model = torch.nn.DataParallel(model).cuda()

使用nn.DataParallel包装model后,您将获得一个“额外的” .module
保存的检查点没有这个额外的.module ,因此,在加载保存的检查点时:

model.module.load_state_dict(torch.load(args.checkpoint_path))

它不是直接加载到model ,而是加载到model.module

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM