深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图,有很多训练形成了一个训练log文件,于是需要读取log文件中的内容并绘制成曲线图。

如下实例,有一个log文件的部分截图,需要将其读取出来并绘制曲线图

废话不多说,直接上代码

python 复制代码
import os 
import re
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
txt_dir = 'D:/TEST/train.log'  # 文件路径
# 读取文件内容
with open(txt_dir, "r") as f:
    data = f.read()
    # print(data)
# 利用正则匹配出相应的数据并提取
epoch_num = re.findall("Epoch (.*) Train", data)
# print(epoch_num)  
Loss_MSE_MAE = re.findall("Train, (.*), Cost", data) # 由于找不到合适的正则条件,于是先取出来一整行数据后续重新正则匹配
# print(Loss_MSE_MAE)
Loss = []
MSE = []
MAE = []
for info in Loss_MSE_MAE:
    # print(info)
    Loss_num = re.findall("Loss: (.*), MSE", info)
    MSE_num = re.findall("MSE: (.*) MAE", info)
    MAE_num = re.findall("MAE: (.*)", info)
    # print(Loss_num, '/n', MSE_num,'/n', MAE_num)
    Loss.append(Loss_num[0])
    MSE.append(MSE_num[0])
    MAE.append(MAE_num[0])
# print(Loss, MSE, MAE)
# 将列表中数字的引号去掉生成参数列表
Loss = str(Loss).replace("'","")
Loss = Loss.replace("[", "").replace("]", "").split(", ")
Loss = [float(d) for d in Loss]

MSE = str(MSE).replace("'","")
MSE = MSE.replace("[", "").replace("]", "").split(", ")
MSE = [float(d) for d in MSE]

MAE = str(MAE).replace("'","")
MAE = MAE.replace("[", "").replace("]", "").split(", ")
MAE = [float(d) for d in MAE]
# print(Loss, MSE, MAE)

# 开始画图,前面我们得到了epoch,这将作为横坐标,得到了Loss, MSE, MAE等参数,将用于画图
# 下面是同时生成三张图的方法,可以参考
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(30, 6), dpi=300)
y_data = [Loss[2:], MSE[2:], MAE[2:]]
colors = ['red', 'green', 'blue']
line_style = ['-', '-', '-']
y_labels = ['Loss', 'MSE', 'MAE']
for i in range(3):
    # axs[i].plot(epoch_num[2:300], y_data[i], c = colors[i], label = y_labels[i], linestyle = line_style[i]) # 横坐标加了epoch太长
    axs[i].plot(y_data[i], c = colors[i], label = y_labels[i], linestyle = line_style[i]) # 所以不要了epoch,横坐标自动调整
    # axs[i].scatter(epoch_num[2:], y_data[i], c = colors[i])  # 每个epoch节点对应的数据
    axs[i].legend(loc='best') # legend图例,用于说明每条曲线的文字显示
    axs[i].set_yticks(range(0, 150, 5))  # set_yticks用于设置y刻度列表
    # axs[i].grid(True, linestyle='--', alpha=0.5)  # grid用于设置网格线外观
    axs[i].set_xlabel("epoch_num", fontdict={'size': 8})  # set_xlabel用于设置x轴标题  
    axs[i].set_ylabel(y_labels[i], fontdict={'size': 8}, rotation=90)  # set_ylabel用于设置y轴标题,rotation表示旋转90度
    axs[i].set_title("train_metric_{}".format(y_labels[i]), fontdict={'size': 8})
fig.autofmt_xdate()  # 改变x轴坐标的显示方法可以斜着表示,不用平着挤一堆
plt.savefig('D:/TEST/train_metric_map.png', bbox_inches='tight', pad_inches=0.0, dpi=300)
# plt.show()

最终得到图像如下

相关推荐
艾派森3 分钟前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
hairenjing11235 分钟前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
小蜗子9 分钟前
Multi‐modal knowledge graph inference via media convergenceand logic rule
人工智能·知识图谱
SpikeKing22 分钟前
LLM - 使用 LLaMA-Factory 微调大模型 环境配置与训练推理 教程 (1)
人工智能·llm·大语言模型·llama·环境配置·llamafactory·训练框架
小码的头发丝、29 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
黄焖鸡能干四碗1 小时前
信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)
大数据·人工智能·软件需求·设计规范·规格说明书
1 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_1 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
攻城狮_Dream1 小时前
“探索未来医疗:生成式人工智能在医疗领域的革命性应用“
人工智能·设计·医疗·毕业
Chef_Chen1 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习