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中的源码,就可以做很多个性化修改

  • 相关阅读:
    UISegmentedControl分段控件
    手势识别器
    delegate代理设计模式
    target/action设计模式
    响应者链
    事件处理
    屏幕旋转
    混编ObjectiveC++
    AES128加密
    您不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。
  • 原文地址:https://www.cnblogs.com/newbyang/p/8258751.html
Copyright © 2011-2022 走看看