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

Keras二分类模型验证准确率为1却仅预测类别0的问题排查

神经网络仅预测类别0的故障排查方案

核心问题:预测逻辑错误

你代码里的预测步骤用了完全错误的处理方式:

y_pred = model_net.predict(X_test).argmax(1)

你的神经网络最后一层是Dense(1, activation='sigmoid'),输出是单个0-1之间的概率值,代表样本属于类别1的概率。但argmax(1)是在维度1上取最大值的索引,而你的输出形状是(16516, 1),维度1只有一个元素,索引只能是0,所以所有预测结果全为0。

正确的预测逻辑

把sigmoid输出通过阈值(通常设为0.5)转换为类别标签:

y_pred_proba = model_net.predict(X_test)
# 概率>=0.5则判定为类别1,否则为0,最后展平成一维数组
y_pred = (y_pred_proba >= 0.5).astype(int).flatten()

关于训练日志的说明

你看到训练时val_accuracy接近100%是真实的——Keras在二分类任务中计算accuracy时,默认会用0.5作为阈值把sigmoid输出转成类别,和真实标签对比。也就是说模型本身已经训练好了,只是你预测时的逻辑错误导致结果异常。

额外建议:数据缩放的正确姿势

虽然你提到缩放会降低其他模型的准确率,但神经网络对数据尺度更敏感。你可以单独给神经网络做数据预处理,不影响其他模型:

from sklearn.preprocessing import StandardScaler

# 只针对神经网络的训练/测试集做缩放
scaler = StandardScaler()
X_train_net = scaler.fit_transform(X_train)
X_test_net = scaler.transform(X_test)

# 用缩放后的数据训练神经网络
run_hist = model_net.fit(X_train_net, y_train, ...)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:48:20