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

Keras获取各批次验证损失与精度返回None列表问题求助

问题:Keras无法获取验证集每个批次的损失与精度

我尝试获取Keras模型训练与验证阶段每个批次的损失(loss)和精度(accuracy),目前已成功获取训练集的对应指标,但获取验证集指标时得到的是全为None的列表。

我自定义了如下LossHistory回调类:

class LossHistory(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.history = {'loss':[],'val_loss':[], 'accuracy':[],'val_accuracy':[], 'loss_avg':[],'val_loss_avg':[], 'accuracy_avg':[],'val_accuracy_avg':[]}

    def on_batch_end(self, batch, logs={}):
        self.history['loss'].append(logs.get('loss'))
        self.history['val_loss'].append(logs.get('val_loss'))
        self.history['accuracy'].append(logs.get('accuracy'))
        self.history['val_accuracy'].append(logs.get('val_accuracy'))

    def on_epoch_end(self, epoch, logs={}):
        self.history['loss_avg'].append(logs.get('loss'))
        self.history['val_loss_avg'].append(logs.get('val_loss'))
        self.history['accuracy_avg'].append(logs.get('accuracy'))
        self.history['val_accuracy_avg'].append(logs.get('val_accuracy'))

目前能正常获取每轮结束后的验证损失与精度平均值,但无法拿到每个批次的验证指标,想请教问题原因。


问题原因

核心原因是Keras默认不会在训练批次结束时对验证集进行评估,验证集的指标计算逻辑如下:

  • on_batch_end的logs参数仅包含当前训练批次的训练指标(如loss、accuracy),不会携带val_前缀的验证类指标
  • 只有在每轮训练结束的on_epoch_end阶段,Keras才会完整遍历一次验证集,计算并返回验证集的整体指标(如val_loss、val_accuracy)

如果确实需要获取验证集的逐批次指标,需要手动在回调中实现验证集的批次评估:

  • 在on_batch_end方法内,手动取出验证集数据并按批次拆分
  • 调用model.test_on_batch()方法计算当前验证批次的损失与精度
  • 将计算得到的指标存入自定义的历史记录字典中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:31:06