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

语音识别推理代码报错:LabelEncoder未拟合,如何解决?

解决sklearn.exceptions.NotFittedError:推理时LabelEncoder为何需要拟合?

我刚看完你的问题,这个报错其实很常见——你只复制了推理代码,但忽略了LabelEncoder在训练阶段已经拟合过类别映射,推理时必须复用这个拟合好的实例,而不是重新创建一个空的LabelEncoder。

问题根源

你代码里的lb = LabelEncoder()是新建了一个完全空白的实例,它根本不知道训练时模型对应哪些标签(比如是性别标签还是情绪标签)。inverse_transform方法需要依赖训练时生成的classes_属性来把模型输出的数字索引转回原始标签,空实例没有这个属性,自然就报错了。

解决步骤

1. 先从训练代码里保存拟合好的LabelEncoder

打开你参考的final_results_gender_test.ipynb,找到训练过程中拟合LabelEncoder的代码(应该有类似lb.fit(y_train)或者lb.fit(标签列表)的行),在那之后添加保存代码:

# 用joblib保存(sklearn官方推荐方式)
import joblib
joblib.dump(lb, 'label_encoder.pkl')

# 或者用pickle保存
import pickle
with open('label_encoder.pkl', 'wb') as f:
    pickle.dump(lb, f)

运行这段代码,会生成一个label_encoder.pkl文件,把它和你的推理代码、模型文件放在同一个目录下。

2. 在推理代码里加载这个保存好的LabelEncoder

把你代码里的lb = LabelEncoder()替换成加载代码:

# 如果用joblib保存的
import joblib
lb = joblib.load('label_encoder.pkl')

# 如果用pickle保存的
import pickle
with open('label_encoder.pkl', 'rb') as f:
    lb = pickle.load(f)

这样lb就带着训练时的类别映射信息了,调用inverse_transform就不会报错。

备选方案(如果找不到训练代码)

如果实在找不到训练时的代码,你可以手动拟合LabelEncoder,但必须严格和训练数据的标签一致,包括顺序。比如假设训练时的标签是['angry', 'happy', 'neutral', 'sad'],就写:

lb = LabelEncoder()
lb.fit(['angry', 'happy', 'neutral', 'sad']) # 顺序必须和训练时完全相同

不过这种方法风险很高,一旦标签顺序或数量错了,推理结果就会完全错误,所以优先推荐第一种加载保存好的实例的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:17:58