最近用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 渗透测试视频教程— 第八课 nessus

    Kali Linux Web 渗透测试视频教程— 第八课 nessus 文/玄魂 视频课程地址:http://edu.51cto.com/course/course_id-1887.html 目录 n ...

  2. [WinAPI] API 14 [获取、设置文件属性和时间]

    >_< 为了获取文件属性,用户可以使用GetFileAttributes与GetFileAttributesEx函数. GetFileAttributesEx函数除了返回文件属性外,还返回 ...

  3. 一个Java应用,三种字体风格(Java, Windows, Mac),真是蛋疼

    大家看看下面这张图,红色圈起来的是Java难看至极的字体渲染,黄色圈起来的是正常的Windows渲染,绿色是Mac风格的渲染. 其实我感觉正常风格就挺好的,就是看那个Java的Swing菜单,非常不顺 ...

  4. Fiddler初探

    我们知道监视Http和Https请求的工具有多种,例如:HttpWatch,FireBug等.但是今天接触到一种新的工具Fiddler.Fiddler能记录所有客户端和服务器的http和https请求 ...

  5. Entity Framework后台采用分页方式取数据与AspNetPager控件的使用

    本文是一个对AspNetPager控件使用的笔记! 有关AspNetPager控件可以查看杨涛主页.这是一个开放的自定义ASP.NET控件,支持各种自定义的数据分页方式,使用很方便,而且功能也很强大, ...

  6. textarea内部换行实现

    当在使用textarea的时候,有一次需求,需要做到自定义换行,而不是通过textarea定宽来自动换行,其实在html中可以直接通过<br/>来换行,同时也想到用\n来实现换行,其结果是 ...

  7. 【Linux高级驱动】LCD驱动框架分析

    1.framebuffer接口层(fbmem.c) 功能:给用户提供接口 fbmem_init  ),"fb",&fb_fops)  /*2.创建一个设备类*/ fb_cl ...

  8. atitit.获取北京时间CST 功能api总结 O7

    atitit.获取北京时间CST 功能api总结 O7 1. 获取cst时间(北京时间)两布:1.抓取url timtstamp >>format 到cst 1 2. 设置本机时间  se ...

  9. 多看Kindle的“导出失败,请检查网络或账号”错误的解决

    一直都用得好好的,今天突然不行了,报错“导出失败,请检查网络或账号”. 网上搜索,试了一下这个方法: 我目前的解决办法是:先同步至小米账户(需要联网,并在Kindle系统设置 -> 阅读 -&g ...

  10. Postman测试Web API

    如何查看查询字符串? →输入包含查询字符串的URL,比如:http://localhost:54176/api/ProductCategories?name=darren&age=25→点击P ...