在caffe中使用hdf5的数据

caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源代码,好像是把我们的数据变为Datum的格式(这是一个用google protocol buffer搞的一个数据结构类),然后再把它存为lmdb文件。在Datum里面,label为Int类型,要是我们label为符点数,我还怎么用??(不过看到Datum里面有个float_data的东西,怎么用啊,不懂)。好吧,费了一劲想把转换Mnist的程序为我用,是有点成功,不过太麻烦,好像不怎么好使。   最后,用hdf5格式的数据吧。好在网络有好多资料哦,牛逼的人好多的哦,我实在是很膜拜他们。下面说说怎么转。我用的是matlab转,网络也有好多用python程序的。

 

以转Mnist 为例,我们以后可以照着写出自己的来。

%读入训练数据,下面的函数loadMNISTImages是一个自己的函数,如果你想要的话,可以去gitbub上下载(看 %参考文献里有, 读完以后,这时,images为一个28*28*
50000的3D数组;
images = loadMNISTImages('train-images-idx3-ubyte');
%读完后,labels为一个50000*
1的数组;
labels = loadMNISTLabels('train-labels-idx1-ubyte');
% reshape images to 4-
D: [rows,col,channel,numbers]trainData=reshape(images,[28 28 1 size(images,2)]);
%
 permute to [cols,rows,channel,numbers]trainData=permute(trainData,[2 1 3 4]);
%
 permute lables to [labels, number of labels ]trainLabels=permute(labels,[2,1]);
%
 create database
%注意,这是的/data与/label表示文件里的dataset.当我们定义.proto文件的网络时,一定要注意:top:分别也要为data和label.
h5create('train.hdf5','/data',size(trainData),'Datatype','double');h5create('train.hdf5','/label',size(trainLabels),'Datatype','double');h5write('train.hdf5','/data',trainData);h5write('train.hdf5','/label',trainLabels);
% same for test data

 

生成文件以后,可以通过h5disp(’文件名‘)看看里面的东西。下面是我自己生成的文件里的内容,不是上面生成的哦;

>> h5disp('train.hdf5')
HDF5 train.hdf5 
Group '/' Dataset 'data' Size:  256x1x1x200MaxSize:  256x1x1x200Datatype:   H5T_IEEE_F64LE (double)ChunkSize:  []Filters:  noneFillValue:  0.000000Dataset 'label' Size:  1x200MaxSize:  1x200Datatype:   H5T_IEEE_F64LE (double)ChunkSize:  []Filters:  noneFillValue:  0.000000

 

再往下,就是.proto文件里的data的定义了,下面是我的定义自己的:

2 layer {3   name: "mnist"4   type: "HDF5Data"5   top: "data"        //一定要和上面的dataset的名字一样哦;6   top: "label"7   include {8     phase: TRAIN9   }13   hdf5_data_param {14     source: "mydata/train_list.txt"    //是个坑哦,下面下面解释;15     batch_size: 20017   }

 

注意:

第一,再生成HDF5文件时,一定要注意数组的维度关系,很敏感的,如,把1*50000写为了50000*1肯定会出错的。在caffe中,数据都是以4维出现的。(我记得python与matlab里的维度是正反的,python与C语言中都是rowmajor, matlab中是 column-major, 相应的就是, matlab是一组维度中,左边的数字变化最快,,而python中为右边。好像是这样的)

第二,生成的HDF5的dataset的名称一定要与你后面定义的.proto文件里的data层的top:后面的名称(即输出的名称)一样啊,要不出错,找不到数据的)。

第三,在定义.proto文件里的data层时注意,hdf5_data_param的source不要直接写我们生成的HDF5文件的路径,而是写一个.txt文件的,并在.txt文件里写入你生成的HDF5文件的路经,一个HDF5文件路径占一行,一定要这样哦。原因是因为,我们可以要读入多个HDF5文件,所以要这样写哦。

第四,生成的HDF5文件一般都很大,如果是图片的话,可以很多的,HDF5Data layer不能按照batch来从磁盘上读取数据,只能一次性把所有数据从h5文件中读到内存中,如果出错了,很可以你的内存不够了哦;

第五,HDF5Data layer不支持预处理功能。

 

一开始吧, 我老是想一个总是,当读取HDF5文件时,它是怎么知道包含有多少个数据的,现在想想,HDF5文件肯定写入了相关的数据结构相关的内容啊,看看上面的h5disp()的输出,我们就知道啦。

其实上面这个问题,我一开始是在想使用lmdb文件时,它把数据写入的Datum中,在Datum文件中,放数据的为bytes格式,我再想,它怎么知道一个数据占多少个byte的呢??Datum里也没有这个选项。现在还是不明白,如果这个问题明白了,我就可以把数据转为lmdb文件了,但是我始终没有找到由datum变为数据的源代码呢??

如果好心人看到了,请帮我解答一下子哦;

 

 

 

 

参考:

https://github.com/mravendi/caffe-mnist-hdf5

http://blog.csdn.net/langb2014/article/details/53065153

http://blog.csdn.net/u010417185/article/details/53047096

 

转载于:https://www.cnblogs.com/yinheyi/p/6083855.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS 调用外部DLL时提示“无法嵌入互操作类型”

右击引用的类库,属性——双击嵌入互操作类型(改为false)即可

fckeditor for php 下载,FCKeditor2.3 For PHP 详细整理的使用参考

参考一首先到:http://www.fckeditor.net去下载FCKeditor放到网站根目录。精简说明:删除所有"_"开头的文件和文件夹删除语言包中除中文和英文以外的语言删除skin目录下除默认皮肤以外的文件夹filemanager/browser/default/connectors/目录下除php以外的文件…

【iCore3应用开发平台】发布 iCore3 应用开发平台出厂代码rev0.0.2

iCore3开发平台固件版本信息【stm32f407】:iCore3 ARM程序 固件版本:rev0.0.2.build005 编译日期:2016/11/19 版本说明: 1、优化示波器直流偏置校准(上电检测不到校准文件则自动标准) 2、优化触摸部分代码&…

java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作

本问题已经有最佳答案,请猛点这里访问。当我做一个收藏.同步DMAP(Somehashmap)时,所有的都可以进入同步地图吗?还是只写同步操作?如果从地图上读到两条线怎么办?威尔是同步的吗?似乎有必要如果一个螺纹被放…

sqlserver备份还原后数据库关系图无法显示问题

执行该条sql语句后就行了 EXEC sp_changedbowner sa

php.ini 安全配置

(1) 打开php的安全模式 php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认…

mac 删除php56 安装php72,mac php56升级php70

//安装PHP7命令:$ brew install php70//删掉以前安装的PHP5.6//你可以根据自己的情况来修改命令:$ brew unlink php56命令:$ brew link php70//大功告成$ php -v PHP 7.0.0(cli) (built:Dec2 2015 13:06:23) ( NTS )Copyright(c) 1997-2015 T…

sqlserver注释巧清理

生成表创建语句 Excel公式过滤EXEC sys.sp_addextendedproperty IF(LEFT(A1,9)"EXEC sys.",A1,"") 正则替换EXEC sys.sp_addextendedproperty \nameNMS_Description, \valueN[^]? ,EXEC sys.sp_dropextendedproperty \nameNMS_Description, 删除数据库关…

CMS收集器

CMS收集周期CMS并非没有暂停,而是用两次短暂停来替代串行标记整理算法的长暂停,它的收集周期是这样:初始标记(CMS-initial-mark) -> 并发标记(CMS-concurrent-mark) -> 重新标记(CMS-remark) -> 并发清除(CMS-concurrent-sweep) -&g…

php删除二位数组相同元素,删除去除二维数组中相同元素与数组重复值实例-PHP源码...

《script》ec(2);《script》$list array(array(id>107,title>aaa),array(id>106,title>bbb),array(id>105,title>ccc),array(id>104,title>ccc),array(id>103,title>ddd),array(id>102,title>eee),array(id>101,title>fff),);funct…

Sql Server中查看/修改identity(自增列)的值

查看某个表中的自增列当前的值:DBCC CHECKIDENT (TableName) 修改某个表中的自增列当前的值:DBCC CHECKIDENT (TableName, RESEED, value) 比如我要把 Division 表中的 自增列 的当前值改为 30 可以用如下命令 DBCC CHECKIDENT (Divisio…

activiti jbpm相关资源

Activiti 5.16 用户手册 http://www.mossle.com/docs/activiti/index.html jBPM 4.4开发指南 http://www.mossle.com/docs/jbpm4devguide/html/index.html head first process 深入浅出流程 http://blog.csdn.NET/ronghao100/article/category/662142 Fixflow引擎解析(一)(介绍…

matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

原文链接:http://tecdat.cn/?p15508绘制ROC曲线通过Logistic回归进行分类加载样本数据。load fisheriris通过使用与versicolor和virginica物种相对应的度量来定义二元分类问题。pred meas(51:end,1:2);定义二进制响应变量。resp (1:100)>50; % Versicolor 0,…

4400php兑换美金是多少,美金换算人民币怎么算(美金换人民币怎样计算)

这些东西我真的不懂 教我怎么计算就可以了你手上是现金的话就用 美元数乘以现钞买入价人民币数 如果是国外汇过来的现汇(存在账户里) 就用美元数乘以现汇买入价人民币数 具体牌价请看中国银行牌价 http://.按当天汇率计算啊。 比如说你有一百美元, 今天的汇率是687.…

Xcode8更新约束

Xcode升级之后就会发现约束设置好,想更新一下约束,看看约束是不是刚刚好,习惯性的去点右下角的更新约束的结果却发现没有更新约束的这一项了,好尴尬。 后来发现原来在Xcode8的约束更新换了一个地方,并不是在原来的右下…

VS2010如何在编辑器自动换行

1.在“工具”菜单上选择“选项”。 2.在“文本编辑器”文件夹中,选择“所有语言”子文件夹中的“常规”选项,以便在全局设置此选项。 - 或 - 在您所使用的编程语言的子文件夹中,选择“常规”选项。 3.在“设置”下,选择或清除“自…

ie 调用java的时候报错,调用javabean的非常郁闷的异常。

当前位置:我的异常网 Java Web开发 调用javabean的非常郁闷的异常。调用javabean的非常郁闷的异常。www.myexceptions.net 网友分享于:2013-09-12 浏览:18次调用javabean的非常郁闷的错误。。急!!!我已经做了测试 …

WinForm------GridControl单元格内容修改外表样式

private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) {if (e.Column.FieldName "Examine"){if (e.DisplayText.Equals("已审批")){e.Appearance.ForeColor Color.Red;}else{e.Appearan…