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

已训练Keras模型,如何事后计算Precision与Recall?

解决方案:如何获取已训练Keras模型的Precision和Recall

仅靠已保存的模型文件和已记录的准确率数值,无法直接提取或计算Precision(精确率)和Recall(召回率)——因为准确率是整体分类正确样本的占比,而Precision和Recall依赖于模型预测结果与真实标签对应的混淆矩阵细节(真阳性、假阳性、假阴性等),这些信息并没有被单独记录在准确率或模型文件中。

可行的解决方法如下:

1. 加载模型,用测试/验证集重新计算

这是最直接且可靠的方式,步骤如下:

  • 加载已保存的Keras模型:
    from tensorflow.keras.models import load_model
    model = load_model('your_saved_model.h5')  # 替换为你的模型保存路径
    
  • 获取测试/验证集的真实标签与模型预测结果:
    针对二分类任务,需将模型输出的概率转换为类别标签:
    import numpy as np
    y_true = 你的真实标签数组  # 形状为(n_samples,)的0/1数组
    y_pred_probs = model.predict(X_test)
    y_pred = np.round(y_pred_probs).flatten()  # 概率转标签,阈值可按需调整
    
    针对多分类任务,取概率最大的类别:
    y_pred = np.argmax(model.predict(X_test), axis=1)
    
  • 计算Precision和Recall:
    可使用Scikit-learn的指标函数,或Keras内置的指标类:
    # 方法1:Scikit-learn
    from sklearn.metrics import precision_score, recall_score
    precision = precision_score(y_true, y_pred, average='macro')  # 多分类可选macro/micro,二分类可省略average参数
    recall = recall_score(y_true, y_pred, average='macro')
    
    # 方法2:Keras内置指标
    from tensorflow.keras.metrics import Precision, Recall
    precision_metric = Precision()
    recall_metric = Recall()
    precision_metric.update_state(y_true, y_pred)
    recall_metric.update_state(y_true, y_pred)
    precision = precision_metric.result().numpy()
    recall = recall_metric.result().numpy()
    

2. 若未保留测试/验证集的处理方式

如果没有留存对应的数据集及真实标签,无法计算Precision和Recall——因为这两个指标的核心是模型预测结果与真实标签的对比。此时只能:

  • 重新准备数据集,加载模型后按上述方法计算;
  • 若必须重新训练模型,在后续训练时添加Precision和Recall作为评估指标:
    model.compile(optimizer='adam',
                  loss='binary_crossentropy',  # 替换为对应任务的损失函数
                  metrics=['accuracy', Precision(), Recall()])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:00:54