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

为何PyTorch线性神经网络训练中测试准确率长期无变化?

三分类线性模型训练后测试准确率固定的排查方向
  • 线性模型的表达能力瓶颈
    线性神经网络(全连接层+线性激活)只能学习线性可分的决策边界。如果你的数据集本身不满足线性可分,模型会快速收敛到局部最优,后续训练无法进一步优化,自然测试准确率保持不变。线性激活没有非线性变换,完全无法捕捉数据中的复杂模式,这是这类模型的先天局限。

  • 损失函数与输出层的适配问题
    三分类任务用线性激活输出时,损失函数的选择要格外注意:

    • 若使用CrossEntropyLoss,它要求输入是未经过softmax的logits,线性激活的输出(全体实数)是符合要求的,但要确保输出层维度是3(对应三类);
    • 若误用MSELoss配合独热标签,线性模型的连续输出很难逼近离散的独热编码,模型会早早陷入无法优化的状态。
  • 优化器与学习率设置失误

    • 学习率过大:参数更新幅度过大,模型在最优值附近震荡,但线性模型的特性会让震荡后的准确率回到同一水平;
    • 学习率过小:参数更新缓慢,甚至几个epoch后就完全停止更新,准确率不再变化;
    • 优化器选择不当:比如用纯SGD且无动量,面对有噪声的数据,模型容易快速陷入停滞。
  • 数据预处理缺失
    如果特征没有做标准化/归一化,不同特征的数值范围差异悬殊,线性模型的参数更新会被数值大的特征主导,其他特征的权重无法有效调整,模型很快收敛到次优解,之后准确率不再变动。比如某特征范围是0-1000,另一特征是0-1,模型会优先拟合前者,完全忽略后者的信息。

  • 训练循环的逻辑漏洞
    检查PyTorch训练代码的细节:

    • 训练时是否忘记调用model.train()?没开启训练模式的话,模型参数不会更新;
    • 测试时是否没调用model.eval()?虽然线性模型可能没有BatchNorm、Dropout这类依赖模式的层,但仍需确保测试时模型处于评估状态;
    • 每次训练步骤后是否调用了optimizer.zero_grad()?梯度累积会导致参数更新异常,快速停滞;
    • 确认测试集数据加载是否正确,比如有没有误将训练集数据重复加载到测试集,或者测试集样本的标签是否存在异常(比如全是同一类别,但你明确不能处理数据不平衡,可快速验证排除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:03