读取 .h5 格式的文件并在数据集中使用

Reading files with .h5 format and using it in dataset

我有两个文件夹(一个用于训练,一个用于测试),每个文件夹都有大约 10 个 h5 格式的文件。我想阅读它们并在数据集中使用它们。我有读取它们的功能,但我不知道如何使用它来读取我 class.

中的文件
def read_h5(path):
    data = h5py.File(path, 'r')
    image = data['image'][:]
    label = data['label'][:]
    return image, label

class Myclass(Dataset):
    def __init__(self, split='train', transform=None):
        raise NotImplementedError

    def __len__(self):
        raise NotImplementedError

    def __getitem__(self, index):
        raise NotImplementedError

你有什么建议吗? 提前谢谢你

这可能是您想要做的事情的开始。我实现了 __init__(),但没有实现 __len__()__get_item__()。用户提供路径,init函数调用class方法read_h5()获取图片和标签数据数组。从 2 个不同的 H5 文件创建一个 class 对象有一个简短的主要部分。使用所有训练和测试数据的文件夹和文件名修改 paths 列表。

class H5_data():
    def __init__(self, path): #split='train', transform=None):
        self.path = path
        self.image, self.label = H5_data.read_h5(path)

    @classmethod
    def read_h5(cls,path):
        with h5py.File(path, 'r') as data:
            image = data['image'][()]
            label = data['label'][()]
            return image, label
        
paths = ['train_0.h5', 'test_0.h5']
for path in paths:
    h5_test = H5_data(path)
    print(f'For HDF5 file: {path}')
    print(f'image data, shape: {h5_test.image.shape}; dtype: {h5_test.image.dtype}')
    print(f'label data, shape: {h5_test.label.shape}; dtype: {h5_test.label.dtype}')

恕我直言,使用数组数据创建 class 有点矫枉过正(如果您的数据集非常大,可能会导致内存问题)。创建 h5py 数据集对象并在需要时访问数据的内存效率更高。下面的示例与上面的代码相同,没有使用 numpy 数组创建 class 对象。

paths = ['train_0.h5', 'test_0.h5']
for path in paths:
    with h5py.File(path, 'r') as data:
        image = data['image']
        label = data['label']               
        print(f'For HDF5 file: {path}')
        print(f'image data, shape: {image.shape}; dtype: {image.dtype}')
        print(f'label data, shape: {label.shape}; dtype: {label.dtype}')