阅读量:0
前言
因为正好有同学问到在训练过程中产生的日志json文件如何生成可视化的loss曲线图,所以就正好放到这里,如果有需要可以自行取用。我们做深度学习模型跑任务的时候,通常会产生log日志,我们为了方便查看训练过程波动或者生成图像用于论文的编纂,都需要把json格式的文件可视化成一张曲线图,因此提供下面的代码。
一、文件格式
此处我随机选取了一个项目中的json格式的log文件为例:
{ "mode": "train", "epoch": 1, "iter": 500, "lr": 2e-05, "memory": 888, "data_time": 0.00312, "decode.loss_seg": 0.0622, "decode.acc_seg": 86.07552, "loss": 0.0622, "time": 0.17702 } { "mode": "train", "epoch": 2, "iter": 550, "lr": 2e-05, "memory": 888, "data_time": 0.25216, "decode.loss_seg": 0.05105, "decode.acc_seg": 82.76717, "loss": 0.05105, "time": 0.43304 }
二、可视化代码
import json import matplotlib.pyplot as plt def parse_json_file(json_file): with open(json_file, 'r') as f: lines = f.readlines() return lines def extract_loss(json_lines): loss = [] for line in json_lines: data = json.loads(line) if 'loss' in data: loss.append(data['loss']) return loss def plot_loss_curve(loss): # plt.figure(figsize=(10, 6)) plt.plot(loss, linestyle='-', color='b', label='Training Loss') plt.title('Training Loss Curve') plt.xlabel('Iterations') plt.ylabel('Loss') plt.grid(True) plt.legend() plt.tight_layout() plt.show() # 示例用法 if __name__ == '__main__': json_file = r'E:\code\D-RISE\utils\20240625_123859.json' json_lines = parse_json_file(json_file) loss = extract_loss(json_lines) plot_loss_curve(loss)
三、步骤解析
- 首先读取json文件
- 选取每行数据中的“loss”字段作为纵坐标(根据需要可以替换为其他字段)
- 绘制图像,注释的位置是图像的长宽比,自认为不设置图像更加好看所以注释掉了
- 如果需要在每个点的位置加一个小圆点可以在plot中设置 marker='o',也可以更换
- color字段代表曲线颜色,linestyle字段代表曲线风格可以更换为虚线等
- 下面3个参数分别为图像名称、横坐标、纵坐标
- 主函数下json_file是自己json文件的路径
四、结果展示