如何将Keras Datagen的测试图像与预测数据匹配展示?
测试集图像与CNN预测结果匹配展示解决方案
核心逻辑
Keras经ImageDataGenerator处理生成的测试数据生成器,其输出图像的顺序与预测结果数组classes的顺序完全对应,只需按索引一一匹配即可实现对应展示。
具体实现代码
1. 重置生成器指针
首先重置测试数据生成器,确保从第一组数据开始读取:
test_set.reset()
2. 批量匹配并展示
通过遍历生成器的批次数据,同时对应classes的索引范围,实现图像与预测结果的匹配展示:
import matplotlib.pyplot as plt import numpy as np # 遍历测试集批次 for batch_idx, (batch_images, _) in enumerate(test_set): # 计算当前批次对应的预测结果索引区间 start = batch_idx * test_set.batch_size end = start + len(batch_images) batch_preds = classes[start:end] # 逐个展示图像与对应预测结果 for img, pred in zip(batch_images, batch_preds): # 还原标准化后的图像(若使用了rescale参数) if np.max(img) <= 1: img = (img * 255).astype(np.uint8) # 绘图展示 plt.figure(figsize=(6, 6)) plt.imshow(img) plt.title(f"预测值: {pred.round(4)}") # 保留4位小数提升可读性 plt.axis('off') plt.show() # 处理完所有172张图像后终止循环 if end >= len(classes): break
3. 额外:匹配图像文件名(可选)
如果测试集是通过flow_from_directory创建的,可通过test_set.filenames获取原文件名,方便定位图像:
for batch_idx, (batch_images, _) in enumerate(test_set): start = batch_idx * test_set.batch_size end = start + len(batch_images) batch_preds = classes[start:end] batch_filenames = test_set.filenames[start:end] for img, pred, fname in zip(batch_images, batch_preds, batch_filenames): if np.max(img) <= 1: img = (img * 255).astype(np.uint8) plt.figure(figsize=(6, 6)) plt.imshow(img) plt.title(f"文件名: {fname}\n预测值: {pred.round(4)}") plt.axis('off') plt.show() if end >= len(classes): break
关键注意事项
- 确保
test_set的batch_size设置合理,避免最后一批数据索引越界(上述代码已处理此情况)。 - 若训练时对图像做了预处理(如归一化、旋转等),展示时需还原为可正常显示的格式(代码中已包含标准化还原逻辑)。
内容的提问来源于stack exchange,提问作者WizardWithACrackPipe
相关产品推荐
相关产品推荐

