Python Notes13:HDF5

Python Notes13:HDF5

介绍

HDF5可以用来存储异构数据对象,包括图片,表,图,甚至 PDF 和 Excel。HDF5 中的数据存储在不同组(Group)中,类似于 Linux 文件树结构。HDF5 数据集 (Datasets) 存储原始数据和元数据 (Metadata) 包括数据类型,维度,属性与性质。一般以 .h5 或者 .hdf5 作为后缀名。

应用

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

为什么使用HDF5

  • numpy和scipy提供的数据存储方法numpy.save , numpy.savez , scipy.io.savemat,这三个方法产生的文件大小都是一样的…………非常大。

HDF5三大要素

  • hdf5 files:能够存储两类数据对象 dataset 和 group 的容器;
  • dataset(array-like):每个数据集都有一个名字(name)、形状(shape) 和类型(dtype),支持切片操作;
  • group(folder-like):group 中可以存放 dataset 或者其他的 group,键就是组成员的名称,值就是组成员对象本身(组或者数据集)。
    • notion image

      DataSet

notion image
notion image
 

Group

notion image
 
notion image

Python使用HDF5

安装h5py

pip install h5py
 

使用

将图片数据存为hdf5
👉🏻
这里的图片数据大小需要一致。
''' Description: henggao_note version: v1.0.0 Date: 2022-04-20 08:35:51 LastEditors: henggao LastEditTime: 2022-04-20 10:24:57 ''' import os import h5py import cv2 import numpy as np # 中文路径读不出来 img_path = r'D:\DataDemo' out_h5_path = r'D:\DataDemo\test_hdf5.h5' # 遍历指定地址下的所有图片,💥尺寸大小一样💥的的jpg文件 img_list = sorted(os.listdir(img_path)) # 确认图片的大小 image = cv2.imread(img_path + '\\2.jpg', 0) # print(image) shape = np.array(image, dtype=np.uint8).shape print(shape) num_img = len(img_list) dataset = np.zeros((num_img, shape[0], shape[1]), np.float) # print(img_list) cnt_num = 0 for img in img_list: if img.endswith(".jpg"): # print(img_path+'\\'+img) gray_img = cv2.imread(img_path+'\\'+img, 0) dataset[cnt_num, :, :] = gray_img cnt_num += 1 np.save(img_path+'\\train.npy', dataset) print('检验是否读取成功:') print(dataset[1]) with h5py.File(out_h5_path, 'w') as f: f['train'] = dataset # 将数据写入文件的主键data下面
 

可视化GUI工具

  • HDF Explorer
  • HDFView
 

HDFView安装

访问官网,下载安装即可。
安装好运行界面如下
notion image

查看数据

查看我们上面存储的图片数据
notion image