在使用脚本绘制变化曲线之前,需要先使用extract_log.py脚本,格式化log,用生成的新的log文件供可视化工具绘图,格式化log的extract_log.py脚本如下(和生成的log文件同一目录)
coding=utf-8
该文件用来提取训练log,去除不可解析的log后使log文件格式化,生成新的log文件供可视化工具绘图
import inspect
import os
import random
import sys
def extract_log(log_file,new_log_file,key_word):
with open(log_file, ‘r’) as f:
with open(new_log_file, ‘w’) as train_log:
#f = open(log_file)
#train_log = open(new_log_file, ‘w’)
for line in f:
# 去除多gpu的同步log
if ‘Syncing’ in line:
continue
# 去除除零错误的log
if ‘nan’ in line:
continue
if key_word in line:
train_log.write(line)
f.close()
train_log.close()
extract_log(‘train_yolov3.log’,‘train_log_loss.txt’,‘images’)
extract_log(‘train_yolov3.log’,‘train_log_iou.txt’,‘IOU’)
————————————————
运行之后,会解析log文件的loss行和iou行得到两个txt文件
使用train_loss_visualization.py脚本可以绘制loss变化曲线
train_loss_visualization.py脚本如下(也是同一目录新建py文件):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
lines =5124 #改为自己生成的train_log_loss.txt中的行数
result = pd.read_csv(‘train_log_loss.txt’, skiprows=[x for x in range(lines) if ((x%10!=9) |(x<1000))] ,error_bad_lines=False, names=[‘loss’, ‘avg’, ‘rate’, ‘seconds’, ‘images’])
result.head()
result[‘loss’]=result[‘loss’].str.split(’ ‘).str.get(1)
result[‘avg’]=result[‘avg’].str.split(’ ‘).str.get(1)