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
相关产品推荐
相关产品推荐

