如何利用caffe自带的工具包绘制accuracy/loss曲线(windows环境)
本文为根据实际项目中出现的问题找到的解决方法,参考相关文献(见链接)并做适当调整。
方法一:
使用VS2013打开Caffe,找到src/common.cpp文件,添加如下代码:
1、添加几个头文件
- #include <boost/date_time.hpp>
- #include <process.h>
- #include <direct.h>
- 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());
- }
3、在void 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]);
- }
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、解析训练日志
执行:
这里是需要png图片。需要修改plot_training_log.py。
将最上面说的4个脚本文件拷贝到Log 文件夹下,生成XXXXX.log (这里记得不要使用python3,因为有些地方不兼容,如果只有python3,那你可以根据提示修改相应的代码)
后面的参数为log文件名,这样就会在当前文件夹下生成一个.train文件和一个.test文件
3、生成图片 python parse_log.py xxxx.log .
执行:
python plot_training_log.py 0 save.png XXXX.log
在我实际用的过程中执行上述步骤3时,出现步骤2生成的.train文件.test文件会被重新生成,且替换后的文件无数据信息,实际上在步骤3中,同样有解析训练日志的代码,将其屏蔽掉即可
4、最终结果
caffe中支持很多种曲线绘制,通过指定不同的类型参数即可,具体参数如下:
总之,多看看plot_training_log.py中的源码,就可以做很多个性化修改