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

在caffe中使用hdf5的数据相关推荐

  1. 在caffe 中添加Crowd counting 数据层

    #目录 [TOC] 一.简介 Crowd counting一般以人群图像作为输入,网络回归该图像对应的密度图.以往做法是先在matlab中根据图像的label(人头位置)生成密度图,然后将输入图像及密 ...

  2. caffe中HDF5层及数据生成

    HDF 文件结构包括一个file id(文件号).至少一个 data descriptor (数据描述符).没有或多个 data element(数据内容)数据内容. file id (文件号)是一个 ...

  3. 【Python基础】在pandas中利用hdf5高效存储数据

    1 简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式. 其文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一 ...

  4. Python应用实战-在pandas中利用hdf5高效存储数据

    1 简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式. 其文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一 ...

  5. Caffe中的数据填充类Filler

    数据填充类caffe::Filler Filler是一个数据填充类,采用特定的随机算法对Blob数据进行初始化.假设需要填充的变量为 W \boldsymbol{W}. caffe提供常用的填充算法有 ...

  6. caffe中各层的作用

    caffe中各层的作用: 关于caffe中的solver: cafffe中的sover的方法都有: Stochastic Gradient Descent (type: "SGD" ...

  7. 怎么在Caffe中配置每一个层的结构

    如何在Caffe中配置每一个层的结构 最近刚在电脑上装好Caffe,由于神经网络中有不同的层结构,不同类型的层又有不同的参数,所有就根据Caffe官网的说明文档做了一个简单的总结. 1. Vision ...

  8. caffe中的layer

    layer是神经网络搭建的脚手架,理解了layer,才能盖好神经网络这座摩天大楼. 下图是一张关于layer的思维导图,在功力到达一定程度的时候才可练此功,到时一定会有不一样的收获. 1. Outli ...

  9. Caffe学习(四)数据层及参数设置

    caffe的各种数据层在caffe.proto文件中有定义.通过对定义的caffe.proto文件进行编译,产生支持各种层操作的c++代码.后面将会详细解读caffe.proto文件(在caffe里就 ...

最新文章

  1. MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限...
  2. String indexOf 算法
  3. 【ICCV-2019】ACNet:通过非对称卷积块增强CNN的核骨架 3*3卷积==>1*3卷积+3*1卷积=白给的精度提升
  4. 将DataTable 存到一个集合当中
  5. Shell Notes(1)
  6. python requests https_解决python的requests模块访问私有SSL证书产生的报错问题
  7. python异步框架twisted_Python学习八十七天:使用异步的twisted框架写入数据
  8. 什么是Web Service
  9. 通过一个小Trick实现shader的像素识别/统计操作
  10. python同步远程文件夹_利用python实现两个文件夹的同步
  11. BootStrap:基础学习
  12. python ndimage_Python ndimage.zoom方法代码示例
  13. pad 迅雷 bt php_iOS永久版迅雷来了 BT、磁力链下载最全教程收好
  14. win10易升_史上最稳定的win10版本,四大更新内容强势来袭,你敢升级吗?
  15. pci-e服务器显卡性能,PCI-E插槽速度可影响游戏性能
  16. 蓝桥杯就要开赛了,填空题还不会?我教你一篇学会填空题,从此填空满分,信心大涨
  17. 1024_scsdn_徽章获取日_日常工作记录_百度图片爬取小程序
  18. ubuntu16.04笔记本查看电脑配置(CPU,显卡,内存,硬盘)
  19. 推断统计学 假设检验 显著性检验 第一类错误 第二类错误
  20. Linux命令-samba服务器和防火墙

热门文章

  1. element-ui的表单校验;el-form表单校验;el-form表单自定义校验;手机号校验;车牌号校验;车牌号正则校验;
  2. 存储技术与iSCSI
  3. 前端学习(3290):react hook state-hook传入对象
  4. 前端学习(3271):js中this的使用
  5. 前端学习(3270):js中this的使用call bind
  6. [css] :placeholder-shown和:focus-within这两个伪类你有使用过吗?说说看
  7. [vue-cli]不用vue-cli,你自己有搭建过vue的开发环境吗?流程是什么?
  8. 前端学习(1689):前端系列javascript之如何搞定面试题
  9. 企业网站前端制作实战教程 JQuery CSS JS HTML 登录表单验证
  10. 前端学习(977):本地存储导读