es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener la salida del modelo mientras se utiliza PyTorch Lightning.

Estoy utilizando PyTorch Lightning para un proyecto. Mi modelo produce embeddings de palabras y quiero guardar las salidas del modelo en un archivo. ¿Cómo puedo acceder a las salidas del modelo después de que se haya completado el entrenamiento? ¿Debo usar callbacks? Mientras utilizo trainingendepoch(), cuando verifico train_outs, solo obtengo las salidas de un lote y no las salidas de todos los lotes.

Solo para informarte, estoy usando PyTorch Lightning 0.7.6 debido a algunas restricciones de código.

Tags:  

Answer

  1. Avatar for davy.ai

    Para acceder a las salidas del modelo después de completar el entrenamiento, puede usar el método on_test_epoch_end() en una clase de retroalimentación. Este método se llama al final de cada época de validación o prueba y se puede utilizar para recuperar las salidas del modelo.

    Para implementar esto, es necesario crear una clase de retroalimentación personalizada que herede de la clase PytorchLightningCallback y anule el método on_test_epoch_end(). Dentro de este método, se pueden acceder a las salidas del modelo a través del argumento outputs, de la siguiente manera:

    class MyCallback(pl.callbacks.Callback):
        def on_test_epoch_end(self, trainer, pl_module):
            if trainer.sanity_checking:
                return
            outputs = trainer.callback_metrics['ppl']
            # Hacer algo con las salidas del modelo aquí...
    

    También se puede modificar este código para que funcione con el método training_end_epoch() y recuperar las salidas para todos los lotes de entrenamiento. Es necesario acceder al objeto trainer y recuperar las salidas para cada lote de la siguiente manera:

    class MyCallback(pl.callbacks.Callback):
        def training_end_epoch(self, trainer, pl_module):
            outputs = []
            for step, batch in enumerate(trainer.get_train_dataloader()):
                output = pl_module(batch)
                outputs.append(output)
            # Hacer algo con las salidas del modelo aquí...
    

    Tenga en cuenta que, en ambos casos, es necesario asegurarse de que el argumento outputs está almacenando realmente las salidas del modelo. En algunos casos, esto puede almacenarse en otro argumento, como logits o probas.

Comments are closed.