NJU1healer的个人博客分享 http://blog.sciencenet.cn/u/NJU1healer

博文

HDF5数据格式读写

已有 3532 次阅读 2020-9-22 17:03 |个人分类:机器学习|系统分类:科研笔记

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

1 hdf5格式使用方法

1.1 hdf5文件介绍

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

      HDF5的dataset虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的存储特征,如数据压缩,误差检测,分块传输。

 

1.2 hdf5数据的创建

      由hdf5文件简介可知道,hdf5文件包含两部分,group和dataset。很直观的类比group就是文件夹,dataset就是文件夹里面的数据,而我们要引用文件夹就好比词典用法,我们要引用数据就好比数组用法。

创建group和dataset分别为create_group;create_dataset

       假设我们要创建一个名字为subgroup的group,subgroup里面包含一个名为subsub的group和名为data1的数据;在subsub中包含名为data2的数据。示意图如下

import numpy as np

import h5py

"""

create_dataset :create  dataset

create_group :create  group

"""

data1 = np.arange(50)

data2 = np.arange(100)

 

# h5py.File(filename,’w’) w表示写入。这句类似 f = h5py.File(‘test.h5’,’w’)

with h5py.File('test.h5','w') as f:

  subgroup = f.create_group('subgroup')

  subgroup.create_dataset('data1',data=data1)

  subsub = subgroup.create_group('subsub')

  subsub.create_dataset('data2',data=data2)


1.3 hdf5数据读取

      以1.2中保存的test.h5数据作要读取的数据。

1.打开h5文件

import h5py

f = h5py.File('test.h5','r'))  # ‘r’ 表示读取

2.查看h5文件里面结构

def printname(name):

   print(name)

f.visit(prtname)

 

输出结构图如下:

subgroup

subgroup/data1

subgroup/subsub

subgroup/subsub/data2

可以看到subgrop下有数据data1

subsub下有数据data2

3.取出数据

取数据,例如要取出data1

subgroup = f[‘sobgroup’]

data1 = subgroup[‘data1’]

## 取出data2

subsub = subgroup[‘subsub’]

data2 = subsub[‘data2’]


完整代码如下:

with h5py.File(filename,'r') as f:

  def prtname(name):

      print(name)

  f.visit(prtname)

  subgroup = f['subgroup']

  subsub = subgroup['subsub']

  data1 = subgroup['data1']

  data2 = subsub['data2']

  # print(dset)

  print("data1 name:",data1.name,"data2 name",data2.name)

  print("data1 shape:",data1.shape,"data2 shape:",data2.shape)

  print("data1 dtype:",data1.dtype,"data2 dtype:",data2.dtype)

  print("data1:",data1[:],"data2:",data2[:])

【参考】

https://blog.csdn.net/lai_cheng/article/details/84644773

点滴分享,福泽你我!Add oil!



https://wap.sciencenet.cn/blog-3428464-1251662.html

上一篇:Matlab找高维矩阵的最大值或最小值下标
下一篇:Pandas: pd.to_datetime()、set_index、unique()、from . or ..、
收藏 IP: 103.149.249.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-28 20:01

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部