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