最近用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_data
h5_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
}
}


caffe上使用hdf5格式文件以及回归(regression)问题的更多相关文章

  1. 在VMD上可视化hdf5格式的分子轨迹文件

    技术背景 在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件.因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题.现有的比较常见的方式,大 ...

  2. SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件

    问题: SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件 需要下载副本才能显示AI格式 解决办法有两个: 第一种,在客户端机器1. Click Start, click R ...

  3. js 上传txt格式文件

    判断文件是否为.txt格式: $(".delbao .file").on("change",function(){ var acceptType = $(thi ...

  4. input上传mp3格式文件,预览并且获取时间

    <input type="file" id="file" name="file" class="upfile" o ...

  5. VMD可视化hdf5格式的分子坐标文件

    技术背景 VMD是分子动力学模拟领域常用的一款可视化软件,可以非常直观方便的展示分子的运动过程.而VMD本身对展现的格式有一定的要求,如果不是常见的rst等类型的坐标文件的话,就需要自己手动去实现一个 ...

  6. 网页上传FLV视频文件

    上传 flv格式文件一致提示文件类型不允许,是因为CI中的配置文件没有支持这个格式 在 application/config/mimes.php中加入 'flv' => array('video ...

  7. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...

  8. Servlet 实现上传文件以及同时,写入xml格式文件和上传

    package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...

  9. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

随机推荐

  1. Kali Linux Web 渗透测试视频教程— 第四课 google hack 实战

    Kali Linux Web 渗透测试— 第四课 google hack 实战 文/玄魂 目录 shellKali Linux Web 渗透测试— 第四课 google hack 实战 课程目录 Go ...

  2. 如何使用Coded UI Test对Webpage进行自动化测试

    在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个东东了.它主要用来帮助自动化测试工程师和开发人员确保程序在UI方面没有 ...

  3. ie下不显示图片

    IE支持的图片是必须为RGB三原色的,保存图片时,必须“另存为web可用的格式...”

  4. winform下重画ListBox

    Windows Forms是由Win32 API封装的开发组件,最初是为了替代mfc,但却没有体现与Model View Controller架构对应的特色,进而在.net framework 3.0 ...

  5. js不是从上到下执行的吗?

    如果说js是从上到下解释执行的, 那么,按道理应该会执行错误前面的代码. 如: [代码一] //输出1,2,到3报错 console.log("一") console.log(&q ...

  6. 一個小技巧讓ipad或iphone的瀏覽器也能開啟firebug

    首先複製這一段代碼 javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']& ...

  7. .NET中的流

    当应用程序需要和磁盘上的文件打交道的时候,就有了流的概念.流就像架设在应用程序所在内存和磁盘之间的一个管道. 大致思路 → 建立管道 //FileMode.Open打开现有文件,另外还有FileMod ...

  8. set global show_compatibility_56 = on;永久生效MySQL重启

    1. 找到MySQL的配置文件,一般在MySQL的安装目录下,例如我的: C:\Program Files\MySQL\MySQL Server 5.7 ,打开下面的一个配置文件: my-defaul ...

  9. Ubuntu虚拟机JeOS安装-2016.08.28

    根据官网的说明JeOS的镜像已经在官方不发行了,所以你在别的帖子里看到的安装jeos的镜像地址已经不适用了. 那么应该如何安装这种最小版本的linux操作系统呢? 其一,如果想要安装老版本的jeos系 ...

  10. 支付宝Wap支付你了解多少?

    上几篇文章详细介绍了支付宝APP支付.微信APP支付 此文章来介绍下支付宝Wap支付(也叫作手机网站支付) 目录 1.创建应用并获取APPID 2.配置应用环境 3.配置沙箱环境 4.服务端实现(Ma ...