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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:20:37