caffe绘制训练过程的loss和accuracy曲线

在caffe的训练过程中,大家难免想图形化自己的训练数据,以便更好的展示结果。如果自己写代码记录训练过程的数据,那就太麻烦了,caffe中其实已经自带了这样的小工具 caffe-master/tools/extra/parse_log.sh  caffe-master/tools/extra/extract_seconds.py和 caffe-master/tools/extra/plot_training_log.py.example ,使用方法如下:

1.记录训练日志

在训练过程中的命令中加入一行参数 ,实现Log日志的记录

  1. TOOLS=./build/tools
  2. GLOG_logtostderr= 0 GLOG_log_dir=deepid/deepid2/ Log/ \
  3. $TOOLS/caffe train \
  4. --solver=deepid/deepid2/deepid_solver.prototxt

其中目录改成自己系统的目录,这样训练结束之后,会在Log文件夹中生成每次训练的Log日志


2.解析训练日志

将最上面说的3个脚本文件拷贝到Log 文件夹下,执行:

./parse_log.sh caffe.wujiyang-ubuntu.wujiyang.log

后面的参数为log文件名,这样就会在当前文件夹下生成一个.train文件和一个.test文件


3.生成图片

执行

./plot_training_log.py.example 0  save.png caffe.wujiyang-ubuntu.wujiyang.log

就可以生成训练过程中的Test accuracy  vs. Iters 曲线,其中0代表曲线类型, save.png 代表保存的图片名称

caffe中支持很多种曲线绘制,通过指定不同的类型参数即可,具体参数如下

  1. Notes:
  2. 1. Supporting multiple logs.
  3. 2. Log file name must end with the lower-cased ".log".
  4. Supported chart types:
  5. 0: Test accuracy vs. Iters
  6. 1: Test accuracy vs. Seconds
  7. 2: Test loss vs. Iters
  8. 3: Test loss vs. Seconds
  9. 4: Train learning rate vs. Iters
  10. 5: Train learning rate vs. Seconds
  11. 6: Train loss vs. Iters
  12. 7: Train loss vs. Seconds

最后,看一下效果

caffe绘制训练过程的loss和accuracy曲线_第1张图片caffe绘制训练过程的loss和accuracy曲线_第2张图片





-------------------------------------------------------------------------------------------------------------

用caffe自带的画图工具,对训练日志进行可视化遇到了一些问题,记录一下。

说一下我的情况。参考这篇博客的方法:http://blog.csdn.net/u013078356/article/details/51154847


1、把这三个文件:

caffe-master/tools/extra/parse_log.sh 

caffe-master/tools/extra/extract_seconds.py

master/tools/extra/plot_training_log.py.example 

拷贝到日志路径下。

2、

执行  ./parse_log.sh  mylog.log

3、

执行  ./plot_training_log.py.example 0 save.png mylog.log


  1. Notes:  
  2.     1. Supporting multiple logs.  
  3.     2. Log file name must end with the lower-cased ".log".  
  4. Supported chart types:  
  5.     0: Test accuracy  vs. Iters  
  6.     1: Test accuracy  vs. Seconds  
  7.     2: Test loss  vs. Iters  
  8.     3: Test loss  vs. Seconds  
  9.     4: Train learning rate  vs. Iters  
  10.     5: Train learning rate  vs. Seconds  
  11.     6: Train loss  vs. Iters  
  12.     7: Train loss  vs. Seconds  


说一下我的问题,我用的SSD环境训练的模型,日志输出不用额外加命令,训练过程中的输出日志会保存在jog文件夹下。

按照以上步骤我执行了1、2.都没什么问题。

训练过程中,输出的日志,可以正常用0 1 这两个参数画图 其他的参数用不了,

报错:Traceback (most recent call last):
  File "./plot_training_log.py", line 191, in
    plot_chart(chart_type, path_to_png, path_to_logs)
  File "./plot_training_log.py", line 117, in plot_chart
    data = load_data(data_file, x, y)
  File "./plot_training_log.py", line 88, in load_data
    data[1].append(float(fields[field_idx1].strip()))
IndexError: list index out of range

这个问题暂时还没解决。

训练完成时,这个日志正常输出结束,结果连0 1 这两个参数也没法画图了

报同样的类似错误。

查了一下是因为我的学习率策略是用的multi_step。所以在设置的stepvalue的地方训练日志里会输出一句

I0810 22:19:02.672968 9663 sgd_solver.cpp:47] MultiStep Status: Iteration 10000, step = 1
紧跟着这一句下面是正常的日志输出

I0810 22:19:02.672971 9663 sgd_solver.cpp:138] Iteration 10000, lr = 2e-05
所以问题就在这里,需要把所有你设置stepvalue的地方那里输出的这条删掉,都删掉以后0 1 6 7这两个参数就可以画图了,但是其他参数还是不能用,估计也是日志哪里出了问题

MultiStep Status: Iteration 10000, step = 1


好吧,尴尬了,查看了一下my.log.test里面都没有Test loss 的数据所以参数为2 3的没法画图
参数4 5 没法画是因为 my.log.train里面的
学习率名字是LearningRate而不是 Train learning rate所以也没法找到数据画图

你可能感兴趣的:(【Caffe,及,应用实例】)