绘制loss和accuracy曲线

时间:2024-04-13 17:51:01

JLU-IPVR

听笙

做过训练的同学们都知道,我们很关注训练过程中loss和accuracy这两个参数值的变化,loss值不断减小,证明它正在趋于收敛,accuracy值不断增加,证明它的准确率在不断提升,这都是我们想看到的,实际上我们也希望能够直观的看到他们的变化趋势。这篇文章讲解的就是如何将loss和accuracy的变化曲线描绘出来。

在训练过程中我们会发现有这样一些东西:

绘制loss和accuracy曲线

这些东西就是训练日志,绘制loss和accuracy时需要使用的数据。但是会发现我们训练的时候这些数据并没有保存下来,那么我们就要对源码做一些修改。打开工程,进入libcaffe-src,找到common.cpp文件

1.  添加头文件

绘制loss和accuracy曲线

2.  添加一个生成日志的子函数

绘制loss和accuracy曲线

需要注意的是这个子函数一定要定义在void GlobalInit(int* pargc,char*** pargv)之前,因为Globallnit函数要调用initGlob()子函数。

3.  void GlobalInit(int* pargc,char*** pargv)函数中调用2中定义的子函数

绘制loss和accuracy曲线

右键libcaffe->生成,右键caffe->生成。接下来训练过程的的日志就会被记录下来,放在指定的文件夹下。

绘制loss和accuracy曲线

将文件后缀名更改为log

 

绘图

根据之前的的操作,已经得到日志文件INFO2017-08-30T10-50-47.log,现在需要根据这个文件生成*****log.test,*****log.train两个文件。

找到\caffe-master\tools\extra文件夹下的plot_training_log.py对立面的内容进行修改如下。

1.  首先要多引进一个模块parse_log,在文件开始部分添加

Import parse_log,这个非常重要。

绘制loss和accuracy曲线

2.  修改子函数create_field_index()

绘制loss和accuracy曲线

主要修改的地方就是field_index,这要根据你前面生成的****.log.test和****.log.train两个文件中第一行的单词的顺序修改字典对应顺序。我此处的修改是根据我的文件,切记一定要和你的文件核对,否则生成的曲线是不对的。我已经测试过8种曲线都能正确画出。

绘制loss和accuracy曲线

绘制loss和accuracy曲线

3.  修改load_data()

绘制loss和accuracy曲线

之所以修改这个函数,因为原函数是从****.log.test和****.log.train的第一行读取数据,但是第一行是单词如法转换成浮点数,必须从第二行开始读取数据。

 

需要修改的部分已经基本完成,接下来就可以画图了=。=

Windows下的命令格式:

./plot_training_log.py chart_type[0-7]/where/to/save.png /path/to/first.log

其中0—7数字所代表的画图的种类为:

Supportedchart 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

绘制loss和accuracy曲线

得到如下图像:

绘制loss和accuracy曲线