You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:02:12