如何比较两个独热编码列表?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
相关产品推荐
相关产品推荐

