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

PyTorch训练二分类MLP模型始终预测0、训练失效问题求助

问题产生原因
  • 预测逻辑错误:模型最后一层是Sigmoid,输出是介于0~1之间的概率值,直接调用to(torch.long)会对浮点值做截断取整,只要输出值小于1(不管是0.1还是0.9),转换后都会变成0,这是得到全0预测结果最直接的原因。
  • 数据集无学习价值:当前的输入特征X是均匀随机生成的,标签y也是随机生成的,输入和标签之间没有任何对应关系,模型无法学到有效分类规律,最优的收敛结果就是直接预测占比更高的类别,若训练集中0类占比略高,就会出现全0预测的情况,准确率最高只能接近随机猜测的50%。
  • 其他次要原因:训练轮次不足、学习率设置不合理也可能导致模型收敛差,但不是当前问题的核心诱因。
解决方案
  • 修正预测逻辑:增加阈值判断,将概率值转换为类别标签,示例修改代码如下:
with torch.no_grad():
    predictions = model(X_train)
    # 加阈值判断,大于等于0.5判为1,否则为0
    predictions = (predictions >= 0.5).to(torch.long)
    y_pred = predictions.numpy()
    y_true = y_train.numpy()
  • 替换为可学习的数据集:构造输入特征和标签有对应关系的数据集,示例构造代码如下:
# 示例规则:3个特征的和大于1.5时标签为1,否则为0
X_train = torch.rand((200, 3),dtype=torch.float32)
y_train = (X_train.sum(dim=1, keepdim=True) > 1.5).float()

X_test = torch.rand((100, 3),dtype=torch.float32)
y_test = (X_test.sum(dim=1, keepdim=True) > 1.5).float()
  • 优化训练配置:可根据实际情况将训练轮次提升到200~500轮,也可显式设置Adam优化器的学习率(默认1e-3适配大多数场景,也可尝试1e-4、5e-4等参数),训练过程中定期打印损失值,确认损失处于下降趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:57:03