You need to enable JavaScript to run this app. IRIS数据集二分类场景下1D CNN准确率极低问题求助
优惠活动
大模型
产品
解决方案
定价
更多

IRIS数据集二分类场景下1D CNN准确率极低问题求助

IRIS二分类CNN任务准确率低、波动大的排查优化方案
  • 训练轮次严重不足:当前仅设置epochs=2,模型还未完成有效特征学习就停止训练,是效果差的核心原因之一。IRIS二分类任务建议先将训练轮次调整到20~50区间,观察损失下降收敛趋势后再做调优。
  • 损失函数与输出逻辑不匹配:你使用了nn.NLLLoss()负对数似然损失,但模型输出没有经过LogSoftmax激活,直接拼接x和1-x的操作完全不符合NLLLoss的输入要求,损失计算逻辑错误。两种修正方案可选:
    1. 输出层添加F.log_softmax激活:return F.log_softmax(T.cat((x, 1 - x), -1), dim=1)
    2. 改为更适配二分类的实现:输出单值,损失替换为nn.BCEWithLogitsLoss(),逻辑更简洁。
  • 数据处理逻辑错误:
    1. 标准化顺序错误:当前在Dataset初始化时先对全量trainX做标准化,之后才过滤0、1两类标签,标准化统计量包含了被丢弃的第三类样本数据,不符合处理规范。应该先过滤标签,再对保留的训练数据拟合StandardScaler。
    2. 测试集标准化逻辑错误:测试集不能单独fit StandardScaler,必须复用训练集拟合好的scaler实例做transform,否则会出现数据分布偏移。
    3. 批次大小设置不合理:batch_size=1会导致训练过程梯度波动极大,建议调整为8~16的小批次。
  • 模型架构适配问题:
    1. 卷积参数无实际作用:IRIS是4维表格数据,你用kernel_size=1的1D卷积等效于全连接层,完全没有发挥卷积的特征提取价值。如果一定要用CNN,可以将kernel_size调整为2,同时确保输入维度匹配。
    2. Dropout选型错误:nn.Dropout2d()是针对2D图像特征设计的dropout,1D数据应该使用nn.Dropout(),小样本任务建议先去掉dropout,或者设置dropout率为0.1即可。
  • 训练逻辑冗余&可复现性问题:
    1. 训练循环中重复将Y_tr转成torch.long类型,完全可以在Dataset初始化时直接把标签转为long类型,避免重复操作;X_tr.unsqueeze(0)的维度调整也可以放到__getitem__中统一处理,避免训练循环维度混乱。
    2. 结果波动大主要是未固定随机种子导致的,需要给numpy、PyTorch、CUDA(若使用GPU)都固定随机种子,同时如果Dataloader开启多worker也要固定worker种子,保证每次运行的初始化、数据打乱逻辑一致。
  • 验证逻辑参考性不足:二分类IRIS总共只有100个样本,9:1拆分后测试集仅10个样本,单次拆分的准确率统计误差极大,建议改用5折交叉验证来评估模型效果,结果更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:00:04