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

使用fastai SaveModelCallback保存的时序分类模型无法加载问题

问题原因

fastai的SaveModelCallback仅保存模型的权重参数(本质是OrderedDict类型的字典),而非完整的Learner对象。而load_learner是专门用来加载通过learner.export()保存的完整Learner实例(包含数据加载器dls、模型结构、训练配置等所有必要组件),直接加载权重文件自然会触发'OrderedDict' object has no attribute 'dls'的错误。

解决方案

方案1:加载SaveModelCallback保存的权重文件

如果要继续使用已保存的.pth权重,需先复刻训练时的Learner实例,再加载权重:

# 复刻训练时的环境与Learner结构
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
os.environ["DEVICE"] = "cuda"
from pickle import load
import numpy as np
from tsai.all import *

dataset_idx = 0
# 重新加载数据集(保证数据结构与训练时一致)
X_train = load(open(r"X_train_"+str(dataset_idx)+".pkl", 'rb')).transpose((0,2,1))
y_train = load(open(r"y_train_"+str(dataset_idx)+".pkl", 'rb'))
X_test = load(open(r"X_test_"+str(dataset_idx)+".pkl", 'rb')).transpose((0,2,1))
y_test = load(open(r"y_test_"+str(dataset_idx)+".pkl", 'rb'))
l = X_train.shape[0]
X = np.concatenate([X_train, X_test],axis=0)
y = np.concatenate([y_train, y_test],axis=0)

# 构建与训练时完全一致的Learner
learn = TSClassifier(X, y, splits = [list(range(l)), list(range(l, y.shape[0]))], arch=InceptionTimePlus, bs=256, arch_config=dict(fc_dropout=0.5), shuffle_train=True)
# 加载权重文件
learn.load("ITP_"+str(dataset_idx))

# 后续推理逻辑
y_test = load(open(r"y_test2_"+str(dataset_idx)+".pkl", 'rb'))
X_test = load(open(r"X_test_"+str(dataset_idx)+".pkl", 'rb')).transpose((0,2,1))
preds = learn.get_preds(dl=learn.dls.test_dl(X_test))

方案2:改用export()保存完整模型(更推荐)

如果无需单独保存权重,直接用export()保存完整Learner,再用load_learner()加载,流程更简洁:

修改训练阶段的保存代码

替换SaveModelCallback相关逻辑,改用export():

# 原有训练代码不变...
learn.fit_one_cycle(3, 0.001)
# 保存完整Learner实例
learn.export(f"ITP_{dataset_idx}.pkl")

测试阶段的加载代码

直接加载即可,无需复刻Learner:

from tsai.inference import load_learner

dataset_idx = 0
learn = load_learner(f"ITP_{dataset_idx}.pkl")
y_test = load(open(r"y_test2_"+str(dataset_idx)+".pkl", 'rb'))
X_test = load(open(r"X_test_"+str(dataset_idx)+".pkl", 'rb')).transpose((0,2,1))
preds = learn.get_preds(dl=learn.dls.test_dl(X_test))

内容的提问来源于stack exchange,提问作者Granth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:13:12