感谢 网友 Vagrant的提醒。之前 一直就看个最后的accuracy。这个应该并不靠谱。最好把说有的信息都看一下。而一个一个看。根本记不住。只能把数据读取在图片中显示一下,才比较直观。

本文就是读的cifar10中的train_quick.sh输出的txt信息。

输出txt命令类似下面:

$ sh examples/mnist/train_lenet.sh 2>&1 l tee examples/mnist/文件名.txt | less

我的txt如下

I0504 16:10:30.715772 28960 solver.cpp:464] Iteration 900, lr = 0.001
I0504 16:11:05.512084 28960 solver.cpp:266] Iteration 1000, Testing net (#0)
I0504 16:11:15.169495 28960 solver.cpp:315] Test net output #0: accuracy = 0.6329
I0504 16:11:15.169548 28960 solver.cpp:315] Test net output #1: loss = 1.05425 (* 1 = 1.05425 loss)
I0504 16:11:15.310549 28960 solver.cpp:189] Iteration 1000, loss = 0.943602
I0504 16:11:15.310600 28960 solver.cpp:204] Train net output #0: loss = 0.943602 (* 1 = 0.943602 loss)
I0504 16:11:15.310612 28960 solver.cpp:464] Iteration 1000, lr = 0.001
I0504 16:11:52.422785 28960 solver.cpp:189] Iteration 1100, loss = 0.987194
I0504 16:11:52.422874 28960 solver.cpp:204] Train net output #0: loss = 0.987194 (* 1 = 0.987194 loss)
I0504 16:11:52.422888 28960 solver.cpp:464] Iteration 1100, lr = 0.001
I0504 16:12:30.034868 28960 solver.cpp:189] Iteration 1200, loss = 0.992985
I0504 16:12:30.034958 28960 solver.cpp:204] Train net output #0: loss = 0.992985 (* 1 = 0.992985 loss)
I0504 16:12:30.034971 28960 solver.cpp:464] Iteration 1200, lr = 0.001
I0504 16:13:08.997802 28960 solver.cpp:189] Iteration 1300, loss = 0.866693
I0504 16:13:08.997913 28960 solver.cpp:204] Train net output #0: loss = 0.866693 (* 1 = 0.866693 loss)
I0504 16:13:08.997926 28960 solver.cpp:464] Iteration 1300, lr = 0.001
I0504 16:13:49.289508 28960 solver.cpp:189] Iteration 1400, loss = 0.89818
I0504 16:13:49.289584 28960 solver.cpp:204] Train net output #0: loss = 0.89818 (* 1 = 0.89818 loss)
I0504 16:13:49.289597 28960 solver.cpp:464] Iteration 1400, lr = 0.001
I0504 16:14:30.803120 28960 solver.cpp:266] Iteration 1500, Testing net (#0)
I0504 16:14:42.165652 28960 solver.cpp:315] Test net output #0: accuracy = 0.6668
I0504 16:14:42.165700 28960 solver.cpp:315] Test net output #1: loss = 0.974285 (* 1 = 0.974285 loss)
I0504 16:14:42.337384 28960 solver.cpp:189] Iteration 1500, loss = 0.836957
I0504 16:14:42.337427 28960 solver.cpp:204] Train net output #0: loss = 0.836957 (* 1 = 0.836957 loss)
I0504 16:14:42.337445 28960 solver.cpp:464] Iteration 1500, lr = 0.001
I0504 16:15:25.932066 28960 solver.cpp:189] Iteration 1600, loss = 0.874446
I0504 16:15:25.932142 28960 solver.cpp:204] Train net output #0: loss = 0.874446 (* 1 = 0.874446 loss)
I0504 16:15:25.932154 28960 solver.cpp:464] Iteration 1600, lr = 0.001
I0504 16:16:09.884897 28960 solver.cpp:189] Iteration 1700, loss = 0.853356
I0504 16:16:09.885004 28960 solver.cpp:204] Train net output #0: loss = 0.853356 (* 1 = 0.853356 loss)
I0504 16:16:09.885017 28960 solver.cpp:464] Iteration 1700, lr = 0.001
I0504 16:16:54.762683 28960 solver.cpp:189] Iteration 1800, loss = 0.746637
I0504 16:16:54.762750 28960 solver.cpp:204] Train net output #0: loss = 0.746637 (* 1 = 0.746637 loss)
I0504 16:16:54.762763 28960 solver.cpp:464] Iteration 1800, lr = 0.001
I0504 16:17:39.067754 28960 solver.cpp:189] Iteration 1900, loss = 0.834299
I0504 16:17:39.067828 28960 solver.cpp:204] Train net output #0: loss = 0.834299 (* 1 = 0.834299 loss)
I0504 16:17:39.067841 28960 solver.cpp:464] Iteration 1900, lr = 0.001
I0504 16:18:23.519376 28960 solver.cpp:266] Iteration 2000, Testing net (#0)
I0504 16:18:35.585728 28960 solver.cpp:315] Test net output #0: accuracy = 0.6852
I0504 16:18:35.585774 28960 solver.cpp:315] Test net output #1: loss = 0.920548 (* 1 = 0.920548 loss)
I0504 16:18:35.765875 28960 solver.cpp:189] Iteration 2000, loss = 0.743887
I0504 16:18:35.765923 28960 solver.cpp:204] Train net output #0: loss = 0.743887 (* 1 = 0.743887 loss)
I0504 16:18:35.765940 28960 solver.cpp:464] Iteration 2000, lr = 0.001
I0504 16:19:21.532541 28960 solver.cpp:189] Iteration 2100, loss = 0.866103
I0504 16:19:21.532645 28960 solver.cpp:204] Train net output #0: loss = 0.866103 (* 1 = 0.866103 loss)
I0504 16:19:21.532667 28960 solver.cpp:464] Iteration 2100, lr = 0.001
I0504 16:20:04.737540 28960 solver.cpp:189] Iteration 2200, loss = 0.797212
I0504 16:20:04.737614 28960 solver.cpp:204] Train net output #0: loss = 0.797212 (* 1 = 0.797212 loss)
I0504 16:20:04.737627 28960 solver.cpp:464] Iteration 2200, lr = 0.001
I0504 16:20:40.654320 28960 solver.cpp:189] Iteration 2300, loss = 0.659485
I0504 16:20:40.654386 28960 solver.cpp:204] Train net output #0: loss = 0.659485 (* 1 = 0.659485 loss)
I0504 16:20:40.654399 28960 solver.cpp:464] Iteration 2300, lr = 0.001
I0504 16:21:16.076812 28960 solver.cpp:189] Iteration 2400, loss = 0.811878
I0504 16:21:16.076882 28960 solver.cpp:204] Train net output #0: loss = 0.811878 (* 1 = 0.811878 loss)
I0504 16:21:16.076894 28960 solver.cpp:464] Iteration 2400, lr = 0.001
I0504 16:21:50.666992 28960 solver.cpp:266] Iteration 2500, Testing net (#0)
I0504 16:21:59.957159 28960 solver.cpp:315] Test net output #0: accuracy = 0.6938
I0504 16:21:59.957201 28960 solver.cpp:315] Test net output #1: loss = 0.89744 (* 1 = 0.89744 loss)
I0504 16:22:00.098528 28960 solver.cpp:189] Iteration 2500, loss = 0.707217
I0504 16:22:00.098577 28960 solver.cpp:204] Train net output #0: loss = 0.707217 (* 1 = 0.707217 loss)
I0504 16:22:00.098589 28960 solver.cpp:464] Iteration 2500, lr = 0.001
I0504 16:22:35.216800 28960 solver.cpp:189] Iteration 2600, loss = 0.83809
I0504 16:22:35.216871 28960 solver.cpp:204] Train net output #0: loss = 0.83809 (* 1 = 0.83809 loss)
I0504 16:22:35.216883 28960 solver.cpp:464] Iteration 2600, lr = 0.001
I0504 16:23:10.688284 28960 solver.cpp:189] Iteration 2700, loss = 0.771752
I0504 16:23:10.688392 28960 solver.cpp:204] Train net output #0: loss = 0.771752 (* 1 = 0.771752 loss)
I0504 16:23:10.688405 28960 solver.cpp:464] Iteration 2700, lr = 0.001
I0504 16:23:45.953291 28960 solver.cpp:189] Iteration 2800, loss = 0.660784
I0504 16:23:45.953361 28960 solver.cpp:204] Train net output #0: loss = 0.660784 (* 1 = 0.660784 loss)
I0504 16:23:45.953374 28960 solver.cpp:464] Iteration 2800, lr = 0.001

