如何用Keras的model.predict()获取CNN二分类模型的概率分数?
解决CNN模型predict仅输出0/1而无法获取概率值的问题
嘿,这问题我之前也碰到过!咱们一步步来排查解决:
核心原因分析
你的模型最后一层用了sigmoid激活,理论上应该输出0到1之间的概率值,现在只出0或1,大概率是输入预处理环节出了问题,或者是调用predict时的输入格式不对。
具体解决方案
检查图像预处理步骤
确保你没有把输入图像错误地二值化(比如用了阈值截断操作),而且要把像素值归一化到0-1的浮点范围。比如:# 正确的预处理示例 from PIL import Image import numpy as np img = Image.open("test_image.jpg").resize((1500, 1500)) img_array = np.array(img).astype('float32') / 255.0 # 转为浮点并归一化保证输入的维度正确
model.predict()要求输入是批量数据,也就是形状为(batch_size, height, width, channels)。如果是单张图像,必须手动添加batch维度:img_array = np.expand_dims(img_array, axis=0) # 从(1500,1500,3)变成(1,1500,1500,3)执行预测并获取概率
现在调用predict就能得到连续的概率值了:pred_prob = model.predict(img_array)[0][0] print(f"分类概率: {pred_prob}") # 输出类似0.656这样的数值
额外排查点
如果还是不行,检查下训练时的设置:
- 确认训练用的损失函数是
binary_crossentropy(二分类任务的正确选择) - 模型保存和加载过程中有没有丢失层的设置(比如用
model.save()和load_model()而不是手动重建)
内容的提问来源于stack exchange,提问作者Wasswa Samuel
相关产品推荐
相关产品推荐

