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

model.fit()是否会在每轮epoch后重置指标?如何手动重置训练指标?

解决方案

你不需要自行循环调用model.fit(),通过自定义Keras回调的方式就可以实现每个epoch后重置指标,且完全不影响ModelCheckpoint、CSVLogger等内置回调的正常工作。

步骤1:定义自定义重置指标回调

import tensorflow as tf

class ResetMetricsPerEpoch(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs=None):
        # 遍历模型绑定的所有指标,执行状态重置
        for metric in self.model.metrics:
            metric.reset_states()

步骤2:把回调加入你的回调列表即可

在你现有定义callbacks的代码中,新增实例化后的自定义回调:

callbacks = [
    tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', patience=REDUCE_LR_PATIENCE, verbose=1, factor=REDUCE_LR_FACTOR),
    tf.keras.callbacks.EarlyStopping(monitor='val_loss', verbose=1, patience=EARLY_STOPPING_PATIENCE),
    tf.keras.callbacks.ModelCheckpoint(filepath=modelName + '_epoch-{epoch:02d}.h5', monitor='val_loss', save_best_only=False, verbose=1),
    tf.keras.callbacks.CSVLogger(modelName + '_training.csv'),
    # 新增重置指标的回调
    ResetMetricsPerEpoch()
]

补充说明

  1. 你用到的AUC、分类准确率、tfa的F1Score都继承自Keras基础指标类,通用支持reset_states()方法,无需额外适配。
  2. 如果你确实需要采用自行循环调用model.fit()的方案,也可以通过指定model.fit()的initial_epoch参数保证回调拿到的epoch编号正确:每次循环调用时把epochs设为当前要训练的轮次+1,initial_epoch设为当前已经训练完成的轮次,即可解决编号错乱的问题,不过该方案改动量远大于回调方案,没有特殊需求不推荐使用。

内容的提问来源于stack exchange,提问作者ztsv-av

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:54:05