Matlab代码如下

 %这个程序根据caffe输出的txt文档,读取数据,画图
clear;close all;clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fileName = 'record20150504.txt';%文件名
path = 'C:\Users\Dy\Desktop\';%路径 stepSizeTestLoss = ;%TestLoss数据的步长
stepSizeTrainLoss = ; %TrainLoss数据的步长
stepSizeTestAccuracy = ;%TestAccuracy数据的步长 maxIteration = ;%最大迭代量 %在cifar10模型中,在4000保存出一个中间变量,然后改变步长,再训练
%所以画图的过程中要去除掉一些重复的数值
%在迭代4000次保存中间变量后,再次调用的时候出现了一次重复
%%= + (0起始位置计算了一次) =
ignoreTestLoss = [];
%在snapshotting后4000次迭代,起始的地方就有一次计算TrainLoss。这和之前的重复了
%%=+(0起始位置计算了一次)=
ignoreTrainLoss = [];
%在snapshotting后4000次迭代,起始的地方就有一次计算Accuracy。这和之前的重复了
%%=+(0起始位置计算了一次)=
ignoreTestAccuracy = [];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fullPath = [path,fileName]; %由于数值的长短不固定,所以不能采用数组,故采用cell
trainLoss = {};
testLoss = {};
testAccuracy = {};
countTestLoss = ;%TestLoss的统计变量
countTrainLoss = ;%TrainLoss的统计变量
countTestAccuracy = ;%TestAccuracy的统计变量
startTestLoss = ;%TestLoss数据的起始点
startTrainLoss = ;%TrainLoss数据的起始点
startTestAccuracy = ;%TestLoss数据的起始点 fid = fopen(fullPath,'r');%默认以只读的方式打开一个txt文档
while ~feof(fid)% 判断是否为文件末尾
tempLine = fgetl(fid);% 从文件读行
%判断这行是否有‘loss = ’这项
locatLoss = strfind(tempLine,'loss = ');
if ~isempty(locatLoss)%判断是有loss
%由于各个loss的长短不固定,而且各种loss语句输出的长短不固定。
%所以编程考虑的角度如何保存各种loss的信息,而不是程序的运行效率
%输出共有Test net output #:;Iteration;Train net output #:三种类型
%而Iteration;Train net output #0信息相同
%但是必须以如下形式。并不是每一次‘Iteration XXX, loss = ’
%后都会出现‘Train net output #: loss = ’比如在smapshotting4000之前的
%第4000次计算的loss会忽略。虽然在后面一次会重新计算过一次,但是第5000次迭代的loss会丢失
%所以只能用下面的形式,才不然会遗漏信息
%其实这块查找,感觉如果熟悉正则表达式应该会方便很多。但发现好像各个不同语言,用正则表达式有些差别
%这已经记不住了,Matlab中用正则还没操练过。以后有机会来填坑
locatTrainLoss = strfind(tempLine,'Iteration ');
if ~isempty(locatTrainLoss)%判断是否为trainloss
trainTempLoss = tempLine(locatLoss+:end);
%之前用Train net output #: loss = 查询,遗留下来的。后发现遗漏信息舍弃。。
% trainTempLoss = strtok(trainTempLoss);
trainLoss(countTrainLoss) = {trainTempLoss};
countTrainLoss = countTrainLoss + ;
continue;%如果找到就不用运行下面的步骤了
end locatTestLoss = strfind(tempLine,'Test net output #1: loss =');
if ~isempty(locatTestLoss)%判断是否为testloss
testTempLoss = tempLine(locatLoss+:locatLoss+);
testTempLoss = strtok(testTempLoss);
testLoss(countTestLoss) = {testTempLoss};
countTestLoss = countTestLoss + ;
continue;%如果找到就不用运行下面的步骤了
end
end %由于caffe输出中的loss比较多,所以先进行判断,下面判断是否存在accuracy
locatAccuracy = strfind(tempLine,'accuracy =');
if ~isempty(locatAccuracy)
%由于这个准确率非固定长度,所以用了end
testTempAccuracy = tempLine(locatAccuracy+:end);
testAccuracy(countTestAccuracy) = {testTempAccuracy};
countTestAccuracy = countTestAccuracy + ;
end
end
fclose(fid);%关闭文本文件
fclose('all');%关闭所有连接,防止没关掉的情况 %由于上面程序中加入了countTestLoss countTrainLoss countTestAccuracy
%在caffe输出中都有一些中间重复项,这些都在ignore变量中标记出来了。
%所以分别减去下面这些量,得到了真实的总数据量
countTestLoss = countTestLoss - length(ignoreTestLoss);
countTrainLoss = countTrainLoss - length(ignoreTrainLoss);
countTestAccuracy = countTestAccuracy - length(ignoreTestAccuracy); %调用函数去除trainLoss中的多余数据
trainLoss = deleteCell(trainLoss,ignoreTrainLoss);
stepTrainLoss = [startTrainLoss:stepSizeTrainLoss:maxIteration];
tempTrainLoss = [];
for i=:length(trainLoss)
tempTrainLoss = [tempTrainLoss; str2double(trainLoss{i})];
end
figure;
plot(stepTrainLoss,tempTrainLoss,':bo');
axis([ ]);%axis([xmin xmax ymin ymax])控制坐标轴的范围和样式
xlabel('迭代次数');ylabel('Train损耗值');
title('TrainLoss');
legend('间隔:100');
grid on;%在图中添加网格线(虚线)
set(gcf,'NumberTitle','off');
set(gcf,'Name','TrainLoss'); %调用函数去除testLoss中的多余数据
testLoss = deleteCell(testLoss,ignoreTestLoss);
stepTestLoss = [startTestLoss:stepSizeTestLoss:maxIteration];
tempTestLoss = [];%用于保存把cell转换为double的
for i=:length(testLoss)
tempTestLoss = [tempTestLoss; str2double(testLoss{i})];
end
figure;
plot(stepTestLoss,tempTestLoss,':bo');
axis([ ]);%axis([xmin xmax ymin ymax])控制坐标轴的范围和样式
xlabel('迭代次数');ylabel('Test损耗值');
title('TestLoss');
legend('间隔:500');
grid on;%在图中添加网格线(虚线)
set(gcf,'NumberTitle','off');
set(gcf,'Name','TestLoss'); %调用函数去除testAccuracy中的多余数据
testAccuracy = deleteCell(testAccuracy,ignoreTestAccuracy);
stepTestAccuracy = [startTestAccuracy:stepSizeTestAccuracy:maxIteration];
tempTestAccuracy = [];%用于保存把cell转换为double的
for i=:length(testAccuracy)
tempTestAccuracy = [tempTestAccuracy; str2double(testAccuracy{i})*];
end
figure;
plot(stepTestAccuracy,tempTestAccuracy,':bo');
axis([ ]);%axis([xmin xmax ymin ymax])控制坐标轴的范围和样式
xlabel('迭代次数');ylabel('准确率(%)');
title('TestAccuracy');
legend('间隔:500');
grid on;%在图中添加网格线(虚线)
set(gcf,'NumberTitle','off');
set(gcf,'Name','TestAccuracy'); %trainLoss和TestLoss在一个图中一起显示
figure;
plot(stepTrainLoss,tempTrainLoss,':ko');
hold on;
plot(stepTestLoss,tempTestLoss,':bp');
axis([ ]);%axis([xmin xmax ymin ymax])控制坐标轴的范围和样式
xlabel('迭代次数');ylabel('损耗值');
title('TrainLoss和TestLoss');
legend('黑色trainLoss','蓝色testLoss');
grid on;%在图中添加网格线(虚线)
set(gcf,'NumberTitle','off');
set(gcf,'Name','TrainLoss和TestLoss');
hold off;

