【Caffe】学习曲线可视化

Caffe-学习曲线可视化

本笔记记录用Caffe实现学习曲线可视化的学习过程,欢迎学习交流!

1.输出重定向到log文件

首先要把Caffe运行产生的log重定向到文件,&表示放在后台运行,代码如下

./train.sh >& cifar.log &

如果查看程序运行是否正常,使用下面这条语句

tail -f cifar.log

好处:
1.可以一个终端干多个事情,比如一边跑训练,一边写代码。
2.当你的终端关闭时,不会停止训练进程。
3.可以随地从其他终端查看训练进度,而不必要回到启动训练任务的终端。

2.提取loss值

Demo.log中提取loss值有多种方法,比较方便的一种是用Shell命令:

cat cifar.log | grep “Train net output” | awk ‘{print&11}’
其中,“|”为管道命令,即将前一条命令输出直接送入后一条命令作为输入。

3.绘制学习曲线

将这个文件放在caffe的主目录下:

clear;
clc;
close all;
% 这个参数用来指定 Caffe 运行 log 文件
% 生成 log 文件方法:./examples/cifar10/train_quick.sh  >& cifar.log&
train_log_file = 'trainmnist.log';
% 这个参数相当于 solver.prototxt 中的 display 值
train_interval = 100;
% 这个参数相当于 solver.prototxt 中的test_interval 值
test_interval = 500;


[~, string_output] = dos(['cat ', train_log_file, ' | grep ''Train net output #0'' | awk ''{print $11}''']);
% 第11个空格后面的提出取出
% fid = fopen('matlab_train_loss', 'r');
% train_loss = fscanf(fid, '%f\n');
% fclose(fid);

train_loss = str2num(string_output);
n = 1:length(train_loss);
idx_train = (n - 1) * train_interval;

% fid = fopen('matlab_test_loss', 'r');
% test_loss = fscanf(fid, '%f\n');
% fclose(fid);
[~, string_output] = dos(['cat ', train_log_file, ' | grep ''Test net output #1'' | awk ''{print $11}''']);
% 第11个空格后面的提出取出
test_loss = str2num(string_output);
m = 1:length(test_loss);
idx_test = (m - 1) * test_interval;
figure;
plot(idx_train, train_loss,'--r');
hold on;
plot(idx_test, test_loss,'g');

grid on;
legend('Train Loss', 'Test Loss');
xlabel('iterations');
ylabel('loss');
title(' Train & Test Loss Curve');

学习曲线如下所示:

这里写图片描述

曲线解读:

通过学习曲线,可以评估当前的训练状态:
train loss 不断下降,test loss 不断下降,说明网络仍然在学习。
train loss 不断下降,test loss 趋于不变,说明网络过拟合。
train loss 趋于不变,test loss区域不变,说明学习曲线遇到瓶颈,需减小学习速率或批量数据尺寸。
train loss 趋于不变,test loss不断下降,说明数据集100%有问题。
train loss 不断上升,test loss 不断上升(最终变为NaN)可能是网络结构设计不当,训练超参数设计不当,程序bug等某个问题引起的,需要进一步等位。

ps:这里用到了awk用于文本处理,非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值