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

FastAI训练中train_loss/valid_loss下降但error_rate仍为1.0的原因

问题描述

我使用FastAI开展模型实验,已下载Kaggle手指数据集并运行以下代码。令我困惑的是,随着训练轮次(epoch)增加,train_loss和valid_loss持续下降,但error_rate始终维持在1.0,请问这是什么原因?

运行代码

import fastai
...
fingers = DataBlock(
    blocks=(ImageBlock, CategoryBlock),
    get_items=get_fingers,
    splitter=RandomSplitter(valid_pct=0.2, seed=42),
    get_y=get_finger_label,
    item_tfms=Resize(128)
)
processed_fingers = fingers.new(item_tfms=RandomResizedCrop(128, min_scale=0.3), batch_tfms=[*aug_transforms()])
dls = processed_fingers.dataloaders(fingers_path)

learn = vision_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(10)

训练结果

epochtrain_lossvalid_losserror_ratetime
02.1982081.9565721.00000000:13
12.0327561.9020291.00000000:14
21.8782751.3850141.00000000:13
31.7595581.2907561.00000000:13
41.6914771.1596351.00000000:13
51.6209371.0385251.00000000:14
61.5399830.9055081.00000000:13
71.4866070.8039551.00000000:14
81.4266490.7658631.00000000:14
91.3641540.7632161.00000000:14
原因分析与排查步骤

这种情况核心是模型的分类预测和真实标签完全不匹配,但损失函数仍能正常下降,常见原因及排查方法如下:

  • 标签提取逻辑错误:get_finger_label函数可能存在bug,比如从文件路径/名称提取标签时出错,导致所有样本的标签被映射为同一个值,或者标签与实际类别完全错位。比如数据集样本是不同手指数量的图片,但函数提取的标签全是同一个类别,此时模型会朝着最小化该类别的损失优化,但所有预测都和真实标签不符,error_rate保持1.0。
  • 类别映射错位:CategoryBlock自动生成的类别词汇表(dls.vocab)和get_finger_label返回的标签顺序不匹配。比如模型内部将类别编码为[0,1,2,3,4,5],但你的标签实际对应[5,4,3,2,1,0],此时模型的预测结果和标签完全反向,损失会下降但分类全错。
  • 数据加载异常:虽然loss在下降,但需确认验证集的样本标签是否在模型的类别范围内,或者RandomSplitter是否导致验证集样本的类别分布和训练集完全脱节(不过这种情况loss下降的概率较低)。

具体排查步骤

  1. 检查类别词汇表:运行print(dls.vocab),确认类别是否和数据集实际的手指类别(比如0-5根手指)一致。
  2. 可视化样本标签:运行dls.show_batch(),查看图片对应的标签是否正确,确认图片和标签的对应关系没问题。
  3. 验证标签函数:手动选取几个样本路径,调用get_finger_label函数,检查返回的标签是否符合预期。
  4. 查看混淆矩阵:运行以下代码生成混淆矩阵,直观查看模型预测的分布:
    interp = ClassificationInterpretation.from_learner(learn)
    interp.plot_confusion_matrix()
    
    如果混淆矩阵里只有某一行或某一列有值,说明模型所有预测都集中在一个类别,大概率是标签提取或映射的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:02:26