Django运行时classify_image函数报错:OrderedDict对象不可调用
错误原因与解决方案
错误原因
报错TypeError: 'collections.OrderedDict' object is not callable是因为代码中的model变量并不是可调用的PyTorch模型实例,而是模型的状态字典(state_dict)——一个OrderedDict类型的键值对集合,仅存储模型权重参数,无法像函数一样执行model(img)调用。
正确解决方案
1. 先实例化模型结构类
你需要先基于训练时用的模型结构类,创建一个模型实例:
# 根据实际文件路径导入你的模型类 from .model_definition import PlantDiseaseClassifier # 实例化模型(参数需和训练时完全一致) model = PlantDiseaseClassifier()
2. 正确加载模型权重
不要直接把torch.load()的结果赋值给model,而是先加载状态字典,再通过load_state_dict()方法把权重注入模型实例:
import torch # 加载模型状态字典,若在CPU环境运行GPU训练的模型,需加map_location参数 state_dict = torch.load('path/to/your/trained_model.pth', map_location=torch.device('cpu')) # 将权重加载到模型实例中 model.load_state_dict(state_dict) # 必须设置模型为评估模式,关闭dropout、batch norm等训练专属机制 model.eval()
3. 检查变量赋值逻辑
确保在classify_image函数执行前,model变量始终指向模型实例,没有被错误地重新赋值为state_dict。
错误示例(需避免)
之前的错误操作大概率是直接将加载的state_dict赋值给了model:
# 错误:此操作会让model变成OrderedDict,而非可调用的模型实例 model = torch.load('path/to/your/model.pth')
内容的提问来源于stack exchange,提问作者Krishna Sahu
相关产品推荐
相关产品推荐

