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

如何将Keras模型训练进度保存至文件?

解决Keras训练日志保存到文件的几种方法

我之前在集群上跑Keras模型时也碰到过这个问题——本地能实时看到训练进度,但集群上没法直观跟踪,把日志存到文件里就方便多了,给你分享几个靠谱的解决方法:

1. 用Keras内置的CSVLogger回调(最推荐)

这是Keras官方提供的工具,专门用来把训练过程的指标(loss、val_loss等)保存成结构化的CSV文件,后续还能方便地分析数据。

用法很简单,先导入回调,然后在model.fit()里指定回调即可:

from keras.callbacks import CSVLogger

# 初始化CSVLogger,指定日志文件名,append=True表示如果文件存在就追加(适合继续训练)
csv_logger = CSVLogger('training_log.csv', append=True, separator=',')

# 训练模型时加入回调
model.fit(x_train, y_train,
          epochs=10,
          validation_data=(x_val, y_val),
          callbacks=[csv_logger])

生成的CSV文件会包含每一轮的epoch数、loss、val_loss等信息,格式清晰,用Excel或者Python的pandas就能轻松查看。

2. 命令行重定向输出(和本地输出完全一致)

如果你想要和本地笔记本上完全一样的输出内容(包括"Train on X samples..."、进度条、每轮耗时这些),直接用命令行的重定向功能就行,不用改代码:

python your_training_script.py > training_output.txt 2>&1

这里的>是把标准输出(stdout)写到文件,2>&1是把错误输出(stderr)也重定向到同一个文件,这样所有的训练日志都会被保存下来,和你本地看到的一模一样。

3. 自定义回调函数(适合个性化需求)

如果需要自定义日志的格式或者额外记录一些信息,可以自己写一个Callback类,灵活控制日志内容:

from keras.callbacks import Callback
import datetime

class CustomLogger(Callback):
    def __init__(self, log_file):
        self.log_file = log_file
        # 打开文件,设置追加模式
        self.f = open(log_file, 'a')
    
    def on_train_begin(self, logs=None):
        # 记录训练开始时间
        start_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self.f.write(f"Training started at {start_time}\n")
    
    def on_epoch_end(self, epoch, logs=None):
        # 记录每一轮的指标和耗时(如果有的话)
        log_str = f"Epoch {epoch+1}/{self.params['epochs']} - loss: {logs['loss']:.4f} - val_loss: {logs['val_loss']:.4f}\n"
        self.f.write(log_str)
        # 强制刷新缓冲区,确保日志实时写入文件
        self.f.flush()
    
    def on_train_end(self, logs=None):
        end_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self.f.write(f"Training ended at {end_time}\n")
        self.f.close()

# 使用自定义回调
custom_logger = CustomLogger('custom_training_log.txt')
model.fit(x_train, y_train,
          epochs=10,
          validation_data=(x_val, y_val),
          callbacks=[custom_logger])

这个方法可以根据你的需求添加任意内容,比如学习率变化、自定义指标等,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:34:45