利用h5py加速数据集读取

直接使用:

def store_in_h5(images, output_filename):
    with h5py.File(output_filename, 'w') as hf:
        data_group = hf.create_group('data')
        label_group = hf.create_group('label')

        for i, (data_patches, label_patches) in enumerate(images):
            for j, (data, label) in enumerate(zip(data_patches, label_patches)):
                if torch.is_tensor(data):
                    data = data.cpu().numpy()
                if torch.is_tensor(label):
                    label = label.cpu().numpy()

                data_group.create_dataset(f'data_{i}_{j}', data=data, compression="gzip", compression_opts=9)
                label_group.create_dataset(f'label_{i}_{j}', data=label, compression="gzip", compression_opts=9)

H5PY

文档

https://docs.h5py.org/en/stable/

核心概念

HDF5文件是两种对象的容器:数据集(datasets),它们是类似数组的数据集合,以及组(groups),它们是类似文件夹的容器,用于存放数据集和其他组。在使用h5py时,需要记住的最基本的事情是:

组的工作方式类似于字典,数据集的工作方式类似于NumPy数组

假设有人发送给你一个HDF5文件,名为mytestfile.hdf5。(要创建此文件,请参见附录:创建文件。)你需要做的第一件事是打开该文件以供读取:

python
Copy

import h5py
f = h5py.File('mytestfile.hdf5', 'r')

File对象是你的起点。这个文件中存储了什么?记住,h5py.File的行为类似于Python字典,因此我们可以检查键:

python
Copy

list(f.keys())
['mydataset']

根据我们的观察,在该文件中有一个名为mydataset的数据集。让我们将数据集作为一个Dataset对象进行检查:

python
Copy
dset = f[‘mydataset’]
我们获得的对象不是一个数组,而是一个HDF5数据集。与NumPy数组一样,数据集具有形状(shape)和数据类型(dtype):

python
Copy

dset.shape
(100,)
dset.dtype
dtype('int32')

数据集还支持数组样式的切片操作。以下是如何从文件中的数据集读取和写入数据的示例:

python
Copy

dset[...] = np.arange(100)
dset[0]
0
dset[10]
10
dset[0:100:10]
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

更多信息,请参阅文件对象(File Objects)和数据集(Datasets)

你可能感兴趣的:(python,人工智能)