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

使用TF ODA训练模型,从.tfevents提取损失历史的最简方法?

解决方案

核心思路

直接用TensorFlow内置的tf.compat.v1.train.summary_iterator读取.tfevents文件,遍历所有事件提取指定损失指标的数值与对应步数,整理成列表即可。该方法无需额外安装第三方库,完全依赖TensorFlow本身,是最简洁的实现方式。

代码实现

import tensorflow as tf

def extract_loss_from_tfevents(tfevents_path, loss_tag='Loss/total_loss'):
    loss_data = []
    # 遍历tfevents文件内的所有事件
    for event in tf.compat.v1.train.summary_iterator(tfevents_path):
        for value in event.summary.value:
            # 匹配目标损失标签(需与TensorBoard显示的标签完全一致)
            if value.tag == loss_tag:
                loss_data.append({
                    'step': event.step,
                    'loss': value.simple_value
                })
    # 拆分出步数列表和损失值列表
    step_list = [item['step'] for item in loss_data]
    loss_list = [item['loss'] for item in loss_data]
    return step_list, loss_list

# 示例调用
tfevents_file = './your/tfevents/file/path/events.out.tfevents.xxxxxx'
steps, losses = extract_loss_from_tfevents(tfevents_file)

# 输出损失值列表(可直接用于MLFlow绘图)
print(losses)

关键说明

  • 标签匹配:loss_tag需和TensorBoard中显示的损失标签完全对应,比如训练总损失通常为Loss/total_loss,验证损失可能是Loss/validation_loss,可打开TensorBoard查看具体标签后调整。
  • 数据格式:返回的steps是训练步数序列,losses是对应步数的损失值序列,可直接传入MLFlow进行曲线绘制。
  • 兼容性:该方法在TensorFlow 2.x(含TF ODA依赖版本)与Python 3.9环境下完全兼容,无需额外配置。

MLFlow集成示例

若要直接将数据传入MLFlow生成曲线,只需循环记录指标:

import mlflow

mlflow.start_run()
for step, loss in zip(steps, losses):
    mlflow.log_metric("training_loss", loss, step=step)
mlflow.end_run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:01:08