一 概述
在使用caffe的过程中,我们知道其在训练过程中会打印出相应的日志信息,可以帮助我们观察和判断模型是否收敛等。将日志信息重定向到文件中,然后利用python解析文件并用matlplotlib库即可从训日志信息中画出loss曲线和accuracy曲线。
二 生成日志文件
在caffe框架中,有些自带的训练脚本会提供输出日志的功能,在此提供通用的生成日志文件的方法,利用2>&1
和tee
命令将训练过程中产生的输出信息重定向到文件中。
具体用法: 训练命令 + 2>&1 | tee + 文件名,下面我们以pvanet的训练脚本为例。
#!/usr/bin/env sh
set -e
./tran_net.py \ #\表示连接不同行的命令
--gpu 0 \
--solver models/pvanet/example_train/solver.prototxt \
--weights models/pvanet/pretrained/pva9.1_pretrained_no_fc6.caffemodel \
--iters 60000 \
--cfg models/pvanet/cfgs/train.yml \
--imdb voc_2007_trainval \
2>&1 | tee ~/pvanet_train_own_voc2007_60000.log
2>&1 的意思是把标准错误输出重定向到标准输出,即同时打印出标准错误信息。2表示STDERR, 1表示STDOUT, >&重定向命令, tee表示读取标准输入的数据,并将其内容输出成文件。
最后我们即获得相应的日志文件pvanet_train_own_voc2007_60000.log
三 解析文件内容
用编辑器打开日志,我们观察到需要获得几个主要参数的值。迭代次数Iteration, 显示间隔display, 最大迭代次数max_iters ,loss_cls, loss_bbox等。
...
display: 20
...
Namespace(cfg_file='models/pvanet/cfgs/train.yml', gpu_id=0, imdb_name='voc_2007_trainval', max_iters=60000, pretrained_model='models/pvanet/pretrained/pva9.1_pretrained_no_fc6.caffemodel', randomize=False, set_cfgs=None, solver='models/pvanet/example_train/solver.prototxt')
...
I0223 23:58:42.539490 143427 solver.cpp:238] Iteration 3260, loss = 0.827335
I0223 23:58:42.539528 143427 solver.cpp:254] Train net output #0: loss_bbox = 0.326038 (* 1 = 0.326038