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

Keras训练时如何将Epoch训练日志保存至TXT文件?

嘿,刚好有几个超简便的方法能帮你把Keras的训练日志存到TXT文件里,再也不用手动复制粘贴啦,给你挨个说:

方法1:用Keras内置的CSVLogger(最推荐)

这是最省心的方案,Keras官方已经帮你封装好了,不仅能自动保存每一轮的训练指标,还会生成结构化的表头,后续用Pandas或者Excel分析都超方便。它默认存成CSV格式,但本质就是文本文件,直接改成.txt后缀也完全能用。

from keras.callbacks import CSVLogger
from keras.models import Sequential
from keras.layers import Dense

# 先定义好你的模型(这里是示例结构,替换成你自己的即可)
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['mean_absolute_error', 'categorical_accuracy'])

# 初始化CSVLogger,指定保存的文件名,分隔符可以选逗号或空格
csv_logger = CSVLogger('training_logs.txt', separator=' ', append=False)

# 训练时把回调函数传进去就行
model.fit(x_train, y_train,
          epochs=75,
          batch_size=32,
          validation_data=(x_val, y_val),
          callbacks=[csv_logger])

生成的日志文件会是这样的结构化格式,一目了然:

epoch,loss,mean_absolute_error,categorical_accuracy,val_loss,val_mean_absolute_error,val_categorical_accuracy
16,0.0079,0.0585,0.9836,0.0797,0.2410,0.7901
17,0.0080,...

方法2:重定向控制台输出到文件

如果你就想要和控制台完全一模一样的日志格式,那可以试试把Python的标准输出直接重定向到文件,这样所有打印到控制台的内容都会原封不动存到TXT里。

import sys
from keras.models import Sequential
from keras.layers import Dense

# 先保存原始的控制台输出通道
original_stdout = sys.stdout

# 打开目标文件,准备写入日志
with open('training_logs.txt', 'w') as f:
    # 把标准输出重定向到文件
    sys.stdout = f
    # 这里放你的模型定义和训练代码
    model = Sequential()
    model.add(Dense(64, activation='relu', input_dim=100))
    model.add(Dense(10, activation='softmax'))
    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['mean_absolute_error', 'categorical_accuracy'])
    
    model.fit(x_train, y_train,
              epochs=75,
              batch_size=32,
              validation_data=(x_val, y_val))
    # 训练完恢复原始的控制台输出
    sys.stdout = original_stdout

这个方法的好处是完全保留你贴出来的那种日志样式,训练时控制台不会显示内容,但所有内容都会写到文件里。

方法3:自定义回调函数(灵活控制内容)

如果你只想保存特定的指标,或者想自定义日志的格式细节,那可以自己写个回调函数,完全按照你的需求来生成日志。

from keras.callbacks import Callback
from keras.models import Sequential
from keras.layers import Dense

class CustomLogger(Callback):
    def __init__(self, filename):
        self.filename = filename
        # 训练开始时先清空或创建文件
        with open(self.filename, 'w') as f:
            pass
    
    def on_epoch_end(self, epoch, logs=None):
        logs = logs or {}
        # 完全自定义日志格式,和控制台输出对齐
        log_str = f"Epoch {epoch+1}/75 183/183 [==============================] - 587s 3s/step - loss: {logs['loss']:.4f} - mean_absolute_error: {logs['mean_absolute_error']:.4f} - categorical_accuracy: {logs['categorical_accuracy']:.4f} - val_loss: {logs['val_loss']:.4f} - val_mean_absolute_error: {logs['val_mean_absolute_error']:.4f} - val_categorical_accuracy: {logs['val_categorical_accuracy']:.4f}\n"
        with open(self.filename, 'a') as f:
            f.write(log_str)

# 初始化自定义回调
custom_logger = CustomLogger('training_logs.txt')

# 训练时传入回调
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['mean_absolute_error', 'categorical_accuracy'])

model.fit(x_train, y_train,
          epochs=75,
          batch_size=32,
          validation_data=(x_val, y_val),
          callbacks=[custom_logger])

这个方法可以随意调整日志里的内容,比如只保留loss和准确率,或者修改数值的小数位数,自由度拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:12:04