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

CNN猫狗分类val_accuracy80%但混淆矩阵、分类报告准确率仅50%排查

问题根源

你遇到的准确率差异问题和单样本预测逻辑无关,核心错误出在测试集生成器的参数配置上:

  • 调用flow_from_directory构建测试集迭代器时,你没有手动关闭打乱开关,接口默认shuffle=True,每次迭代取batch时会随机打乱测试集样本顺序
  • 训练过程中输出的80%验证准确率是准确的:因为训练时迭代器每输出一个batch,会同步返回该batch内样本匹配的真实标签,直接计算的精度不存在顺序错位
  • 你后续手动调用cnn.predict(test_set)做批量预测时,输出的预测结果是按打乱后的样本顺序排列的,但你读取的test_set.classes是按文件目录排序的固定顺序真实标签,两者顺序完全不匹配,用这两个错位的数组计算混淆矩阵、分类报告,结果自然和随机猜测(50%左右准确率)差不多,没有参考价值。
修复方案
  1. 修改测试集生成器初始化代码,关闭样本打乱,保证预测结果和真实标签顺序一一对应:
    test_set = test_datagen.flow_from_directory(                                            
            '/content/drive/MyDrive/ML Tutorial/CNN/dataset/test_set',
            target_size=(64, 64),
            batch_size=32,
            class_mode='binary',
            shuffle=False
    )
    
  2. 补充单样本预测的归一化逻辑,和训练预处理规则对齐:你训练时对所有图像做了1/255的像素值缩放,单张预测时也需要做相同处理,否则单样本预测结果会失准:
    test_image = image.load_img('/content/drive/MyDrive/ML Tutorial/CNN/dataset/single_prediction/cat_or_dog_1.jpg', target_size=(64, 64))
    test_image = image.img_to_array(test_image)
    test_image = test_image / 255.0  # 新增:和训练时的rescale操作保持一致
    test_image = np.expand_dims(test_image, axis = 0)
    

修改完成后重新运行预测、指标计算代码,得到的测试集准确率会和训练日志显示的80%左右的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:48:21