当前位置: 首页 > news >正文

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

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

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

 废话不多说,直接上代码

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()

最终得到图像如下

http://www.lryc.cn/news/223749.html

相关文章:

  • VB.NET—DataGridView控件教程详解
  • MCU测试科普|如何进行MCU芯片测试,具体流程是什么?
  • 单向循环代码实现cpp
  • 【原创】java+jsp+servlet简单图书管理系统设计与实现
  • JVM之jinfo虚拟机配置信息工具
  • 软件测试|PO设计模式在 UI 自动化中的实践
  • 如何上传自己的Jar到Maven中央仓库
  • 智能井盖传感器功能,万宾科技产品介绍
  • 洛谷P4185 离线+并查集
  • 遇到java.security.AccessControlException:access denied怎么办?
  • c++对接CAT1400
  • Linux基础【Linux知识贩卖机】
  • CSS 边框、轮廓线
  • Transformer架构 完整的处理流程
  • git and svn 行尾风格配置强制为lf
  • 达梦数据库答案
  • 基于SSM的楼房销售系统设计与实现
  • Blender做一个小凳子学习笔记
  • Maven简介
  • 后端工程化 | SpringBoot 知识点
  • Oracle(15)Managing Users
  • 自动化测试(Java+eclipse)教程
  • ThreadFactory 实例创建方式
  • 【自动化测试】Pytest框架 —— 跳过测试和失败重试
  • python 时间加法 输出t分钟后的时间
  • 51单片机-串口通信
  • JAVA微信端医院3D智能导诊系统源码
  • 考研408-计算机网络 第二章-物理层学习笔记及习题
  • 鸿蒙开发工具的汉化
  • 14:00面试,14:06就出来了,问的问题有点变态。。。。。。