Matlab读取cifar10 train_quick.sh输出txt中信息
感谢 网友 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中信息的更多相关文章
- JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; ...
- matlab读取内容为二进制的TXT文件
本方法同样适合读取十六进制和二进制以外的其他进制文件,txt使用一个最简单的命令就可以读取 textread 这是一个十分有用,简便的函数(对于fopen fscanf而言)读取二进制txt文件:假如 ...
- 编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
package zuoye; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; pub ...
- matlab如何连同换行也输入txt中
\r是回车符,\n是换行符,两者结合方能在txt显示为换行 fidID = fopen('test.txt', 'w+'); str='string'; fprintf(fidID,'%s \r\n' ...
- 1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...
- matlab读取excel文件中的数据
1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...
- Matlab读取txt中用空格分隔的数据文件到矩阵
转载...哪儿 忘记了 由于要做的项目中涉及到数据处理,初涉及到matlab.今天需要把一组只用空格分开的数据读取到一个三维矩阵,然后对这个矩阵进行处理. 思路是:首先用importdata读入txt ...
- matlab读取txt文本
textread函数 原文:http://blog.sina.com.cn/s/blog_618af1950100k926.html 文档:https://ww2.mathworks.cn/help/ ...
- 黑马基础阶段测试题:通过字符输入流读取info.txt中的所有内容,每次读取一行,将每一行的第一个文字截取出来并打印在控制台上。
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
随机推荐
- 在JBoss中部署GeoServer
GeoServer一直就不能在 JBoss应用服务器中正常部署.最近我在一个国外的论坛上找到了该问题的解决方案.以下方法经测试,可以将GeoServer 2.1.3 成功部署在 JBoss 5.0 和 ...
- Java实现简单版SVM
Java实现简单版SVM 近期的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的. 之所以说是简单版,由于没实用到拉格朗日,对偶,核函数等等.而 ...
- AndroidManifest.xml解释说明和android的启动过程
1.android清单文件:AndroidManifest.xml 说明如下: <?xml version="1.0" encoding="utf-8"? ...
- c# 前端写代码的情况
<%for(int i=0;i<list_model.Count;i++) { %> <div style=" padding-left:35px;padding-r ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(一)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- tomcat中jsp编译
tomcat运行的工程中,jsp替换文件后可能不起作用.原因是jsp也是需要编译的.编译后的文件存放在tomcat/work文件夹下.如果替换不起作用,可以将work文件夹下的内容删除掉,重新启tom ...
- Android SQLite ORM框架greenDAO在Android Studio中的配置与使用
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 说明 greenDAO是安卓中处理SQLite数据库的一个开源的库,详情见其官网:我是官网 详 ...
- virtualbox共享文件夹无访问权限问题解决方法
virtualbox共享文件夹无访问权限问题解决方法 早就困扰了,这次新装虚拟机又碰到了,记录下来. 这篇文章主要介绍了virtualbox共享文件夹无访问权限问题解决方法,造成这个问题的原因是不跟v ...
- 使用switch case语句来显示月份的对应天数
方法一:控制台输入月份 package com.liaojianya.chapter1; import java.util.Scanner; /** * This program demonstrat ...
- #pragma——push and pop
#pragma warning(push) #pragma warning(pop) 这两个语句在#include <SDKDDKVer.h>头文件中出现,处于好奇,查看msdn文档有了进 ...