如何在window下绘制caffe的loss和accuracy曲线

来源:互联网 发布:c 股票自动交易源码 编辑:程序博客网 时间:2024/06/07 22:23

如何在window下绘制caffe的loss和accuracy曲线

其大概方法都是要先生成log文件,然后通过其来绘制这两条曲线。生产log文件基本有两种方法。

方法一

 通过命令行来进行生成,其使用bat文件时的配置为:
h:  cd H:\VCproject\ddcaffe.exe train --solver=H:/VCproject/dd/solver.prototxt --weights=H:/VCproject/dd/bvlc_reference_caffenet.caffemodel >Log/xinxi.log 2>&1pause  

其截图为:
这里写图片描述
注意:这个时把在控制台上的输出打印到xinxi.log文件中,缺点:无法在控制台上看到实时的输出信息。接着就可以使用[小工具][1]进行画图了。

方法二:

使用修改源代码的方式。其使用VS2013打开Caffe。到src/common.cpp文件,

1、如下代码:

#include <boost/date_time.hpp>  #include <process.h>  #include <direct.h>  

2、日志的子函数

void initGlog() {    FLAGS_log_dir = ".\\log\\";//存放日志文件的文件夹路径,我们可以自己指定    _mkdir(FLAGS_log_dir.c_str());    std::string LOG_INFO_FILE;    std::string LOG_WARNING_FILE;    std::string LOG_ERROR_FILE;    std::string LOG_FATAL_FILE;    std::string now_time = boost::posix_time::to_iso_extended_string(boost::posix_time::second_clock::local_time());    now_time[13] = '-';    now_time[16] = '-';    LOG_INFO_FILE = FLAGS_log_dir + "INFO" + now_time + ".log"; //将txt改为log,因为caffe处理脚本处理的是log类型,  google::SetLogDestination(google::GLOG_INFO, LOG_INFO_FILE.c_str());    LOG_WARNING_FILE = FLAGS_log_dir + "WARNING" + now_time + ".txt";    google::SetLogDestination(google::GLOG_WARNING, LOG_WARNING_FILE.c_str());    LOG_ERROR_FILE = FLAGS_log_dir + "ERROR" + now_time + ".txt";    google::SetLogDestination(google::GLOG_ERROR, LOG_ERROR_FILE.c_str());    LOG_FATAL_FILE = FLAGS_log_dir + "FATAL" + now_time + ".txt";    google::SetLogDestination(google::GLOG_FATAL, LOG_FATAL_FILE.c_str());  }  

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

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

void GlobalInit(int* pargc, char*** pargv) {    // Google flags.    ::gflags::ParseCommandLineFlags(pargc, pargv, true);    // Provide a backtrace on segfault.    //::google::InstallFailureSignalHandler();    // Google logging.    /*******添加到下面位置*********/    initGlog();    /**************************/    ::google::InitGoogleLogging(*(pargv)[0]);  }  

4、重新生成libcaffe
右击项目libcaffe->生成,等待就可以了。
5、重新生成caffe,这个很重要否则无法生效,我一开始就忘记这一步,所以没有成功。
右击项目caffe->生成,等待就OK!
6、分享两个很有用的连接
Linux下训练日志重定向及画loss与accuracy曲线:http://blog.csdn.net/fx409494616/article/details/53197209?ref=myread,这篇博客中的做法更加简洁
caffe中如何关闭命令行log输出:http://blog.csdn.net/zhangla1220/article/details/50999072,使用于工程。
一切搞定,赶紧去试试吧!
再次训练网络时,你会在Build\x64\Release下发现多出一个log文件夹,我们所要的训练日志就保存在里面了。至于如何利用这些日志文件,画loss曲线和accuracy曲线,下一篇再详细讲解。
注意:这修改源代码的方式自己测试了下,并有成功,只能创建文件夹,但是没有日志生成。

成了日志文件后我们需要做的就是如何绘制loss和accuracy曲线了。

我们需要的就是博客后面的小工具,其就是tools/extra/下的工具,不过那些时在linux下的,在运行时会出错,所以在window下需要进行修改,小工具就是经过修改的,不过plot_training_log.py的开头还需要添加一行代码,其为:
# -*- coding: utf-8 -*-

否则会报:yntaxError:Non-ASCII character ‘\xe6’ in file等错误。
在window下的方法就是:
1、把生产的log文件放到这个小工具目录下;
2、把然后在cmd中使用下面的指令:

python plot_training_log.py 7 train.png xiaoxi.log

其中的7指的是第七种绘图方式,不过一般是使用0,跌到次数跟loss或者accuracy的关系。图如下:
这里写图片描述

[1]小工具
参考博客:Caffe-Windows下画loss与accuracy曲线

原创粉丝点击