Keras模型predict全输出1.,训练准确率却极高的问题求助
问题排查:MNIST清晰/模糊二分类器预测全为1,但训练准确率拉满
嘿,我碰到过类似的坑,先给你捋捋最可能的原因和解决办法:
最核心的问题:预测数据预处理和训练数据不一致
你看代码里,训练和验证阶段用ImageDataGenerator做了rescale=1. / 255,把像素值从0-255缩到了0-1,但预测的时候直接读图片转成数组,完全没做归一化!模型是用归一化后的数据训练的,突然喂给它0-255的原始像素,它肯定懵了,输出全1一点都不奇怪。
修复方法:给预测数据加上同样的归一化
修改你的预测代码段:
filelist = glob.glob('/Binary Classifier/data/image_data/*.png') x = [] for fname in filelist: img = Image.open(fname) img_array = np.array(img) # 必须和训练时一样做归一化! img_array = img_array / 255.0 x.append(img_array) x = np.array(x) x = np.expand_dims(x, axis=3) # 保持输入形状和模型一致:(样本数, 28, 28, 1) ones = model.predict(x)
其他需要排查的点
- 确认类别映射关系
训练时flow_from_directory会按文件夹的字母顺序给类别分配0和1,你可以在训练完后加一行:
print("类别映射:", train_generator.class_indices)
比如输出如果是{'clear': 0, 'blurry': 1},那模型输出1代表模糊类,你得确认测试集里是不是真的不全是模糊图——不过大概率不是这个问题,但确认一下没坏处。
- 检查测试图片的格式
确保所有测试图都是28×28的灰度图(模式为L),可以加个小检查:
for fname in filelist: img = Image.open(fname) print(f"图片:{fname},尺寸:{img.size},模式:{img.mode}")
如果有尺寸不对或者彩色图,也会导致模型输出异常。
- 验证集准确率是否正常?
你只说了训练准确率近乎完美,但如果验证准确率很低,那可能是模型过拟合了,但这种情况一般不会输出全1,所以优先级低于预处理问题。
总结
90%的概率是预测数据没归一化导致的,先改这个试试,应该就能解决问题了!
内容的提问来源于stack exchange,提问作者Steven Chan
相关产品推荐
相关产品推荐

