caffe系列 | caffe使用日志文件绘制Loss Accuracy图像

在使用caffe训练数据集时通常需要对训练过程中损失值、准确率等进行可视化,使用python接口可视化的步骤可以参考博文caffe的python接口学习(7):绘制loss和accuracy曲线,本文将会介绍一种使用命令行训练数据,并利用训练过程的输出进行可视化的方法。

一、caffe 模型训练

在制作好数据集、贴好标签、并将数据集转为lmdb格式之后,就可以对网络进行训练,训练命令如下:

/path_to_caffe/caffe/build/tools/caffe train \
    -solver ./solver.prototxt \ #求解文件
    -snapshot ./train_iter_18200.solverstate \#使用从snapshot开始训练
    >> log.txt 2>&1 #将输出写入到log.txt文件中

二、由log文件绘制Loss&Accuracy图像

在得到命令行输出重定向文件log.txt之后,使用python提取其中损失值与准确率的信息,并绘制在图像中。个人感觉此处代码较为繁琐,如果简便方法欢迎提出。

#coding:utf-8
import sys
import re
import matplotlib.pyplot as plt
import numpy as np

in_log_path='./log.txt'  #输入日志文件的位置
out_fig_path='./log.jpg' #输出图片的位置
f=open(in_log_path,'r')
accuracy=[]
train_loss=[]
test_loss=[]

max_iter=0
test_iter=0
test_interval=0
display=0
target_str=['accuracy = ','Test net output #1: loss = ','Train net output #0: loss = ',
            'max_iter: ','test_iter: ','test_interval: ','display: ']
while True:
    line=f.readline()
    # print len(line),line
    if len(line)<1:
        break
    for i in range(len(target_str)):
        str=target_str[i]
        idx = line.find(str)
        if idx != -1:
            num=float(line[idx + len(str):idx + len(str) + 5])
            if(i==0):
                accuracy.append(num)
            elif(i==1):
                test_loss.append(num)
            elif(i==2):
                train_loss.append(num)
            elif(i==3):
                max_iter=float(line[idx + len(str):])
            elif(i==4):
                test_iter=float(line[idx + len(str):])
            elif(i==5):
                test_interval=float(line[idx + len(str):])
            elif(i==6):
                display=float(line[idx + len(str):])
            else:
                pass
f.close()
# print test_iter
# print max_iter
# print test_interval
# print len(accuracy),len(test_loss),len(train_loss)

_,ax1=plt.subplots()
ax2=ax1.twinx()
#绘制train_loss曲线图像,颜色为绿色'g'
ax1.plot(display*np.arange(len(train_loss)),train_loss,color='g',label='train loss',linestyle='-')

#绘制test_loss曲线图像,颜色为黄色'y'
ax1.plot(test_interval*np.arange(len(test_loss)),test_loss,color='y',label='test loss',linestyle='-')

#绘制accuracy曲线图像,颜色为红色'r'
ax2.plot(test_interval*np.arange(len(accuracy)),accuracy,color='r',label='accuracy',linestyle='-')

ax1.legend(loc=(0.7,0.8))  #使用二元组(0.7,0.8)定义标签位置
ax2.legend(loc=(0.7,0.72))
ax1.set_xlabel('iteration')#设置X轴标签
ax1.set_ylabel('loss')     #设置Y1轴标签
ax2.set_ylabel('accuracy') #设置Y2轴标签
plt.savefig(out_fig_path,dpi=100) #将图像保存到out_fig_path路径中,分辨率为100
plt.show()                 #显示图片

结果截图:


参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值