函数deleteCell

 function cellOutput=deleteCell(cellInput,delElement)
%由于caffe编程的过程,在更改学习率的时候会保存中间变量
%保存中间变量后,读取的数据就会有重复,所以要去除重复的数据
%这函数就是配合上面程序的编写的,显示各txt整的那么复杂,也是醉了
%cellInput输入的cell
%delElement删除的cell1中的元素的数组,默认这里面元素顺序是按照从小到大排列的
%cellOutput输出的处理后的cell %下面的程序编的太水了。感觉这个从一个数组中删除另一个数组中指定位置的元素应该是一个
%比较经典的基础问题,但自己也琢磨了一下才编出来。。
%百度了下也没找到经典程序。所以就凑合着用吧。。。
[~,cellTotal]=size(cellInput);
[~,delTotal]=size(delElement);
delNum=;%因为要不断定位delElement中的元素,先设一个变量来指定delElement中的元素
j=;%用来定位cellInput中的元素 cellOutputNum = cellTotal - delTotal;
for i=:cellOutputNum
if j < delElement(delNum)
cellOutput(i)= cellInput(j);%这里貌似可以优化,运行的时候看看
j=j+;
elseif j == delElement(delNum)
if delNum < delTotal
delNum = delNum+;
end
j=j+;
cellOutput(i)= cellInput(j);
j=j+;
else
cellOutput(i)= cellInput(j);
j=j+;
end
end

