1、什么是HDF5
简单的来说HDF5是一种新的文件格式,可以进行大批量文件的存储,并且该种存储格式支持可以通过numpy方便的进行数据的操作-包括切片,keys等操作。
具体的介绍参考这篇博客HDF5介绍。
2、Python 中 HDF5 模块的使用
贴一个官方文档:HDF5官方文档 ,最好的学习方式还是看官方文档进行学习。(这里的代码对应的Python 2.x版本)
Python中可以进行hdf5模块的调用,并且进行文件的读写,还是以一个例子为例:
(1)生成hdf5文件准备工作,需要创建一个文本文档,其中里面包含了你需要的文件地址(这里是用的图片地址),和相应的数据。
格式如下: 其中每一行分为两部分,第一部分为照片的地址,第二部分的 0 表示其标签(你也可以根据需要增加或者减少列的数目)
注意:一定要在对应的路径下存有相应的图片。
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00001.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00002.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00003.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00004.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00005.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00006.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00007.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00008.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00009.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00010.jpg 0
(2)hdf5文件生成
使用的tflearn.data_utils的方法,也可以按照官方文档的方式进行creat
from tflearn.data_utils import build_hdf5_image_dataset
import h5py
new_train = "/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/mini_data.txt"
build_hdf5_image_dataset(new_train, image_shape=(224, 224), mode='file', output_path='new_train.h5', categorical_labels=True, normalize=False)
print ('Done creating new_train.h5')
(3)hdf5文件的使用
hdf5文件的打开及使用:
需要注意的一点是查看hdf5文件的key不能按照官方文档的要求,因为输入data.keys(),会输出KeysView(<HDF5 file "new_val_224.h5" (mode r)>),而不是一个list 了。
When using h5py from Python 3, the keys(), values() and items() methods will return
view-like objects instead of lists. These objects support containership testing and
iteration, but can’t be sliced like lists.
所以我们需要改变下对key的直接读取方式:
data=h5py.File('new_val_224.h5', 'r')
for key in data.keys():
print(data[key].name)
#输出 /X /Y 两个key,所以就可以进行调用并进行numpy的操作了
END