HDF5數據格式讀寫

在深度學習中,通常會使用巨量的數據或圖片來訓練網絡。對於如此大的數據集,如果對於每張圖片都單獨從硬盤讀取、預處理、之後再送入網絡進行訓練、驗證或是測試,這樣效率可是太低了。如果將這些圖片都放入一個文件中再進行處理,這樣效率會更高。有多種數據模型和庫可完成這種操作,如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[:])

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章