【PyTorch】AttributeError: Can't get attribute 'BCNN'

错误:AttributeError: Can't get attribute 'BCNN' on


今天在服务器上训练好一个网络,用torch.save(model, 'net.pkl')将模型和参数一并保存了起来,方便在自己电脑上测试。

把保存的模型下载下来进行测试的时候发现报了上述错误。

原来保存下来的模型和参数不能在没有类定义时直接使用。


解决方法:

Pytorch使用Pickle来处理保存/加载模型,这个问题实际上是Pickle的问题,而不是Pytorch。

解决方法也非常简单,只需显式地导入类定义。即将包含类定义的文件复制粘贴到与要运行的文件同一文件夹下,再

import Class!

 

解决方法来自:

【PyTorch】AttributeError: Can't get attribute 'BCNN'_第1张图片

 

更加详细的解释来自:

pickle在保存信息的时候并不会保存类或对象的构造信息,而在unpickle时,需要访问该类才可以。

【PyTorch】AttributeError: Can't get attribute 'BCNN'_第2张图片

更更精确的解释来自pickle官网:

Generally you can pickle any object if you can pickle every attribute of that object. Classes, functions, and methods cannot be pickled -- if you pickle an object, the object's class is not pickled, just a string that identifies what class it belongs to. This works fine for most pickles (but note the discussion about long-term storage of pickles).

 

 

参考链接:

https://discuss.pytorch.org/t/error-loading-saved-model/8371/5

https://stackoverflow.com/questions/27732354/unable-to-load-files-using-pickle-and-multiple-modules

https://wiki.python.org/moin/UsingPickle

你可能感兴趣的:(python基础,pytorch,深度学习)