PyTorch加载预训练ResNet1D模型出现AttributeError如何解决?
问题根因
你目前使用的是PyTorch的全模型序列化保存方式torch.save(model, path),这种方式会把模型实例的结构和权重绑定序列化,同时依赖训练时模型类ResNet1D所在的模块路径,当你在没有定义ResNet1D类的独立脚本中加载时,PyTorch找不到对应的类定义,就会抛出这个属性错误。
解决方案
方案1:加载前在独立脚本中引入/定义ResNet1D类
- 直接把
model_prep.py里的ResNet1D类的完整代码复制到test.py开头,或者把model_prep.py作为模块导入:
# test.py 开头添加 from model_prep import ResNet1D import torch # 后续加载逻辑不变 model = torch.load('/content/drive/MyDrive/myModel.pt') model.eval()
注意:需要保证test.py和model_prep.py在同一目录下,或者model_prep.py在Python的模块搜索路径中
方案2(更推荐):重新保存为权重字典格式,避免类路径依赖
这种方案是PyTorch官方推荐的模型保存方式,只保存训练好的权重参数,不绑定模型结构,通用性更强:
- 先回到
model_prep.py中重新导出模型:
# 仅保存模型权重字典 torch.save(model.state_dict(), '/content/drive/MyDrive/myModel_weights.pt')
- 之后在任意独立脚本中加载时,先实例化ResNet1D类,再加载权重:
import torch from model_prep import ResNet1D # 或者直接复制ResNet1D类定义到此处 # 先初始化模型结构 model = ResNet1D() # 如果类有初始化参数要按实际传入 # 加载权重 model.load_state_dict(torch.load('/content/drive/MyDrive/myModel_weights.pt')) model.eval()
Tkinter部署可行性
这个方案完全可行,Tkinter是Python标准自带的GUI库,不需要额外安装复杂依赖,适合轻量本地工具开发:
- 你只需要在Tkinter的业务逻辑代码中按照上面的方案先加载好模型,再把用户输入的待预测数据做和训练时一致的预处理,喂给模型得到预测结果,最后把结果渲染到GUI界面上即可
- 单条数据预测的计算量很小,普通PC运行完全没有性能问题
内容的提问来源于stack exchange,提问作者Quine
相关产品推荐
相关产品推荐

