PyTorch ConvNet训练损失无变化且仅预测单个类别问题排查求助
问题排查与解决方案
首要修复:核心模型结构错误
你当前的网络输出层后额外添加了ReLU激活,这是导致故障的核心原因:
- 交叉熵损失(CEL)默认接收线性层输出的原始logits作为输入,输出层后加ReLU会将所有负输出强制置为0,完全破坏分类概率分布的表达能力,同时极易导致梯度断流,模型无法学习有效参数
- 直接删除
linear_relu_stack的第5层ReLU即可,修改后的输出段仅保留最后一层Linear(in_features=512, out_features=2, bias=True)
你观察到的训练损失稳定卡在0.693147刚好是ln(2)的数值,对应两类输出概率均为0.5时的交叉熵结果,完全符合上述故障导致模型无法学习的特征。
其余需调整的配置项
- 输入数据归一化:你当前没有做任何图像预处理,28*28像素的原始0255数值范围过大,会直接让线性层进入ReLU饱和区导致梯度消失。新增归一化逻辑,将输入像素值除以255缩放到01区间,或用数据集均值、标准差做标准化
- 学习率衰减参数修正:你当前的衰减因子gamma设为0.0005,若为每轮衰减,第一轮后学习率会直接降到5e-8,近似于停止更新。将gamma调整到0.9~0.99区间,或训练前10轮先关闭学习率衰减,待损失稳定下降后再启用
- 类别权重调整:当前数据集两类占比约1.87:1,属于轻度不均衡,现有权重设置合理。若修复上述问题后仍有偏向,可将少数类权重适当提高到1:2左右测试
验证步骤
修改完成后重新训练3~5个epoch,观察训练损失是否从0.693开始下降,同时打印测试集的预测分布,确认不再出现单类预测的问题。如果仍有异常,可以先检查数据集标签加载逻辑,确认少数类样本的标签没有被错误赋值为多数类。
内容的提问来源于stack exchange,提问作者Matthew Jacobsen
相关产品推荐
相关产品推荐

