在深度学习中,不可获取的是对于loss的数据特性分析,然而loss曲线绘制是可视化中较为直观且实现较为简单的部分。下面将着重讲解windows环境下的用matlab绘制caffe训练日志中的loss曲线。
step1:首先我们需要获取caffe的训练日志文件,如果您没有使用类似这样的命令将当前训练的日志输出。
......caffe train --solver=...... 2>&1 | tee log.txt
那么你需要通过以下方式找到你的caffe训练日志。
step1:
开始菜单搜索 %temp%
在 Temp文件夹内会存放默认条件下caffe的训练日志。这里会有很多文件,在搜索框搜索关键字 caffe 会出现和caffe相关的日志文件
这里caffe.LITCHI-PC.Litchi.log.INFO.20171011-125054.4340为我们所需要的训练产生的训练日志,ERROR和FATAL为发生错误时的提示,调试时出现错误请查看这些文件。根据文件日期分辩是一个好的小技巧。打开方式可以使用默认txt,或者下载一个notpad++更为方便阅读。
step2:
将需要的日志文件复制到自己的目录,由于文件名较长,作者这里为了方便将其重命名为 *.log 的形式。如:‘P3e10_MFCNN_caffe.log’。
step3:
使用matlab脚本程序绘制曲线,代码如下
%my loss
clear; clc; close all;
folder_test = 'draw_loss';%为了方便绘制多个训练日志,通过文件夹统一存放
filepaths = dir(fullfile(folder_test,'*.log'));%获取文件夹下所有.log格式文件列表,即批处理操作,这里我使用了重命名将后缀改为.log方便识别。
%train_log_file = 'P3e10_MFCNN_caffe.log' ; %你的caffe训练日志
for i = 1 : length(filepaths) %for循环用于批处理操作
train_log_file = fullfile(folder_test,filepaths(i).name);
[~, string_output] = dos(['type ' , train_log_file ]) ; %windows下获取文件内字符串,注意需要加上'type'类型,否则运行时会默认记事本打开当前文件
%[~, string_output] = dos( train_log_file ) ; %
%pat='1 = .*? loss';
pat='Train net output #\d: loss = .*? ';%draw train loss 此处为正则表达项,匹配caffe训练中的Train net output字段,为了和test loss区别开
o1=regexp(string_output,pat,'start');%用'start'参数指定输出o1为匹配正则表达式的子串的起始位置
o2=regexp(string_output,pat,'end');%用'start'参数指定输出o1为匹配正则表达式的子串的结束位置
o3=regexp(string_output,pat,'match');%用'match'参数指定输出o2为匹配正则表达式的子串
loss_num =270;%作者这里由于每次训练的次数不同,为了控制绘图同精度,故在匹配的数据矩阵中只取前270个点用于绘制loss,这里可根据需求自行更改。
loss=zeros(1,loss_num);
for j=1:size(loss,2)
loss(j)=str2num(string_output(o1(j)+28:o2(j)));
end
loss_path=strcat('loss_mat/',filepaths(i).name,'.mat');
save(loss_path,'loss');
hold on
plot(loss)
end
step4:最后为了美观你可以自定义曲线颜色和对应的提示标记,这里不展开赘述,如:
上述为windows环境下用matlab绘制caffe训练日志train loss的全过程,需要绘制test loss或 test accuracy的同学,请自行更改代码中的正则匹配部分即可。如果对正则不熟悉的同学可以搜索网页版正则校验器进行尝试,非常简单,熟能生巧。
最后本文为作者原创,未经许可请勿转载,感谢配合。希望我的只言片语可以给您带来帮助,非常感谢。文章中若有纰漏和其他问题,欢迎批评指正共同进步。详细请在留言区评论。