前一段时间使用caffe在cifar10数据集上训练全卷积网络(前面的论文阅读的博客中有提到),为了方便调参需要很直观地看到训练过程中loss下降情况以及test accuracy情况,这就需要将训练过程中loss情况通过曲线形式进行绘制。caffe没有像tenserflow一样提供可以直接掉用的接口只是提供了各种工具可供用户绘制曲线使用,下面简单介绍下如何使用caffe自带的工具绘制训练过程中loss和accuracy曲线。
本例在LINUX下执行!
输出重定向
首先,需要将训练过程中的日志重定向到文件中,以便于分析(训练配置文件):
# train.sh
...
# 设置重定向文件的位置
LOG=./mytest/cifar10/log-data
$TOOLS/caffe train \
--solver=examples/cifar10/cifar10_all_conv_solver.prototxt --gpu=2 2>&1 | tee $LOG
# 增加 2>&1 | tee $LOG 是为了将terminal输出重定向到文件
...
分析日志生成数据
caffe在tools/extra中自带日志分析工具,首先将生成的日志文件log-data移到caffe主目录下tools/extra中,使用下面的命令生成两个文件,log-data.train, log-data.test
...
# terminal下执行
# 可以拷贝parse_log.sh到其他文件夹下执行,但同时需要拷贝extract_seconds.py
./parse_log.sh log-data
log-data.train, log-data.test,分别是训练过程中训练loss和测试loss的数据,格式如下(开始iters可以非0):
log-data.train
#Iters Seconds TrainingLoss LearningRate
0 1.609923 2.31247 0.005
100 8.655593 2.21769 0.005
...
log-data.test
#Iters Seconds TestAccuracy TestLoss
0 0.007335 0.1367 2.30327
100 7.133757 0.1534 2.23775
...
使用gnuplot绘制曲线
gnuplot 安装
确保已安装gnuplot,linux下使用以下命令:
sudo apt-get install gnuplot
配置文件
tools/extra中自带样例plot_log.gnuplot.example,我们在其基础上进行修改(当然也可以自己写,关于gnuplot的教程自行搜索,在此不多做介绍)。注释掉原文件内容(41-44)。
单图单曲线
reset
set terminal png
# 输出文件名
set output "train.png"
set style data lines
set key right
# 设置图名称
set title "Training Loss vs. training iterations"
# 设置x, y轴名称
set xlabel "Training iterations"
set ylabel "Loss"
# 曲线绘制 title表示曲线名
# using 1:3 表示使用log-data.train的第一和第三列分别为x轴y轴
plot "log-data.train" using 1:3 title "train loss"
单图多曲线
reset
set terminal png
set output "phase1.png"
set style data lines
set key right
# 设置多图模式
set multiplot
set title "Loss vs. training iterations"
set xlabel "Training iterations"
set ylabel "Loss"
plot "1.log.train" using 1:3 title "train loss", "1.log.test" using 1:4 title "test loss"
执行效果
命令
gnuplot plot_log.gnuplot.example