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

如何将TensorFlow模型运行结果与相关指标记录保存到CSV文件

可视化内容存储格式说明

可视化图表本身是渲染后的二进制图像文件,不支持直接保存为CSV格式。生成图表用到的所有原始结构化数据(逐epoch的accuracy/loss序列、混淆矩阵数值、F1/precision/recall指标值)完全可以导出为CSV,后续直接读取CSV即可复现对应图表,不需要重复运行模型。不建议将渲染后的图像内容转存为CSV,没有实际分析价值,读取效率也极低。


每次运行自动保存所有数据的实现方案

核心思路是每次模型启动时先生成带时间戳的独立存储目录,避免不同次运行的结果互相覆盖,再通过TensorFlow内置回调+简单的后处理逻辑,把所有结构化数据存为CSV、可视化结果存为图片。

依赖准备

用到的库都是常规机器学习栈,不需要额外安装特殊组件:

import os
import time
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_score

步骤1:生成本次运行的独立存储目录

每次启动先获取当前时间戳作为目录名,所有本次运行的产物都存在该目录下:

run_time = time.strftime("%Y%m%d-%H%M%S")
save_root = "./cnn_run_records"
run_save_dir = os.path.join(save_root, run_time)
os.makedirs(run_save_dir, exist_ok=True)

步骤2:配置训练过程指标自动存CSV

直接用TensorFlow内置的CSVLogger回调,训练时每个epoch的训练集/验证集accuracy、loss会自动写入CSV,不需要手动逐轮写文件:

# 定义训练日志CSV存储路径
train_log_path = os.path.join(run_save_dir, "train_epoch_metrics.csv")
csv_logger = tf.keras.callbacks.CSVLogger(
    train_log_path,
    separator=",",
    append=False
)

# 模型训练时传入回调即可
# model.fit(
#     train_dataset,
#     validation_data=val_dataset,
#     epochs=30,
#     callbacks=[csv_logger] # 可同时添加早停、学习率衰减等其他回调
# )

步骤3:训练结束后保存全局评估指标、混淆矩阵数据

模型训练完成后,在测试集上做推理,计算全局指标和混淆矩阵,分别存为CSV:

# 提取测试集真实标签,做模型推理
y_true = np.concatenate([label for _, label in test_dataset], axis=0)
y_pred_proba = model.predict(test_dataset)
y_pred = np.argmax(y_pred_proba, axis=1)

# 计算全局评估指标,多分类任务可根据需求调整average参数
global_metrics = {
    "test_accuracy": [np.mean(y_true == y_pred)],
    "test_f1": [f1_score(y_true, y_pred, average="macro")],
    "test_precision": [precision_score(y_true, y_pred, average="macro")],
    "test_recall": [recall_score(y_true, y_pred, average="macro")]
}
# 全局指标存CSV
pd.DataFrame(global_metrics).to_csv(
    os.path.join(run_save_dir, "test_global_metrics.csv"),
    index=False
)

# 计算混淆矩阵,原始数值存CSV
cm = confusion_matrix(y_true, y_pred)
pd.DataFrame(cm).to_csv(
    os.path.join(run_save_dir, "confusion_matrix_raw.csv"),
    index=False,
    header=False
)

步骤4:保存可视化图表

用matplotlib/seaborn生成的折线图、热力图直接存为png格式即可,对应的原始数据已经存在前面的CSV里,后续需要调整图表样式直接读CSV重画就行:

# 保存混淆矩阵热力图
plt.figure(figsize=(10, 8))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.xlabel("Predicted label")
plt.ylabel("True label")
plt.savefig(os.path.join(run_save_dir, "confusion_matrix.png"), dpi=300, bbox_inches="tight")
plt.close()

# 读取训练日志,保存accuracy、loss变化曲线
train_log = pd.read_csv(train_log_path)
plt.figure(figsize=(10, 6))
plt.plot(train_log["epoch"], train_log["accuracy"], label="train_accuracy")
plt.plot(train_log["epoch"], train_log["val_accuracy"], label="val_accuracy")
plt.plot(train_log["epoch"], train_log["loss"], label="train_loss")
plt.plot(train_log["epoch"], train_log["val_loss"], label="val_loss")
plt.xlabel("Epoch")
plt.legend()
plt.savefig(os.path.join(run_save_dir, "train_curve.png"), dpi=300, bbox_inches="tight")
plt.close()

补充说明

  • 如果需要在训练过程中逐epoch记录F1、precision、recall等自定义指标,可以继承tf.keras.callbacks.Callback实现自定义回调,在on_epoch_end方法中计算对应指标后追加写入CSV即可,逻辑和内置CSVLogger一致。
  • 所有结构化数值统一存CSV、可视化渲染结果存图片的分类存储方式,后续做不同实验的效果对比时,可以直接批量读取各次运行目录下的CSV做统计,不需要解析图片内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.05 16:15:45