Pytorch error: 'BiSeNet' object has no attribute 'module'
Pytorch error: 'BiSeNet' object has no attribute 'module'
我是 pytorch 的新手,我正在尝试研究用于图像分割的 BiSeNet(代码取自 github 存储库:https://github.com/ooooverflow/BiSeNet/blob/master/train.py)。在训练阶段,经过一些训练 epoch 后,如果 val 的结果优于之前的结果,则网络会执行验证并尝试保存模型的参数。
在最后一次操作中,我在第 109 行(以及训练期间的第 102 行)收到此错误:
AttributeError: 'BiSeNet' object has no attribute 'module'
我没有在这里粘贴所有代码,只粘贴主要步骤。
首先,他们建立了这样的模型:
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 对象,这要归功于名为“模型”的导入模块,其中有一个名为 build_BiSeNet.py 的文件;在此脚本中,定义了 class BiSeNet,并且没有名为模块的属性。
查看 pytorch 文档,似乎在 Model class 中有一个名为 modules 的属性,其中包含我要保存的模块。
在文档中,他们还建议执行 torch.save(model.state_dict(), ...)
以保存模型,而不调用模块属性 Ilike 它是在第 109 行完成的)
所以,最后,我的问题是:为了避免出现错误,我应该在第 109 行(以及第 102 行)删除 .module 还是将此属性更改为 .modules?
看看他们的demo.py
,他们在定义模型:
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
。
我是 pytorch 的新手,我正在尝试研究用于图像分割的 BiSeNet(代码取自 github 存储库:https://github.com/ooooverflow/BiSeNet/blob/master/train.py)。在训练阶段,经过一些训练 epoch 后,如果 val 的结果优于之前的结果,则网络会执行验证并尝试保存模型的参数。 在最后一次操作中,我在第 109 行(以及训练期间的第 102 行)收到此错误:
AttributeError: 'BiSeNet' object has no attribute 'module'
我没有在这里粘贴所有代码,只粘贴主要步骤。
首先,他们建立了这样的模型:
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 对象,这要归功于名为“模型”的导入模块,其中有一个名为 build_BiSeNet.py 的文件;在此脚本中,定义了 class BiSeNet,并且没有名为模块的属性。
查看 pytorch 文档,似乎在 Model class 中有一个名为 modules 的属性,其中包含我要保存的模块。
在文档中,他们还建议执行 torch.save(model.state_dict(), ...)
以保存模型,而不调用模块属性 Ilike 它是在第 109 行完成的)
所以,最后,我的问题是:为了避免出现错误,我应该在第 109 行(以及第 102 行)删除 .module 还是将此属性更改为 .modules?
看看他们的demo.py
,他们在定义模型:
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
。