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

如何判断CrossEntropyLoss与MulticlassAccuracy是否存在对应偏差?

训练损失与准确率不匹配的问题排查

核心矛盾分析

397类多分类任务的随机准确率约为0.0025,你的训练准确率0.037远高于随机水平,但CrossEntropyLoss仅为0.35,这明显不符合逻辑——CrossEntropyLoss为0.35意味着模型对正确类别的预测概率约为70%,对应的准确率应该接近70%,而非3.7%。说明损失或准确率的计算必然存在错误。

重点排查方向

  • 模型输出的logits是否为未归一化的原始输出
    Hugging Face的ResNetForImageClassification返回的logits应为未经过softmax的原始输出,但需确认这一点。如果logits实际是经过softmax的概率分布,CrossEntropyLoss会计算出异常偏低的损失(该损失函数要求输入为未归一化的logits),但此时模型的预测完全不可靠,导致准确率极低。
    验证方法:在training_step中打印logits的最大值、最小值,或取单个样本计算torch.softmax(logits[0], dim=0).max(),如果概率接近1但准确率仍低,说明此处存在问题。

  • 标签y的格式是否符合要求
    CrossEntropyLoss要求标签y是类别索引(整数型,范围0~396),而非one-hot编码。如果y是one-hot格式(形状为[batch_size, 397]),或类型为浮点型,会导致损失计算错误,出现损失与准确率不匹配的情况。
    验证方法:打印y.shape和y.dtype,确认形状为[batch_size],类型为torch.long或torch.int64。

  • MulticlassAccuracy的累积与计算是否正确
    虽然代码中参数设置正确,但需确认on_epoch=True时指标的累积逻辑是否正常。可以在training_step中同时打印当前batch的损失和准确率,观察单batch内的损失与准确率是否匹配——如果单batch损失低但准确率仍低,说明模型的预测逻辑存在根本性错误。

  • 模型分类器的替换是否正确
    确认self.model.classifier的输出维度确实是397。原microsoft/resnet-50的分类器输出为1000类,替换后的Linear(2048, num_labels)需保证特征输入维度为2048(ResNet50的平均池化输出维度),如果特征维度不匹配,会导致logits输出异常。
    验证方法:打印logits.shape,确认其为[batch_size, 397]。

快速调试代码

可以在training_step中添加以下代码定位问题:

def training_step(self, batch, batch_idx):
    X, y = batch
    logits = self(X)
    
    # 调试信息
    print(f"Logits shape: {logits.shape}")
    print(f"Labels shape: {y.shape}, dtype: {y.dtype}")
    print(f"Sample logits max: {logits[0].max().item()}, argmax: {logits[0].argmax().item()}")
    print(f"Sample label: {y[0].item()}")
    
    loss = self.loss_function(logits, y)
    self.log("train_loss", loss, on_epoch=True)

    acc1 = self.accuracy_top_1(logits, y)
    print(f"Batch loss: {loss.item()}, batch accuracy: {acc1.item()}")
    self.log("train_accuracy_1", acc1, on_epoch=True, prog_bar=True)
    return loss

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:30:50