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

Keras模型预测异常:高准确率下预测类别全为0的问题排查

Keras二分类模型预测结果处理错误:np.argmax失效改用阈值判断

问题场景

  • 使用pandas和Keras处理威斯康星乳腺癌数据集,构建简单深度神经网络(DNN)
  • 训练完成后,模型在测试集上的评估准确率约为97.66%
  • 调用model.predict()获取预测结果后,用np.argmax()处理得到的类别全为0,但测试集真实标签包含0和1两类

问题原因

你的模型输出层设置为Dense(1, activation="sigmoid"),这是二分类任务的标准配置:输出是单个介于0-1之间的概率值,代表样本属于类别1的概率。而np.argmax()的作用是在多分类场景下(输出层有多个神经元,每个对应一类的概率),返回概率最大值的索引。但这里输出只有1个维度,np.argmax()作用于该维度时永远返回0,因此所有预测结果都被判定为类别0——这和模型的准确率不矛盾,因为Keras内部评估准确率时,是用阈值(默认0.5)来判断类别,而非np.argmax()。

解决方案

改用阈值判断(二分类任务通常以0.5为分界)将概率值转换为类别标签:

y_prediction = model.predict(X_test)
y_prediction = y_prediction > 0.5
y_prediction = y_prediction.astype(int)

模型构建与评估代码

from keras.models import Sequential
from keras.layers import Dense

model = Sequential() # 初始化空模型
model.add(Dense(12, input_dim=X_train.shape[1], activation="relu"))
model.add(Dense(1, activation="sigmoid")) 

model.compile(optimizer="sgd", loss="binary_crossentropy", metrics=["accuracy"])

model.fit(X_train, Y_train, epochs=100)

print("\nEvaluation: ", model.evaluate(X_test, Y_test))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:03:16