PyTorch调用torch.load()加载模型后运行报错TypeError: 'dict' object is not callable
错误原因
你通过torch.load()加载得到的对象是包含模型权重、训练配置等信息的 checkpoint 字典,并非可直接调用的模型实例,直接传入输入调用就会触发TypeError: 'dict' object is not callable报错。
修复方案
推荐方案(兼容性强)
- 先实例化和训练时结构完全一致的模型类,再从加载的checkpoint字典中提取权重赋值给模型:
import torch # 1. 实例化你的模型类 model = 你的模型类名() # 2. 加载checkpoint字典 ckpt = torch.load("你的模型文件路径") # 3. 载入权重到模型实例 model.load_state_dict(ckpt["state_dict"]) # 4. 切换为推理模式,避免训练专属层影响输出结果 model.eval()
完成上述操作后,就可以正常调用model(输入数据)进行推理。
应急方案(仅本地测试可用)
如果是在本地训练、本地推理的场景,可以直接保存模型实例而非权重字典,加载后可直接调用,缺点是跨环境、跨PyTorch版本兼容性差:
# 训练阶段保存代码 torch.save(model, "model.pth") # 推理阶段加载代码 model = torch.load("model.pth") model.eval()
排查项
如果按上述操作仍报错,检查变量名是否混淆,避免误将ckpt字典变量当做模型实例传入输入。
内容的提问来源于stack exchange,提问作者Yagna Thakkar
相关产品推荐
相关产品推荐

