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

如何从Keras实现的二值图像分类模型中获取对应分类类别

问题原因

你出现所有score均为0的核心原因是预测代码逻辑和模型的二分类实现方式不匹配,把两种不同的二分类输出处理逻辑混写了。

解决方案

首先先确认你模型最后一层的配置和训练时用的损失函数,对应修改预测代码即可:

情况1:最后一层为单神经元+sigmoid激活,训练用binary_crossentropy损失

这是二分类最常用的实现方式,MODEL.predict()返回的是shape为(样本数, 1)的数组,每个值是样本属于正类的概率(范围0~1),你之前用np.argmax对只有1个元素的数组取最大值索引,结果永远是0,就是问题的根源。
正确预测代码:

predictions = MODEL.predict(img_array)
# 阈值默认取0.5,可根据实际需求调整
score = 1 if predictions[0][0] > 0.5 else 0
# 直接取输出值就是对应概率,无需额外调用sigmoid
prob = predictions[0][0]

类别对应:如果你是用tf.keras.utils.image_dataset_from_directory或者ImageDataGenerator.flow_from_directory加载数据集,可通过train_dataset.class_indices查看classA、classB对应的标签值,比如classA对应0、classB对应1的话,score为0即属于A,为1即属于B。

情况2:最后一层为2神经元+softmax激活,训练用分类交叉熵损失

这种实现方式下你不需要额外对预测结果调用sigmoid,原来的代码多余加了sigmoid转换导致结果异常。
正确预测代码:

predictions = MODEL.predict(img_array)
# 对单个样本的2个输出取最大值索引
score = np.argmax(predictions[0])
prob = predictions[0][score]

补充说明

你对模型拟合情况的判断基本正确,训练集和验证集曲线走势一致没有明显发散,确实不存在过拟合问题,后续训练可加入早停回调避免后续出现过拟合。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:05