Cómo agregar datos a un conjunto de datos específico en un archivo hdf5 con h5py

Estoy buscando la posibilidad de agregar datos a un conjunto de datos existente dentro de un archivo h5 usando python (h5py).

Una breve introducción a mi proyecto: trato de entrenar a una CNN usando datos de imágenes médicas. Debido a la gran cantidad de datos y el uso intensivo de la memoria durante la transformación de los datos a nparrays, tuve que dividir la “transformación” en algunos fragmentos de datos -> Cargar y preprocesar las primeras 100 imágenes médicas y guardar los nparrays en hdf5 archivo -> Cargue los siguientes 100 conjuntos de datos y agregue el archivo h5 existente.

Ahora traté de almacenar los primeros 100 nparrays transformados de la siguiente manera:

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)) 

Como se puede ver, los nparrays transformados se dividen en cuatro “grupos” diferentes que se almacenan en los cuatro conjuntos de datos hdf5 [X_train, X_test, Y_train, Y_test]. La función LoadIPV () realiza el preprocesamiento de los datos de la imagen médica.

Mi problema es que me gustaría almacenar los siguientes 100 nparrays en el mismo archivo h5 en los conjuntos de datos existentes: Eso significa que me gustaría agregar, por ejemplo, el conjunto de datos X_train [100,512,512,9] con los siguientes 100 nparrays de modo que X_train se convierte en [200,512,512,9]. Lo mismo debería funcionar para los otros tres conjuntos de datos X_test, Y_train, Y_test.

¡Muchas gracias por su ayuda!

¡He encontrado una solución que parece funcionar!

Eche un vistazo a esto: ¡las escrituras incrementales en hdf5 con h5py !

Para agregar datos a un conjunto de datos específico, es necesario primero cambiar el tamaño del conjunto de datos específico en el eje correspondiente y luego agregar los nuevos datos al final de la “antigua” nparray.

Por lo tanto, la solución se ve así:

 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