在caffe中使用hdf5的数据
caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源代码,好像是把我们的数据变为Datum的格式(这是一个用google protocol buffer搞的一个数据结构类),然后再把它存为lmdb文件。在Datum里面,label为Int类型,要是我们label为符点数,我还怎么用??(不过看到Datum里面有个float_data的东西,怎么用啊,不懂)。好吧,费了一劲想把转换Mnist的程序为我用,是有点成功,不过太麻烦,好像不怎么好使。 最后,用hdf5格式的数据吧。好在网络有好多资料哦,牛逼的人好多的哦,我实在是很膜拜他们。下面说说怎么转。我用的是matlab转,网络也有好多用python程序的。
以转Mnist 为例,我们以后可以照着写出自己的来。
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
在caffe中使用hdf5的数据相关推荐
- 在caffe 中添加Crowd counting 数据层
#目录 [TOC] 一.简介 Crowd counting一般以人群图像作为输入,网络回归该图像对应的密度图.以往做法是先在matlab中根据图像的label(人头位置)生成密度图,然后将输入图像及密 ...
- caffe中HDF5层及数据生成
HDF 文件结构包括一个file id(文件号).至少一个 data descriptor (数据描述符).没有或多个 data element(数据内容)数据内容. file id (文件号)是一个 ...
- 【Python基础】在pandas中利用hdf5高效存储数据
1 简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式. 其文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一 ...
- Python应用实战-在pandas中利用hdf5高效存储数据
1 简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式. 其文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一 ...
- Caffe中的数据填充类Filler
数据填充类caffe::Filler Filler是一个数据填充类,采用特定的随机算法对Blob数据进行初始化.假设需要填充的变量为 W \boldsymbol{W}. caffe提供常用的填充算法有 ...
- caffe中各层的作用
caffe中各层的作用: 关于caffe中的solver: cafffe中的sover的方法都有: Stochastic Gradient Descent (type: "SGD" ...
- 怎么在Caffe中配置每一个层的结构
如何在Caffe中配置每一个层的结构 最近刚在电脑上装好Caffe,由于神经网络中有不同的层结构,不同类型的层又有不同的参数,所有就根据Caffe官网的说明文档做了一个简单的总结. 1. Vision ...
- caffe中的layer
layer是神经网络搭建的脚手架,理解了layer,才能盖好神经网络这座摩天大楼. 下图是一张关于layer的思维导图,在功力到达一定程度的时候才可练此功,到时一定会有不一样的收获. 1. Outli ...
- Caffe学习(四)数据层及参数设置
caffe的各种数据层在caffe.proto文件中有定义.通过对定义的caffe.proto文件进行编译,产生支持各种层操作的c++代码.后面将会详细解读caffe.proto文件(在caffe里就 ...
最新文章
- MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限...
- String indexOf 算法
- 【ICCV-2019】ACNet:通过非对称卷积块增强CNN的核骨架 3*3卷积==>1*3卷积+3*1卷积=白给的精度提升
- 将DataTable 存到一个集合当中
- Shell Notes(1)
- python requests https_解决python的requests模块访问私有SSL证书产生的报错问题
- python异步框架twisted_Python学习八十七天:使用异步的twisted框架写入数据
- 什么是Web Service
- 通过一个小Trick实现shader的像素识别/统计操作
- python同步远程文件夹_利用python实现两个文件夹的同步
- BootStrap:基础学习
- python ndimage_Python ndimage.zoom方法代码示例
- pad 迅雷 bt php_iOS永久版迅雷来了 BT、磁力链下载最全教程收好
- win10易升_史上最稳定的win10版本,四大更新内容强势来袭,你敢升级吗?
- pci-e服务器显卡性能,PCI-E插槽速度可影响游戏性能
- 蓝桥杯就要开赛了,填空题还不会?我教你一篇学会填空题,从此填空满分,信心大涨
- 1024_scsdn_徽章获取日_日常工作记录_百度图片爬取小程序
- ubuntu16.04笔记本查看电脑配置(CPU,显卡,内存,硬盘)
- 推断统计学 假设检验 显著性检验 第一类错误 第二类错误
- Linux命令-samba服务器和防火墙
热门文章
- element-ui的表单校验;el-form表单校验;el-form表单自定义校验;手机号校验;车牌号校验;车牌号正则校验;
- 存储技术与iSCSI
- 前端学习(3290):react hook state-hook传入对象
- 前端学习(3271):js中this的使用
- 前端学习(3270):js中this的使用call bind
- [css] :placeholder-shown和:focus-within这两个伪类你有使用过吗?说说看
- [vue-cli]不用vue-cli,你自己有搭建过vue的开发环境吗?流程是什么?
- 前端学习(1689):前端系列javascript之如何搞定面试题
- 企业网站前端制作实战教程 JQuery CSS JS HTML 登录表单验证
- 前端学习(977):本地存储导读