未将Keras model.fit结果赋值给变量,如何获取其输出用于分析?
解决Keras未保存model.fit结果时的指标获取问题
方法1:提取终端/控制台的训练日志
Keras运行model.fit时会默认打印每一轮的训练指标(损失、准确率等),如果你的运行终端或环境日志未清空,可直接从中提取数据:
- 逐行筛选出每一轮的
loss、val_loss、accuracy(或自定义指标)数值 - 将提取的数值整理为列表,即可用Matplotlib等工具绘制训练曲线
示例代码(假设已从日志手动提取数值):
import matplotlib.pyplot as plt # 从日志提取的每轮训练/验证损失 train_loss = [0.82, 0.51, 0.33, 0.22, 0.16] val_loss = [0.76, 0.57, 0.36, 0.27, 0.21] plt.plot(train_loss, label='Training Loss') plt.plot(val_loss, label='Validation Loss') plt.xlabel('Epoch') plt.ylabel('Loss') plt.legend() plt.show()
方法2:利用已启用的回调日志
如果训练时添加了CSVLogger回调,无论是否保存history变量,日志文件都会完整记录所有训练指标:
- 找到你指定的日志文件(如
training_log.csv) - 用Pandas读取文件后直接分析绘图
示例代码:
import pandas as pd import matplotlib.pyplot as plt # 读取训练日志文件 log_df = pd.read_csv('training_log.csv') # 绘制准确率曲线 plt.plot(log_df['accuracy'], label='Training Accuracy') plt.plot(log_df['val_accuracy'], label='Validation Accuracy') plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.legend() plt.show()
方法3:获取模型最终训练指标(仅单轮结果)
如果没有日志也未设置回调,只能从模型本身获取最终一轮的指标,无法得到完整训练过程的变化:
- 使用
model.evaluate()在测试集上重新计算最终指标,注意该结果与训练时的验证集指标可能存在差异
示例代码:
# 假设test_dataset是你的测试数据集 final_test_loss, final_test_acc = model.evaluate(test_dataset) print(f"最终测试损失: {final_test_loss}, 最终测试准确率: {final_test_acc}")
后续预防方案
- 训练时务必将
model.fit()结果赋值给变量:history = model.fit(...) - 强制添加
CSVLogger回调,确保训练日志持久化:from keras.callbacks import CSVLogger csv_logger = CSVLogger('training_log.csv', append=True) model.fit(train_dataset, validation_data=val_dataset, callbacks=[csv_logger])
内容的提问来源于stack exchange,提问作者0001110100100111
相关产品推荐
相关产品推荐

