HDF

Hierarchical Data Format,又称HDF5

  1. 在深度学习中,通常会使用巨量的数据或图片来训练网络。对于如此大的数据集,如果对于每张图片都单独从硬盘读取、预处理、之后再送入网络进行训练、验证或是测试,这样效率太低。如果将这些图片都放入一个文件中再进行处理效率会更高。有多种数据模型和库可完成这种操作,如HDF5和TFRecord。

  1. 一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group。在使用h5py的时候需要牢记一句话:groups类比词典,dataset类比Numpy中的数组。

  1. HDF5 文件一般以 .h5 或者 .hdf5 作为后缀名,需要专门的软件才能打开预览文件的内容。HDF5 文件结构中有 2 primary objects: Groups 和 Datasets。

  1. 每个 dataset 可以分成两部分: 原始数据 (raw) data values 和 元数据 metadata (a set of data that describes and gives information about other data => raw data)。对于每一个dataset 而言,除了数据本身之外,这个数据集还会有很多的属性 attribute,。在hdf5中,还同时支持存储数据集对应的属性信息,所有的属性信息的集合就叫做metadata.

安装:

pip install h5py

对于数据集需要: 先创建h5文件,再去读h5文件 将dataset放在group里利用group进行层次嵌套.

1 f = filename.file得到文件的根目录
2 f.create_group("...../group_name")
3 f.create_dataset("...../dataset_name")
 

一般:

  1. HDF5格式文件保存的是 : Model weights(字典,没有顺序)

  2. JSON 和 YAML 格式文件保存的是: Model structure(顺序靠json描述)

  3. h5格式:可以同时保存weights和structure

利用numpy数据初始化

1 #还可以直接用np数组给dataset初始化,此时data就涵盖了shape和dtype,即shape = data.shape,....
2 arr = np.arange(100)
3 dset = f.create_dataset("/mydataset1",data = arr)#i4:32位的integer[-2^31,2^31]
 

数据处理上的用途

利用python的文件操作及数组等方式将训练数据及测试数据集标签,按数据划分方法,将文件名写入到python数组,最终将这些处理好的数组写入hdf5格式文件给dataset初始化.

示例

 1 import h5py
2 import numpy as np
3 coco = h5py.File("D:/annot_coco.h5","r")#coco.name == / 根节点
4 # print(coco)
5 # print(coco["bndbox"])
6 #只是遍历直接相连的一级节点
7 for name in coco:
8 # 本身就是字符串
9 print(coco[name])
10 print(coco[name][:2])
11 ​
12 # def printname(name):
13 # print(name)
14 #
15 #
16 #
17 # #遍历整个coco下的节点
18 # coco.visit(printname)
19 #dataset.attrs
20 #dataset对象可以有自己的属性, 但所有属性数据的长度加起来不能超过64K, 包括属性名字.
21 ​
22 dset.attrs['length'] = 100
23 dset.attrs['name'] = 'This is a dataset'
24 for attr in dset.attrs:
25 print attr, ":", dset.attrs[attr]
26 length : 100
27 name : This is a dataset
 

注意:

1 imgname_array = coco["imgname"][:]#不一样的,这是标准用法,还是要先取到全部,再去索引,否则结果维度不一样
2 # imgname_ = coco["imgname"][:1]#轴不会减少
3 # print(imgname_array.shape)
4 # print(imgname_)#[1,16]
5 # print(type(imgname_dataset))
6 # print(type(imgname_array))
7 img = imgname_array[0]
 

写字符串到h5文件

1 test_h5 = h5py.File("D:/test.h5","w")
2 imgname = np.fromstring('000000262145.jpg',dtype=np.uint8).astype('float64')#str_imgname------>float64
3 test_h5 .create_dataset('imgname', data=imgname)#变成f8之后就可以直接往h5中写了
4 test_h5.close()
5 """
6 最后得出来的矩阵长度是字符串的长度。---1个字符串的长度就是对应编码的h5向量的长度
7 如果想将多个字符串拼成一个大的numpy矩阵,写到h5文件中,必须先将字符串转换成相同长度。
8 通常的做法是在字符串后面补上\x00。
9 """
 

从h5数据读出字符串格式

1 test_h5 = h5py.File("D:/test.h5","r")
2 img = test_h5['imgname'][:]
3 img = img.astype(np.uint8).tostring().decode('ascii')
4 print(img)
5 test_h5.close()

使用python操作HDF5文件的更多相关文章

  1. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...

  2. 使用h5py操作hdf5文件

    HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件.HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF ...

  3. python操作txt文件中数据教程[4]-python去掉txt文件行尾换行

    python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...

  4. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  5. python操作txt文件中数据教程[2]-python提取txt文件

    python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...

  6. python操作txt文件中数据教程[1]-使用python读写txt文件

    python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = '. ...

  7. python 操作Excel文件

    1   安装xlrd.xlwt.xlutils cmd下输入: pip install xlrd        #读取excel pip install xlwt        #写入excel pi ...

  8. python操作xml文件

    一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...

  9. Python操作yaml文件

    基本的yaml语法 http://ansible-tran.readthedocs.io/en/latest/docs/YAMLSyntax.html YAML 还有一个小的怪癖. 所有的 YAML ...

随机推荐

  1. Elasticsearch6.8.6版本 在head插件中 对数据的增删改操作

    一.访问ES方法:http://IP:PORT/ 一.创建索引:head插件创建索引的实例:在"索引"-"新建索引"中创建索引名称,默认了分片与副本情况: 直接 ...

  2. Linux服务器通用安全加固指南

    一.基本系统安全 1.保护引导过程(以Grub引导为例) 在 /etc/inittab 中添加 sp:S:respawn:/sbin/sulogin,以确保当切换到单用户模式时 运行级的配置要求输入  ...

  3. javascript 实现php str_pad

    * 查看php.net官方手册 string str_pad ( string $input , int $pad_length [, string $pad_string = " &quo ...

  4. shell脚本在CentOS7自动更包

    手动更包有些繁琐,就想着用脚本自动更包,后来试了下,最后成功啦! 以下是根据实际项目编写的: 操作环境:centos7.0 tomcat版本:7.0.78 以下为项目存放目录如下: updatefil ...

  5. 浅谈机(J)惨(C)技巧——从入门到精通(?)

    JC总是无聊的机房中有意思的一个瞬间... 比如: 这个杰作由 ZSWBWYX 完成 你认为这只是AK-IOI吗?不!注意用户名...也是此人的杰作. 所以,在险恶的机房里,一定要保护好自己的账号. ...

  6. Linux Bash命令杂记(tr col join paste expand)

    Linux Bash命令杂记(tr col join paste expand) tr命令 tr命令可以将输入的数据中的某些字符做替换或者是作删除 tr [-ds] STR d: 删除输入数据的中的S ...

  7. 每日总结:charcter方法(2021.10.5)

    \t 在文中该处插入一个tab键 \b在文中该处插入一个后退键 \n 换行 \r  在文中该处回车 \f 在文中该处插入换页符 方法: isLetter()是否是一个字母 isDigit()是否是一个 ...

  8. PAT (Basic Level) Practice (中文)1009 说反话 (20分)

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  9. Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)

    Mybatis  一对多延迟加载,并且子查询中与主表字段不对应应用说明. 实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联,并且教师关联教研组外键与教研组编号 ...

  10. 浅尝装饰器和AOP

    [写在前面] 参考文章:https://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html[从简单的例子入手进行讲解,由浅入深,很到位] 装饰器部 ...