Cargar y Usar Checkpoints en PyTorch para Modelos de Clasificación de Texto
Clase 23 de 24 • Curso de Redes Neuronales con PyTorch
Resumen
¿Cómo cargar un checkpoint en un nuevo modelo?
Cargar un modelo preentrenado es una habilidad clave al trabajar en machine learning, especialmente cuando queremos agregar eficiencia a nuestro flujo de trabajo. En este segmento, aprenderemos cómo aprovechar los checkpoints que hemos guardado previamente para inicializar un nuevo modelo y optimizador en PyTorch, ¡listo para entrenamiento adicional o inferencia!
¿Cómo cargar el checkpoint de nuestro modelo?
Primero debemos descargar el checkpoint desde el Hub de JobinFace, donde hemos subido previamente nuestros pesos. Una vez en nuestro entorno de Google Colab, utilizamos la función load
de PyTorch para cargar este checkpoint. Aquí está el fragmento de código necesario:
checkpoint = torch.load('Weights/modelCheckpoint.pth')
¿Cómo inicializar el nuevo modelo?
Inicializar el nuevo modelo requiere replicar la configuración del modelo original. Esto incluye especificar el número de clases, el tamaño del vocabulario y el tamaño del embedding. Todo esto debe ser idéntico al modelo original para garantizar que los pesos cargados coincidan adecuadamente.
num_clases = ...
tamaño_vocabulario = ...
tamaño_embedding = ...
modelo2 = MiModelo(num_clases, tamaño_vocabulario, tamaño_embedding)
¿Por qué necesitamos un optimizador nuevo?
El optimizador es esencial para ajustar los pesos del modelo durante el entrenamiento. Al igual que el modelo, debemos inicializar un optimizador nuevo y luego cargar sus estados desde el checkpoint.
optimizador2 = torch.optim.SGD(modelo2.parameters(), lr=0.2)
¿Cómo aseguramos que nuestro modelo y optimizador aplican los pesos correctos?
Cargar los pesos en el modelo
Utilizamos el método load_state_dict
para cargar el estado del modelo desde el diccionario del checkpoint:
modelo2.load_state_dict(checkpoint['modelo_state_dict'])
Solucionar errores con el optimizador
A veces, podemos encontrar errores al intentar cargar el estado del optimizador. Si esto sucede, verifiquemos que guardamos el estado del optimizador adecuadamente. Si no es así, regresemos, corregimos y subimos la versión corregida al Hub de JobinFace.
optimizador2.load_state_dict(checkpoint['optimizer_state_dict'])
¿Cómo manejamos el resto del flujo de trabajo?
Si vamos a continuar el entrenamiento, necesitaremos definir el estado de la época y la pérdida. Estos también se almacenan en el checkpoint y podemos recuperarlos de manera similar.
epoch2 = checkpoint['epoch']
loss2 = checkpoint['loss']
¿Cómo realizamos la inferencia con el modelo cargado?
Preparación para la inferencia
Si el objetivo es inferencia, generalmente llevamos el modelo a la CPU, especialmente si la GPU no es necesaria, lo cual es común para tareas de inferencia simples.
modelo2.to('cpu')
Probar con un ejemplo nuevo
Es siempre recomendable probar nuestro modelo con un texto nuevo para confirmar que todo está configurado correctamente. Utilizamos un pipeline de texto para convertir el texto en un formato que el modelo pueda procesar.
ejemplo = "texto sobre ajolotes"
resultado = modelo2(ejemplo)
print(resultado)
Al seguir estos pasos, garantizaremos que nuestro modelo esté listo para realizar inferencia con los pesos previamente entrenados y almacenar cualquier ajuste futuro directamente en el Hub de JobinFace. Continuar experimentando y ajustando el modelo es esencial para sacarle el máximo provecho. ¡Sigue descubriendo y aprendiendo nuevas maneras de aplicar estos conocimientos!