首页 文章

如何使用h5py将数据附加到hdf5文件中的一个特定数据集

提问于
浏览
12

我正在寻找使用python(h5py)将数据附加到h5文件中的现有数据集的可能性 .

我项目的简短介绍:我尝试使用医学图像数据训练CNN . 由于在将数据转换为nparrays期间存在大量数据和大量内存,我需要将“转换”拆分为几个数据块 - >加载并预处理前100个医学图像并将nparray保存到hdf5 file - >加载下100个数据集并附加现有的h5文件 .

现在我尝试按如下方式存储前100个转换后的nparrays:

import h5py
from LoadIPV import LoadIPV

X_train_data, Y_train_data, X_test_data, Y_test_data = LoadIPV()

with h5py.File('.\PreprocessedData.h5', 'w') as hf:
    hf.create_dataset("X_train", data=X_train_data, maxshape=(None, 512, 512, 9))
    hf.create_dataset("X_test", data=X_test_data, maxshape=(None, 512, 512, 9))
    hf.create_dataset("Y_train", data=Y_train_data, maxshape=(None, 512, 512, 1))
    hf.create_dataset("Y_test", data=Y_test_data, maxshape=(None, 512, 512, 1))

可以看出,转换的nparray被分成四个不同的“组”,存储在四个hdf5数据集[X_train,X_test,Y_train,Y_test]中 . LoadIPV()函数执行医学图像数据的预处理 .

我的问题是,我想将接下来的100个nparray存储到现有数据集的同一个h5文件中:这意味着我想要附加例如现有的X_train-dataset [100,512,512,9]以及接下来的100个nparrays使得X_train变为[200,512,512,9] . 这同样适用于其他三个数据集X_test,Y_train,Y_test .

非常感谢您的帮助!

1 回答

  • 16

    我找到了似乎有效的解决方案!

    看看这个:incremental writes to hdf5 with h5py

    为了将数据附加到特定数据集,必须首先调整相应轴中的特定数据集的大小,然后在“旧”nparray的末尾附加新数据 .

    因此,解决方案看起来像这样:

    with h5py.File('.\PreprocessedData.h5', 'a') as hf:
        hf["X_train"].resize((hf["X_train"].shape[0] + X_train_data.shape[0]), axis = 0)
        hf["X_train"][-X_train_data.shape[0]:] = X_train_data
    
        hf["X_test"].resize((hf["X_test"].shape[0] + X_test_data.shape[0]), axis = 0)
        hf["X_test"][-X_test_data.shape[0]:] = X_test_data
    
        hf["Y_train"].resize((hf["Y_train"].shape[0] + Y_train_data.shape[0]), axis = 0)
        hf["Y_train"][-Y_train_data.shape[0]:] = Y_train_data
    
        hf["Y_test"].resize((hf["Y_test"].shape[0] + Y_test_data.shape[0]), axis = 0)
        hf["Y_test"][-Y_test_data.shape[0]:] = Y_test_data
    

相关问题