输出如下图

感觉caffe的各个版本不同,参考下 应该能编出来。编这代码也花了1天时间。感觉如果能一行一行读取txt的信息,其实 提取信息还是挺简单的。发现这编这样的代码 其实没啥意义,只不过多了解了一些Matlab的函数,不用matlab来编写算法,还是不能提高编程能力。虽然能起到一定的辅助学习作用。但最好还是直接去改caffe的源代码,这才是正道。我这版本的caffe输出只有trainloss、testloss、testaccuracy。经网友 无可取代 提醒。感觉 不能看到 trainaccuracy 是个缺陷。但这个就要靠以后去改代码了。现在想想这可能也是作者考虑,如果在训练阶段考虑了trainaccuracy,是不是会导致训练的时间太长。编了一天程序,也算一天没浪费:)

从这也能发现,这可视化是 很重要的。

Matlab读取cifar10 train_quick.sh输出txt中信息的更多相关文章

  1. JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; ...

  2. matlab读取内容为二进制的TXT文件

    本方法同样适合读取十六进制和二进制以外的其他进制文件,txt使用一个最简单的命令就可以读取 textread 这是一个十分有用,简便的函数(对于fopen fscanf而言)读取二进制txt文件:假如 ...

  3. 编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    package zuoye; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; pub ...

  4. matlab如何连同换行也输入txt中

    \r是回车符,\n是换行符,两者结合方能在txt显示为换行 fidID = fopen('test.txt', 'w+'); str='string'; fprintf(fidID,'%s \r\n' ...

  5. 1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  6. matlab读取excel文件中的数据

    1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...

  7. Matlab读取txt中用空格分隔的数据文件到矩阵

    转载...哪儿 忘记了 由于要做的项目中涉及到数据处理,初涉及到matlab.今天需要把一组只用空格分开的数据读取到一个三维矩阵,然后对这个矩阵进行处理. 思路是:首先用importdata读入txt ...

  8. matlab读取txt文本

    textread函数 原文:http://blog.sina.com.cn/s/blog_618af1950100k926.html 文档:https://ww2.mathworks.cn/help/ ...

  9. 黑马基础阶段测试题:通过字符输入流读取info.txt中的所有内容,每次读取一行,将每一行的第一个文字截取出来并打印在控制台上。

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

随机推荐

  1. 在Eclipse上搭建Cocos2d-x的Android开发环境

    很多其它相关内容请查看本人博客:http://www.bokeyi.com/ll/category/cocos2d-x/ 本文的搭建方法是最新最正确的方法,好多朋友反映搭建eclipse交叉编译环境非 ...

  2. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  3. Java基础知识强化之集合框架笔记54:Map集合之HashMap集合(HashMap<String,String>)的案例

    1. HashMap集合 HashMap集合(HashMap<String,String>)的案例 2. 代码示例: package cn.itcast_02; import java.u ...

  4. 基于bootstrap面板的类别多选栏

    1.html部分 <div class="panel panel-default"> <div class="panel-heading"&g ...

  5. python: pandas模块

    10分钟入门 pandas 评:我跟作者的智商差距是有多大,才能让我用60分钟看完作者认为10分钟的内容... 详细内容见 Cookbook 习惯上我们先导入 : In [1]: import pan ...

  6. (转)ie浏览器判断

    常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测. var isIE=!!window.ActiveXObject; var isIE6 ...

  7. 两种隐藏元素方式【display: none】和【visibility: hidden】的区别及由此引出的问题

    此前看到一随笔(@任天缘 原文)讲了这个问题,并总结了: [display: none]:隐藏元素及元素内的所有内容,并且该元素的位置.宽高等其他属性值一并“消失”: [visibility: hid ...

  8. 枚举N行N列的自然数列

    数据库环境:SQL SERVER 2005 现有一个需求,要枚举1-50个自然数,分10行5列展示.如图,

  9. UIKit Animation

    UIKit Animation 1.属性动画 - (void)changeFrameAnimation { [UIView beginAnimations:@"frameAnimation& ...

  10. WPF常用控件应用demo

    WPF常用控件应用demo 一.Demo 1.Demo截图如下: 2.demo实现过程 总体布局:因放大缩小窗体,控件很根据空间是否足够改变布局,故用WrapPanel布局. <ScrollVi ...