caffe训练日志可视化代码(acc,train_loss,test_loss,lr 画在同一张图中)

caffe自带可视化训练log的脚本程序

但是这个程序会将:train_loss,test_loss,lr,acc每个指标单独画一张图(根据参数可选则画什么),如下: 

caffe训练日志可视化代码(acc,train_loss,test_loss,lr 画在同一张图中)_第1张图片caffe训练日志可视化代码(acc,train_loss,test_loss,lr 画在同一张图中)_第2张图片caffe训练日志可视化代码(acc,train_loss,test_loss,lr 画在同一张图中)_第3张图片

我觉得这样生成的图片太多了,而且train_loss和test_loss(实际上是训练过程中的val_loss)通常是要放在一起对比来看的,所以放在同一张图中会更清晰的看出是否过拟合或者欠拟合。因此我自己写了个程序提取训练log中的信息,将几个指标综合到一张图中显示,个人认为方便了很多,也只产生一张图而已。代码如下:

import os
import numpy as np
import matplotlib.pyplot as plt
import sys 
import math

#解析出训练和测试的log信息 
def get_loss_acc(log_path):
    train_iters=[]
    train_losses=[]
    test_iters=[]
    test_losses=[]
    test_accs=[]
    learn_rates=[]
    log=open(log_path,"r")
    for line in log:
        #train iter & loss
        if "Iteration" in line and "loss" in line:  
            iter=int((line.strip().split()[5]).split(",")[0])
            #print (iter)
            train_loss=float(line.strip().split()[-1])
            train_iters.append(iter)
            #print (train_loss)
            train_losses.append(train_loss)
        #test iter
        if "Iteration" in line and "Testing" in line:
            test_iter=int(line.strip().split()[5][:-1])
            test_iters.append(test_iter)
        #test loss
        if "#1" in line:
            test_loss=float((line.strip().split(' = ')[-1])[:-6])
            test_losses.append(test_loss)
        #test acc
        if "Test" in line and "acc" in line:
            acc=float(line.strip().split("=")[-1])
            test_accs.append(acc)
        #train lr
        if "lr" in line and "Iteration" in line:
            lr=float(line.strip().split("=")[-1])
            learn_rates.append(lr)     
    #有时学习率个数和train iter的个数不相等,这里使用最后几次的学习率补齐         
    while (len(learn_rates)

 使用时,将训练过程中产生的log到出到txt文件或者train.log文件,我是为了保持和caffe自带的程序一样,所以这里也默认使用train.log作为导出的日志文件,可以在训练命令中加入导出语句来实现log的导出:

caffe train --solver=efficeintNet_relu_se_solver.prototxt >log/train.log 2>&1

然后将本文的代码放在和train.log同文件夹下,再写个批处理文件draw.bat,内容如下:

python draw.py train.log log
pause

最后的目录如下图所示(plot_log.bat是我使用的caffe自带的画图工具的批处理命令):

caffe训练日志可视化代码(acc,train_loss,test_loss,lr 画在同一张图中)_第4张图片

然后双击draw.bat就可以生成一张图,log.png,当然名字是作为参数可修改的:

caffe训练日志可视化代码(acc,train_loss,test_loss,lr 画在同一张图中)_第5张图片

第一张长图里面就是train_loss和test_loss(实际就是val_loss)的对比图,左下角是训练过程中的验证集准确率,右下角是学习率的变化情况,一目了然,方便的很多。代码中画图参数以及log文件名等参数都是可以根据自己需要修改的。

你可能感兴趣的:(人工智能)