在torch.load的时候报错 result = unpickler.load() ModuleNotFoundError: No module named ‘xxx‘ 个人错误解决记录

torch.load(“xxx.pt”)的时候出现这种错误一般是模型加载异常
在这里插入图片描述
当时搜了好半天
网上给的解决方法

一是重新加载和save代码

因为这个模型保存了除模型参数之外其他的参数,会涉及到文件的具体位置,所以在将A塞到B中的时候就会发生错误,由于旧的.pth保留的好,就将其重新load然后仅取其中的模型参数再save成新的.pth模型
因此,可以用以下方法,重新在pt文件或者ckt文件同级文件夹下使用如下命令重新加载和save

package = torch.load(model_path)
p = './static_dict.pth'
torch.save(package.state_dict(), p)

另一个方法

二是在chatgpt给出的方法

在这里插入图片描述
简单总结以下就是,没有该模块就pip install,如果不是pip的包,而是自定义模块,采用sys.append等方法添加其到python的搜索路径中去。

不过我又碰到了以下报错
在这里插入图片描述
不过在尝试chatgpt给出的方法后,仍未解决,因此大概清楚,不是ModuleNotFoundError: No module named ‘xxx‘ 这里出的问题,那就只有在错误处向前溯源打断点慢慢debug了。

三回到torch.load

在一步步debug的过程中,发现torch.load的时候虽然在控制台输出是导入了该pt文件,但实际进入的时候却自动跳到python自带包中,也就是路径出了问题。
那需要做的就是确保load的目录位于Python的搜索路径中。因此使用sys.path.append()将目录绝对路径添加到sys.path。(PS:之前是相对路径,估摸是这里出了岔子)

sys.path.append(r'/load/文件/的绝对路径')

采用这句就解决

小结

虽然方法非常简单,甚至正常到直锤脑袋的地步,不过也困扰我大半天
果然报错直接搜,不检查代码还是不够直观,每个错都大大小小的不同,只能说Debug才是最佳方式啊。

猜你喜欢

转载自blog.csdn.net/weixin_42455006/article/details/129250284