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**

50000的3D数组;
images = loadMNISTImages('train-images-idx3-ubyte');

%读完后,labels为一个50000*

1的数组;
labels = loadMNISTLabels('train-labels-idx1-ubyte');

% reshape images to -

D: [rows,col,channel,numbers]

trainData=reshape(images,[   size(images,)]);

%

 permute to [cols,rows,channel,numbers]

trainData=permute(trainData,[   ]);

%

 permute lables to [labels, number of labels ]

trainLabels=permute(labels,[,]);

%

 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: 256x1x1x200
MaxSize: 256x1x1x200
Datatype: H5T_IEEE_F64LE (double)
ChunkSize: []
Filters: none
FillValue: 0.000000
Dataset 'label'
Size: 1x200
MaxSize: 1x200
Datatype: H5T_IEEE_F64LE (double)
ChunkSize: []
Filters: none
FillValue: 0.000000

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

 layer {
name: "mnist"
type: "HDF5Data"
top: "data" //一定要和上面的dataset的名字一样哦;
top: "label"
include {
phase: TRAIN
}
hdf5_data_param {
source: "mydata/train_list.txt" //是个坑哦,下面下面解释;
batch_size:
}

注意:

第一,再生成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

在caffe中使用hdf5的数据的更多相关文章

  1. caffe 中如何打乱训练数据

    第一: 可以选择在将数据转换成lmdb格式时进行打乱: 设置参数--shuffle=1:(表示打乱训练数据) 默认为0,表示忽略,不打乱. 打乱的目的有两个:防止出现过分有规律的数据,导致过拟合或者不 ...

  2. (原)caffe中通过图像生成lmdb格式的数据

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...

  3. caffe 中 python 数据层

    caffe中大多数层用C++写成. 但是对于自己数据的输入要写对应的输入层,比如你要去图像中的一部分,不能用LMDB,或者你的label 需要特殊的标记. 这时候就需要用python 写一个输入层. ...

  4. 【转】Caffe初试(四)数据层及参数

    要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等,而一个模型由多个层(layer)构成,每一层又由许多参数组成.所有的参数都定义在caffe.proto这个文件中 ...

  5. caffe中各层的作用:

    关于caffe中的solver: cafffe中的sover的方法都有: Stochastic Gradient Descent (type: "SGD"), AdaDelta ( ...

  6. 【神经网络与深度学习】如何在Caffe中配置每一个层的结构

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

  7. caffe中python接口的使用

    下面是基于我自己的接口,我是用来分类一维数据的,可能不具通用性: (前提,你已经编译了caffe的python的接口) 添加 caffe塻块的搜索路径,当我们import caffe时,可以找到. 对 ...

  8. (原)torch和caffe中的BatchNorm层

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6015990.html BatchNorm具体网上搜索. caffe中batchNorm层是通过Batc ...

  9. CAFFE中训练与使用阶段网络设计的不同

    神经网络中,我们通过最小化神经网络来训练网络,所以在训练时最后一层是损失函数层(LOSS), 在测试时我们通过准确率来评价该网络的优劣,因此最后一层是准确率层(ACCURACY). 但是当我们真正要使 ...

随机推荐

  1. zepto源码--核心方法6(显示隐藏)--学习笔记

    在不引入zepto插件模块fx_metho其他ds的情况下,zepto默认的显示隐藏的函数只有show, hide, toggle,这里解释有个前提条件,就是没有引入zepto的fx_methods插 ...

  2. cocos2dx 3.x(屏幕截图的两种方法)

    [RenderTexture] RenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片. 屏幕截图主要步骤: > 开始截图:render->begin(); >  ...

  3. iOS,视图控制器相关(UIViewController)

    1.视图控制器各个方法调用时机 2.选项卡(Tab Bar)和导航栏(Navigation Bar) 3.有无控制器的页面跳转 4.页面跳转隐藏底部选项卡 5.获取导航栏和状态栏高度,隐藏导航栏返回按 ...

  4. sql sp_xml_preparedocument 函数运用实例

    表结构: CREATE FUNCTION f_splitSTR( ), --待分拆的字符串 ) --数据分隔符 ))) AS BEGIN --创建分拆处理的辅助表(用户定义函数中只能操作表变量) DE ...

  5. linux vagrant visual box 虚拟机比较慢

    提现在跑本地虚拟机开发环境很慢,直接影响工作效率,网上搜了,亲测可用. cite:     http://leo108.com/pid-2072.asp 在 vagrantfile中加入 config ...

  6. Bug测试报告--连连看——天天向上

    测试时间:2016-11-23 20:10 测试者:刘芳芳(nice!团队) 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git. ...

  7. org.eclipse.jdi.TimeoutException: Timeout occurred while waiting for packet 421. occured resuming VM.

    环境: 导入excel的时候,会根据路径,读取EXCEL的数据. 原因: 电脑上的防火墙关闭

  8. MVC中return File(byte[],"image/jpeg")输入图片不清晰

    MVC中需要输入图片的时候有一个便捷的方法,return File(byte[],"image/jpeg"); 但是这样处理的图片很不清晰(特别是要进行缩放,DrawImage,D ...

  9. Maven打包pom里面配置exclude 排除掉环境相关的配置文件

    Maven打包pom里面配置exclude 排除掉环境相关的配置文件 有几种方式:1. 打包时,指定环境参数把环境的配置文件复制过去2. 不打包所有的环境相关的配置文件,直接由运维的人维护 可以在上传 ...

  10. 1350. Primary Arithmetic

    Children are taught to add multi-digit numbers from right-to-left one digit at a time.  Many find th ...