zoukankan      html  css  js  c++  java
  • 如何利用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中的源码,就可以做很多个性化修改

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/newbyang/p/8258751.html
Copyright © 2011-2022 走看看