如何利用caffe自带的工具包绘制accuracy/loss曲线(windows环境)

      本文为根据实际项目中出现的问题找到的解决方法,参考相关文献(见链接)并做适当调整。
一、当无日志输出时(参考:http://blog.csdn.net/sunshine_in_moon/article/details/53529028)   
      方法一:
      使用VS2013打开Caffe,找到src/common.cpp文件,添加如下代码:

      1、添加几个头文件

    1. #include <boost/date_time.hpp>  
    2. #include <process.h>  
    3. #include <direct.h>  
      2、添加一个生成日志的子函数
    1. void initGlog() {  
    2.   FLAGS_log_dir = ".\log\";//存放日志文件的文件夹路径,我们可以自己指定,一定要注意路径设置,别最后不知道放哪儿了
    3.   _mkdir(FLAGS_log_dir.c_str());  
    4.   std::string LOG_INFO_FILE;  
    5.   std::string LOG_WARNING_FILE;  
    6.   std::string LOG_ERROR_FILE;  
    7.   std::string LOG_FATAL_FILE;  
    8.   std::string now_time = boost::posix_time::to_iso_extended_string(boost::posix_time::second_clock::local_time());  
    9.   now_time[13] = '-';  
    10.   now_time[16] = '-';  
    11.   LOG_INFO_FILE = FLAGS_log_dir + "INFO" + now_time + ".log"; //将txt改为log,因为caffe处理脚本处理的是log类型,
    12.   google::SetLogDestination(google::GLOG_INFO, LOG_INFO_FILE.c_str());  
    13.   LOG_WARNING_FILE = FLAGS_log_dir + "WARNING" + now_time + ".txt";  
    14.   google::SetLogDestination(google::GLOG_WARNING, LOG_WARNING_FILE.c_str());  
    15.   LOG_ERROR_FILE = FLAGS_log_dir + "ERROR" + now_time + ".txt";  
    16.   google::SetLogDestination(google::GLOG_ERROR, LOG_ERROR_FILE.c_str());  
    17.   LOG_FATAL_FILE = FLAGS_log_dir + "FATAL" + now_time + ".txt";  
    18.   google::SetLogDestination(google::GLOG_FATAL, LOG_FATAL_FILE.c_str());  
    19. }  
          需要注意的是这个子函数一定要定义在void GlobalInit(int* pargc, char*** pargv)之前,因为Globallnit函数要调用initGlob()子函数。

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

 
    1. void GlobalInit(int* pargc, char*** pargv) {  
    2.   // Google flags.  
    3.   ::gflags::ParseCommandLineFlags(pargc, pargv, true);  
    4.   // Provide a backtrace on segfault.  
    5.   //::google::InstallFailureSignalHandler();  
    6.   // Google logging.  
    7.   /*******添加到下面位置*********/  
    8.   initGlog();  
    9.   /**************************/  
    10.   ::google::InitGoogleLogging(*(pargv)[0]);  
    11. }  
       4、重新生成libcaffe:右击项目libcaffe->生成,等待就可以了。

       5、重新生成caffe:右击项目caffe->生成,等待就OK!

      方法二:管道操作(参考:http://blog.csdn.net/langb2014/article/details/50482150)

          直接上图:

             

            将控制台显示内容全部copy到caffe.log中

 二、利用 caffe自带小工具绘制accuracy/loss曲线(参考:https://www.zhihu.com/question/49521165)    
       1、caffe自带小工具位置:
     caffe-master/tools/extra/parse_log.sh
     caffe-master/tools/extra/parse_log.py
     caffe-master/tools/extra/extract_seconds.py
     caffe-master/tools/extra/plot_training_log.py.example 
   去除plot_training_log.py.example后缀“.example”
2、解析训练日志
    将最上面说的4个脚本文件拷贝到Log 文件夹下,生成XXXXX.log (这里记得不要使用python3,因为有些地方不兼容,如果只有python3,那你可以根据提示修改相应的代码)

   python parse_log.py xxxx.log .

    后面的参数为log文件名,这样就会在当前文件夹下生成一个.train文件和一个.test文件
3、生成图片
   执行:
python plot_training_log.py 0  save.png XXXX.log 
   这里是需要png图片。需要修改plot_training_log.py。

在我实际用的过程中执行上述步骤3时,出现步骤2生成的.train文件.test文件会被重新生成,且替换后的文件无数据信息,实际上在步骤3中,同样有解析训练日志的代码,将其屏蔽掉即可

4、最终结果

 

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

 总之,多看看plot_training_log.py中的源码,就可以做很多个性化修改

原文地址:https://www.cnblogs.com/newbyang/p/8258751.html