如何在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
相关产品推荐
相关产品推荐

