MobileNet手语字母分类模型混淆矩阵异常原因及过拟合修复方法
这不是过拟合,是数据生成器的参数配置错误导致的标签与预测结果顺序不匹配
问题根因
默认情况下flow_from_directory方法的shuffle参数为True,测试集生成器会随机打乱样本顺序输出。你获取的test_batches.classes是按文件夹顺序排列的原始标签,和预测时生成器输出的样本顺序完全不对应,所以混淆矩阵计算的是完全乱序的真实标签和预测结果,自然不符合预期。
修复步骤
- 修改测试集生成器的定义,新增
shuffle=False参数,确保样本输出顺序和标签顺序一致:test_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.mobilenet.preprocess_input).flow_from_directory( directory=test_path, target_size=(64,64), batch_size=10, shuffle=False) - 重新执行预测、混淆矩阵计算和绘图代码,即可得到符合98%准确率的正常混淆矩阵。
效果验证
修复后可自行计算准确率:np.sum(test_labels == predictions.argmax(axis=1))/len(test_labels),得到的结果应该和模型拟合时输出的val_accuracy一致,约为98%。
内容的提问来源于stack exchange,提问作者Reem
相关产品推荐
相关产品推荐

