废话不多说,
caffe我们要绘制曲线必须先把运行log给保存下来,我们将运行所产生的log重定向到文件:
./examples/cifar/train_quick.sh >& cifar.log &
“>&”表示将所有的标准输出(stdout)和标准错误输出(stderr)都被重定向,“cifar.log”是重定向后log保存的文件,最后的 “&”表示将命令放入后台运行。
观察运行情况:
tail -f cifar.log
退出观察Ctrl + C
$cat cifar.log | grep "Train net output" | awk '{print $11}'
有关grep以及awk的使用参考:
http://www.runoob.com/linux/linux-comm-grep.html
http://www.runoob.com/linux/linux-comm-awk.html
使用类似的方法将testloss,以及accuracy提取出来,保存到testloss.txt,
trainloss.txt,testacc.txt
首先我们查看一下网络训练参数:
#训练每迭代500次,进行一次预测
test_interval: 500
#每经过100次迭代,在屏幕打印一次运行log
display: 100
#最大迭代次数
max_iter: 10000
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Created on Tue Oct 17 2017
@author: jack wang
This program for visualize the loss and accuracy
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
train_interval = 100 #display = 100
test_interval = 500
max_iter = 10000
def loadData(file):
dataMat = []
fr = open(file)
for line in fr.readlines():
lineA = line.strip().split()
dataMat.append(float(lineA[0]))
return dataMat
trainloss = loadData('trainloss.txt')
testloss = loadData('testloss.txt')
trainLoss = pd.Series(trainloss, index = range(0,max_iter,100))
testLoss = pd.Series(testloss, index = range(0,max_iter+500,500))
fig = plt.figure()
plt.plot(trainLoss)
plt.plot(testLoss)
plt.xlabel(u"iter")
plt.ylabel(u"loss")
plt.title(u"trainloss vs testloss")
plt.legend((u'trainloss', u'testloss'),loc='best')
plt.show()
testacc = loadData('testacc.txt')
testAcc = pd.Series(testacc, index = range(0,max_iter+500,500))
plt.plot(testAcc)
plt.show()
okay~!