Este issue está relacionado con la necesidad de realizar inferencias sobre un dataset de testing con un modelo preentrenado, y almacenar los resultados de manera ordenada. La implementación actual se basa en un flujo de trabajo eficiente que carga los datos de entrada, realiza la predicción con el modelo y luego guarda las predicciones generadas.
Objetivos
Cargar de forma eficiente los datos del dataset de testing, aprovechando las funciones existentes de la librería grav_lens.
Realizar predicciones utilizando un modelo preentrenado, procesando los datos en batches.
Guardar las predicciones en archivos .npy manteniendo los nombres originales de los archivos de entrada para una fácil identificación.
Tareas a Realizar
1. Implementar Función get_testing_paths en grav_lens/configs/paths.py
Descripción: Esta función se encargará de devolver las rutas y los nombres de los archivos de testing que se encuentran en la carpeta testing/EPSILON.
Detalles de Implementación:
Utilizar list_files_from_directory para obtener la lista de archivos dentro del directorio EPSILON.
Implementar un generador que devuelva tuplas (ruta, nombre) para cada archivo encontrado.
Código Propuesto:
def get_testing_paths(home, max_files=-1):
testing_dir = os.path.join(home, "testing", "EPSILON")
file_paths = list_files_from_directory(testing_dir, max_files=max_files)
for file_path in file_paths:
yield file_path, os.path.basename(file_path)
2. Implementar Función load_testing_dataset en grav_lens/utils/load_dataset.py
Descripción: Esta función será responsable de cargar el dataset de testing de manera eficiente utilizando un generador, devolviendo tanto los datos de entrada (X) como los nombres de los archivos.
Detalles de Implementación:
Usar la función get_testing_paths para obtener los archivos .npy y sus nombres correspondientes.
Crear un tf.data.Dataset utilizando el generador y procesar los archivos con tf.numpy_function.
Preparar el dataset en batches y prefetch para optimizar el proceso de inferencia.
3. Implementar Función save_predictions en grav_lens/utils/utils.py
Descripción: Esta función se encargará de guardar los resultados de las predicciones en archivos .npy dentro de la carpeta RESULTS, utilizando el nombre original del archivo de entrada para mantener consistencia.
Detalles de Implementación:
Crear la carpeta RESULTS si no existe.
Iterar sobre las predicciones y nombres, guardando cada predicción en un archivo .npy con el nombre correspondiente.
Código Propuesto:
def save_predictions(prediction_batch, names_batch, home):
results_dir = os.path.join(home, "RESULTS")
os.makedirs(results_dir, exist_ok=True)
for prediction, name in zip(prediction_batch, names_batch):
result_path = os.path.join(results_dir, name.numpy().decode('utf-8'))
np.save(result_path, prediction)
Consideraciones
Manejo de Memoria: Para evitar sobrecargar la memoria, se utiliza un generador (yield) que carga los archivos por batch durante la inferencia.
Consistencia de Nombres: Las predicciones se guardan con el nombre original del archivo de entrada para facilitar el análisis posterior.
Integración Modular: Las funciones se integran con la estructura existente de la librería grav_lens, lo que permite una fácil extensión y reutilización del código.
Descripción
Este issue está relacionado con la necesidad de realizar inferencias sobre un dataset de testing con un modelo preentrenado, y almacenar los resultados de manera ordenada. La implementación actual se basa en un flujo de trabajo eficiente que carga los datos de entrada, realiza la predicción con el modelo y luego guarda las predicciones generadas.
Objetivos
grav_lens
..npy
manteniendo los nombres originales de los archivos de entrada para una fácil identificación.Tareas a Realizar
1. Implementar Función
get_testing_paths
engrav_lens/configs/paths.py
testing/EPSILON
.Detalles de Implementación:
list_files_from_directory
para obtener la lista de archivos dentro del directorioEPSILON
.(ruta, nombre)
para cada archivo encontrado.Código Propuesto:
2. Implementar Función
load_testing_dataset
engrav_lens/utils/load_dataset.py
X
) como los nombres de los archivos.Detalles de Implementación:
get_testing_paths
para obtener los archivos.npy
y sus nombres correspondientes.tf.data.Dataset
utilizando el generador y procesar los archivos contf.numpy_function
.Código Propuesto:
3. Implementar Función
save_predictions
engrav_lens/utils/utils.py
.npy
dentro de la carpetaRESULTS
, utilizando el nombre original del archivo de entrada para mantener consistencia.Detalles de Implementación:
RESULTS
si no existe..npy
con el nombre correspondiente.Código Propuesto:
Consideraciones
yield
) que carga los archivos por batch durante la inferencia.grav_lens
, lo que permite una fácil extensión y reutilización del código.Uso Esperado
Próximos Pasos