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

如何比较两个独热编码列表?CNN二分类错误样本保存求助

正确识别并保存CNN分类错误图像的完整方案

我明白你现在的困境——独热编码的数组直接对比确实容易踩坑,因为它是多维度的向量,逐元素比较根本没法准确判断分类对错。下面给你一套清晰的步骤和代码,帮你搞定这个问题:

核心思路

独热编码的本质是用向量表示类别,比如两类任务中[1,0]代表类别0,[0,1]代表类别1。要判断预测是否正确,我们需要先把这些向量转换回类别索引,再进行对比。

具体步骤与代码示例

1. 将独热编码转换为类别索引

首先用numpy.argmax()把独热编码的标签和预测结果转换成单个类别值(比如0或1):

import numpy as np

# 假设y_test是形状为(num_samples, 2)的独热编码验证集标签
true_labels = np.argmax(y_test, axis=1)
# y_pred是模型输出的独热编码预测结果,形状同样为(num_samples, 2)
pred_labels = np.argmax(y_pred, axis=1)

2. 定位分类错误的样本索引

通过对比转换后的类别标签,找出所有预测错误的样本索引:

# 获取所有预测错误的样本索引
error_indices = np.where(true_labels != pred_labels)[0]
print(f"共找到 {len(error_indices)} 张分类错误的图像")

3. 保存错误分类的图像到新文件夹

接下来需要遍历这些错误索引,把对应图像保存到目标文件夹。这里假设你有一个存储测试集图像路径的列表test_image_paths(顺序要和y_test完全对应),用PIL库来处理图像:

import os
from PIL import Image

# 创建目标文件夹(如果不存在)
save_dir = "misclassified_images"
os.makedirs(save_dir, exist_ok=True)

# 遍历错误索引,保存图像
for idx in error_indices:
    # 获取图像路径
    img_path = test_image_paths[idx]
    # 读取图像
    img = Image.open(img_path)
    # 构造保存的文件名,可加入真实标签和预测标签方便分析
    save_name = f"true_{true_labels[idx]}_pred_{pred_labels[idx]}_idx_{idx}.png"
    save_path = os.path.join(save_dir, save_name)
    # 保存图像
    img.save(save_path)

注意事项

  • 确保test_image_paths的顺序和y_test、模型预测的顺序完全一致,否则会出现索引错位导致保存错误图像的问题。
  • 如果你的测试集图像是直接加载为数组(比如存储在test_images数组中),可以直接用test_images[idx]来获取图像,再用Image.fromarray()转换后保存。
  • exist_ok=True参数可以避免文件夹已存在时抛出错误,不用额外判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:54:31