caffe保存训练log日志文件并利用保存的log文件绘制accuary loss曲线图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe保存训练log日志文件并利用保存的log文件绘制accuary loss曲线图相关的知识,希望对你有一定的参考价值。

参考技术A 1、训练模型时保存log日志文件

方法1   一般情况下我们的训练模型标准语句是: $ sudo  ./build/tools/caffe train -solver=xxx/xxx/solver.prototxt       xxx/xxx/表示你的solver.prototxt文件所在位置

  需要保存log文件时的命令是:$ sudo GLOG_logtostderr=0 GLOG_log_dir='xxx/xxx/xxx/' build/tools/caffe train -solver=xxx/xxx/solver.prototxt      ’xxx/xxx/xxx/‘表示你所保存的log文件所在位置。

       训练完成后发现在我们保存的目录xxx/xxx/xxx/下生成了两个上锁log文件caffe.INFO和caffe.ubuntu.root.log.INFO.20170611-103712.5383。点击打开后我们可以看到我们所训练的日志文件。

方法2    ./build/tools/caffe train -solver=xn/PENLU/neural/nin/nin_solver.prototxt 2>&1 | tee xn/PENLU/snapshot/nin/nin_relu.log

2、利用生成的log文件绘制accuary loss曲线图

首先绘制图,caffe中其实已经自带了这样的小工具 caffe-master/tools/extra/parse_log.sh  和caffe-master/tools/extra/extract_seconds.py还有 caffe-master/tools/extra/plot_training_log.py.example;拷贝以上文件到当前训练模型的目录下。

      然后我们到你保存的log文件目录下将1中保存的log文件解锁,解锁命令:sudo chmod -R 777 ./caffe.ubuntu.root.log.INFO.20170611-103712.5383

      解锁后我们就可以更改该log文件名为xxx.log(注意:要画图一定是.log文件,所以不改名不可以画)。

然后复制该xxx.log文件到你训练模型所在目录下。

      然后就可以利用命令画图了:在模型所在目录下命令: ./plot_training_log.py.example y xxx.png xxx.log      xxx.png是你保存的绘制出的图片名称,xxx.log是你保存的log文件名称。y表示的是你的所绘制的图片到底是什么图片,具体解释如下:

        y的数字代表意义(0~7):

Supported chart types:    0: Test accuracy  vs. Iters    (准确率与迭代次数图)

1: Test accuracy  vs. Seconds    (准确率与时间图)

2: Test loss  vs. Iters    (测试损失与迭代次数图)

3: Test loss  vs. Seconds    (测试损失与时间图)

4: Train learning rate  vs. Iters    (学习率与迭代次数图)

5: Train learning rate  vs. Seconds    (学习率与时间图)

6: Train loss  vs. Iters    (训练损失与迭代次数图)

7: Train loss  vs. Seconds   (训练损失与时间图)

运行后生成的文件有:log-data.log.test和log-data.log.test和xxx.png

3、test测试log日志文件保存与绘图类似过程

在训练时,accuracy不变,loss一直在降低是啥原因

在训练过程中画出accuracy 和loss曲线能够更直观的观察网络训练的状态,以便更好的优化网络的训练。本文主要介绍在基于caffe框架训练网络时,如何利用caffe自带的一些实用的工具包来绘制曲线。
step1:保存日志文件
在训练过程中把终端输出的结果保存为一个日志文件,注意文件的后缀名必须是.log,这是因为后面再解析日志文件时有这个要求。如何把终端保存到日志文件,例子如下:
$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log
step2:解析日志文件
这一步利用caffe中tools/extra文件夹下的parse_log.py来解析日志文件。具体例子如下:
python parse_log.py out.log ./ #两个参数,一个是日志文件,另一个是保存的路径
运行结束之后会发现在你保存的路径中会生成两个文件out.log.train和out.log.test
step3:绘制accuracy 和loss曲线。
利用caffe中tools/extra文件夹下的plot_training_log.py文件来绘制。
python plot_training_log.py 2 testloss.png out.log
这里要解释下,如果你直接运行这个是会报错的。因为在out.log.test文件是这样的。
NumIters,Seconds,TestAccuracy,TestLoss
0.0,2.318823,-1,0.360432
200.0,10.975734,-1,0.0757681
400.0,19.634317,-1,0.0610909
600.0,28.295885,-1,0.0554078
800.0,36.953475,-1,0.0510606
1000.0,45.644651,-1,0.0463909
load_data的时候第一行是不读的,要么你自己第一行加个#,要么就直接不读第一行。另外在split的时候不是用空格而是用‘,’因此做如下修改。
def load_data(data_file, field_idx0, field_idx1):
data = [[], []]
with open(data_file, 'r') as f:
num=len(f)
for line_num in range(1,num):#此处修改
line = f[line_num].strip()
#if line[0] != '#':#此处修改
fields = line.split(',')#此处修改
data[0].append(float(fields[field_idx0].strip()))
data[1].append(float(fields[field_idx1].strip()))
return data
上面还有个地方需要解释就是那个2是什么意思,这个你直接运行下Python plot_training_log.py就会打出帮助信息,就能看见了。
以上就是利用caffe自带的工具包绘制曲线的方法。
参考技术A 交叉时网络的性能正好,再训练就可能要过拟合了。 参考技术B 比如binary cross-entropy,loss的减少并不意味着accuracy的提高。考虑label1,第1、2、3步的预测0.2、0.4和0.6以及分类阈值0.5,步骤1和步骤2的loss降低,但accuracy不变。

以上是关于caffe保存训练log日志文件并利用保存的log文件绘制accuary loss曲线图的主要内容,如果未能解决你的问题,请参考以下文章

caffe使用ctrl-c不能保存模型

利用 Log4j2 异步保存日志到 MongoDB 中

如何绘制caffe训练过程中的loss和accurary的曲线

logging模块的使用心得

如何利用caffe自带的工具包绘制accuracy/loss曲线

Laravel基于日期的日志文件