博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
caffe上使用hdf5格式文件以及回归(regression)问题
阅读量:4647 次
发布时间:2019-06-09

本文共 1927 字,大约阅读时间需要 6 分钟。

最近用caffe做了一下regression问题,先用data layer中的data,float_data试了一下,data用来存放图片,float_data存放regression的values,label存放标签,发现不行,因为float_data和label这俩是指向同一块内存,两者不能共存,除非改caffe源码。我又仔细看了一下caffe的源码,发现我这个地方说的不对,具体来讲,caffe读取image和label是这样一个流程:

1.编写程序将image和label转换成Datum格式,并写入lmdb

2.Data layer从lmdb中读取Datum格式的数据,然后转化成一个Batch

3.从Batch里面把image和label的数据复制到top的内存或显存

上述的2,3步可以查看data_layer.cpp,base_data_layer.cpp和base_data_layer.cu这三个文件,里面和float_data半点关系都没有,所以就算你把regression values保存在Datum的float_data里面,Data layer也不会把它读出来的。我目前想到的办法只有两种,要么改caffe源码,要么lmdb和hdf5一起用,源码怕改出错,就尝试了一下hdf5格式做输入,虽然搞定了,但也有坑。

说一下怎么把数据写入hdf5文件,我用的是python,numpy格式的数组可以直接存放进去,方法如下:

#1. 先创建一个空的numpy数组hdf_data = np.zeros((len(all_samples), num), dtype=np.float32)#2. 填充hdf_data# 3.打开h5文件然后写入hdf_datah5_file = h5py.File(h5_path, 'w')h5_file.create_dataset('hdf_data', data=hdf_data)h5_file.close()# 把h5文件路径写到一个txt中h5txt_file = open(h5txt_path, 'w')h5txt_file.write(h5_path)h5txt_file.close()

在定义网络的prototxt文件中,这样使用

layer {   name: "hdf5_data"   type: "HDF5Data"   top: "hdf_data"   include {     phase: TRAIN   }   hdf5_data_param {     source: "your_h5txt_file_path"     batch_size: 1024   } }

其中source是那个只有一行的txt的路径。top是你需要使用的h5中保存的数据块名称。

需要注意的是,如果是图像数据,预处理要先做,再存进h5文件,因为HDF5Data layer不支持预处理功能。另外这里有个坑,尽量不要把图片放在h5文件中,因为HDF5Data layer不能按照batch来读取数据,只能一次性把所有数据从h5文件中读到内存中,如果h5文件非常大,就会报错,具体是挂在HDF5Data的实现代码中了,有一个数据大小的断言。所以既不想改caffe代码又想保证训练程序能跑起来的方法如下:

把regression values按照hdf5格式存放,image和label按照正常数据存放在lmdb即可。在定义网络的prototxt中可以读取不同来源的数据,例如下面这种方法:

layer {  name: "lmdb_data"  type: "Data"  top: "data"  top: "label"  include {    phase: TRAIN  }  data_param {    source: "train_data"    batch_size: 1024    backend: LMDB  }  transform_param {  	mean_value: 128  	scale: 0.0078125  }}layer {  name: "hdf5_data"  type: "HDF5Data"  top: "bbox"  include {    phase: TRAIN  }  hdf5_data_param {    source: "hdf5_train.txt"    batch_size: 1024  }}

 

 

 

转载于:https://www.cnblogs.com/hrlnw/p/5824780.html

你可能感兴趣的文章
HTPJ 1268 GCD
查看>>
hdu2063 匈牙利算法 二分最大匹配模版题
查看>>
工作中的一些经验小结
查看>>
百度地图JavaScript API如何在同一页面显示多个地图?
查看>>
揭秘快速提升alexa排名的18种有效方法-2 -#来秀美#
查看>>
计算机专业及软件开发推荐书籍
查看>>
《Java程序设计》 课程教学
查看>>
Lambda--持续学习中
查看>>
简单谈谈面向对象和面向过程的区别
查看>>
Intellij IDEA 配置Tomcat远程调试
查看>>
python3 进程和线程(一)
查看>>
python-综合练习题(if条件语句,while循环,奇数偶数
查看>>
C语言基础-第三章
查看>>
PowerDesigner教程系列(一)概念数据模型
查看>>
python常用类库总结
查看>>
题解 CF962C 【Make a Square】
查看>>
只读数据文件损坏恢复
查看>>
k8s集群上线web静态网站
查看>>
【转】Impala和Hive的关系
查看>>
IDEA操作git
查看>>