如果你的测试集中有一些类别没有图片,可以在计算混淆矩阵和分类报告之前,先确保每个类别在标签和预测结果中都有对应的样本。你可以使用以下代码来实现:\n\npython\nif config.EVAL_MODE:\n # 获取所有存在的类别\n existing_classes = set(labels) | set(preds)\n existing_classes = sorted(list(existing_classes))\n \n # 获取存在的类别对应的名称\n classes = [dataset_val.name_class[i] for i in existing_classes]\n \n cm = confusion_matrix(labels, preds, labels=existing_classes)\n report = classification_report(labels, preds, labels=existing_classes, target_names=classes, output_dict=True, zero_division=1)\n result_df = pd.DataFrame(report).transpose()\n \n timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")\n \n # 保存混淆矩阵\n file_cm = "cm_" + timestamp + ".csv"\n np.savetxt('./outcsv/' + file_cm, cm, delimiter=",")\n \n # 保存分类报告\n file_report = "report_" + timestamp + ".csv"\n result_df.to_csv('./outcsv/' + file_report)\n \n # 保存预测结果的文本文件\n path_output = "./outtxt/" + timestamp + ".txt"\n os.makedirs(os.path.dirname(path_output), exist_ok=True) \n with open(path_output, 'w') as f:\n for i in range(len(preds)):\n f.write('{} {} {} '.format(paths[i], classes[labels[i]], classes[preds[i]]))\n \n print("Confusion matrix saved as:", file_cm)\n print("Classification report saved as:", file_report)\n\n\n这样修改后,只会计算存在的类别的混淆矩阵和分类报告,并且保存的结果也只包含存在的类别。


原文地址: https://www.cveoy.top/t/topic/qmU2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录