公司机器上,使用python画图缺少一些库,但是又没有权限安装,所以考虑matlab。
使用MATLAB画解析caffe的训练日志,其实就是找规律,代码如下:
function loss_accuracy_visualization(logName)
fid = fopen(logName, 'r');
fid_accuracy = fopen('output_accuracy.txt', 'w');
fid_loss = fopen('output_loss.txt', 'w');
fid_lr=fopen('output_lr.txt','w');
iteration ={};
loss = {};
accuracy = {};
%path = './';
iter_current='';
while(~feof(fid))
tline = fgetl(fid);
%%
if strfind(tline, 'sgd_solver.cpp:')
iter_index = strfind(tline, 'Iteration ');
rest = tline((iter_index+10):end);
iter_current = strtok(rest, ','); % iteration number;
iteration = [iteration iter_current]; % count the iteration;
lr_index = strfind(tline, 'lr = ');
lr_current = tline((lr_index+4):end); % learning rate;
fprintf(fid_lr,'%s\t%s\n',iter_current,lr_current);
end
%%
if strfind(tline, 'solver.cpp:218]')
iter_index = strfind(tline, 'Iteration ');
rest = tline((iter_index+10):end);
iter_current = strtok(rest, '(');
loss_index = strfind(tline, 'loss = ');
loss_current = tline((loss_index+7):end);
fprintf(fid_loss, '%s\t%s\n', iter_current,loss_current);
% fprintf(fid_, '%s \n', loss_current );
loss = [loss loss_current] ; % count the iteration;
end
if strfind(tline, 'solver.cpp:237')
accuracy_index = strfind(tline, 'accuracy = ');
accuracy_current = tline((accuracy_index+11):end);
fprintf(fid_accuracy, '%s\t%s\n', iter_current,accuracy_current);
accuracy = [accuracy accuracy_current];
end
end
fclose(fid);
fclose(fid_accuracy);
fclose(fid_loss);
fclose(fid_lr);
%plot
train_loss=importdata('output_loss.txt');
if(~isempty(train_loss))
figure(1)
plot(train_loss(:,1),train_loss(:,2));
title('output_loss vs. Iterations')
end
test_loss=importdata('output_accuracy.txt');
if(~isempty(test_loss))
figure(2)
plot(test_loss(:,1),test_loss(:,2));
title('output_accuracy vs. Iterations')
end
train_lr=importdata('output_lr.txt');
if(~isempty(train_lr))
figure(3)
plot(train_lr(:,1),train_lr(:,2));
title('output_lr vs. Iterations')
end
代码调用:
logName = 'caffe.qihan.root.log.INFO.20171204-160826.27459';
loss_accuracy_visualization(logName);