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

如何在Keras中同时在训练集和验证集上进行评估?

如何在Keras中同时评估训练集与验证集的ROC-AUC

你现有的RocAucEvaluation回调类已经能很好地完成验证集的ROC-AUC评估,要同时加入训练集的评估逻辑,只需要在回调中新增对训练数据的处理即可。下面是修改后的完整实现:

修改后的ROC-AUC评估回调类

from sklearn.metrics import roc_auc_score
from keras.callbacks import Callback

class RocAucEvaluation(Callback):
    def __init__(self, training_data=(), validation_data=(), interval=1):
        super().__init__()
        self.interval = interval
        # 存储训练集数据
        self.X_train, self.y_train = training_data
        # 存储验证集数据
        self.X_val, self.y_val = validation_data

    def on_epoch_end(self, epoch, logs={}):
        if epoch % self.interval == 0:
            # 计算训练集的ROC-AUC
            y_pred_train = self.model.predict(self.X_train, verbose=0)
            score_train = roc_auc_score(self.y_train, y_pred_train)
            # 计算验证集的ROC-AUC
            y_pred_val = self.model.predict(self.X_val, verbose=0)
            score_val = roc_auc_score(self.y_val, y_pred_val)
            
            print(f"\nEpoch: {epoch+1}")
            print(f"Training ROC-AUC Score: {score_train:.6f}")
            print(f"Validation ROC-AUC Score: {score_val:.6f}\n")

回调的使用方法

初始化回调时同时传入训练集和验证集数据,训练模型时将其加入回调列表即可:

# 假设你已准备好训练集train_x、train_y和验证集validate_x、validate_y
roc_auc_eval = RocAucEvaluation(
    training_data=(train_x, train_y),
    validation_data=(validate_x, validate_y),
    interval=1  # 每1个epoch执行一次评估
)

# 训练模型
model.fit(
    train_x, train_y,
    epochs=50,
    validation_data=(validate_x, validate_y),
    callbacks=[roc_auc_eval]
)

额外提示

  • 确保提前导入sklearn.metrics.roc_auc_score和keras.callbacks.Callback,避免出现导入错误。
  • 如果数据集规模较大,频繁的predict操作会消耗较多计算资源,可适当调大interval参数(比如设为5),降低评估频率。
  • 若你处理的是多分类任务,需要给roc_auc_score指定multi_class参数(可选'ovr'或'ovo'),具体根据任务需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:30