Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

PyTorch desde cero, Unidad 11 — Guardado, carga y reutilización de modelos, 11.2 — Transfer learning (visión general) ·

Uso de modelos preentrenados

Uso de modelos preentrenados

Introducción

En la era actual del aprendizaje profundo, los modelos preentrenados han revolucionado la forma en que trabajamos con inteligencia artificial. Estos modelos se entrenan con grandes volúmenes de datos y luego pueden ser adaptados a tareas específicas, lo que no solo acelera el desarrollo sino que también mejora significativamente la precisión del modelo inicialmente vacío. PyTorch ofrece herramientas poderosas para usar estos modelos preentrenados en nuestras aplicaciones, especialmente a través de transfer learning.

Explicación principal

El uso de modelos preentrenados se basa en el principio de aprovechar lo que ya se ha aprendido y adaptarlo al problema específico. PyTorch proporciona varias herramientas para esto, entre ellas torchvision.models, que contiene una amplia gama de arquitecturas preentrenadas. Vamos a explorar cómo usar estos modelos.

Ejemplo de uso

Aquí te mostramos cómo cargar un modelo preentrenado en PyTorch:

import torch
from torchvision import models

# Cargamos el modelo preentrenado ResNet50
model = models.resnet50(pretrained=True)

# Establecemos el modo de evaluación
model.eval()

# Verificamos que los pesos del modelo están congelados
for param in model.parameters():
    param.requires_grad = False

# Ahora podemos usar este modelo para clasificar imágenes

Errores típicos / trampas

  1. Olvidar congelar los pesos preentrenados: Un error común es dejar que PyTorch haga gradientes para todos los parámetros del modelo, lo cual puede llevar a una pérdida de rendimiento. Es crucial congelar los pesos preentrenados usando model.parameters().requires_grad = False.
  1. Ignorar la compatibilidad de entrada: Los modelos preentrenados suelen ser entrenados en un tamaño específico de imagen (por ejemplo, 224x224 para ResNet). Es importante ajustar las imágenes a este tamaño antes de pasarlas al modelo.
  1. No considerar la transferencia de datos adecuada: El uso incorrecto del DataLoader o el preprocesamiento puede afectar negativamente la precisión del modelo. Los datos deben ser procesados y cargados consistentemente para garantizar un rendimiento óptimo.

Checklist accionable

A continuación, te proporcionamos una lista de verificación que puedes seguir al usar modelos preentrenados en PyTorch:

  1. Cargar el modelo preentrenado:
   model = models.resnet50(pretrained=True)
  1. Congelar los pesos del modelo:
   for param in model.parameters():
       param.requires_grad = False
  1. Definir la arquitectura personalizada en el forward pass:
   def forward(self, x):
       # Aquí puedes definir tu lógica de transfer learning
       return self.fc(x)
  1. Procesar las imágenes según sea necesario:
   from torchvision import transforms

   transform = transforms.Compose([
       transforms.Resize((224, 224)),
       transforms.ToTensor()
   ])
  1. Entrenar el modelo en un conjunto de datos personalizado:
   criterion = torch.nn.CrossEntropyLoss()
   optimizer = torch.optim.SGD(model.fc.parameters(), lr=0.001)
   for epoch in range(num_epochs):
       running_loss = 0.0
       for inputs, labels in dataloader:
           # Preprocesar las imágenes y etiquetas
           inputs = transform(inputs)
           
           optimizer.zero_grad()
           outputs = model(inputs)
           loss = criterion(outputs, labels)
           loss.backward()
           optimizer.step()
  1. Evaluar el rendimiento del modelo:
   with torch.no_grad():
       correct = 0
       total = 0
       for inputs, labels in test_dataloader:
           outputs = model(inputs)
           _, predicted = torch.max(outputs.data, 1)
           total += labels.size(0)
           correct += (predicted == labels).sum().item()
  1. Guardar y cargar el modelo:
   # Guardar el modelo
   torch.save(model.state_dict(), 'model.pth')

   # Cargar el modelo
   model = models.resnet50(pretrained=False)
   model.load_state_dict(torch.load('model.pth'))

Siguientes pasos

  • Evaluación adicional: Analiza por qué se podría sobreajustar o subajustar tu modelo y ajusta las técnicas de regularización según sea necesario.
  • Optimización del rendimiento: Experimenta con diferentes hiperparámetros para mejorar la precisión y el tiempo de entrenamiento.
  • Aplicaciones prácticas: Implementa modelos preentrenados en proyectos reales, como reconocimiento de imágenes o procesamiento del lenguaje natural.

Seguimos avanzando hacia un futuro donde el uso eficiente de modelos preentrenados será cada vez más importante para cualquier desarrollador de IA. PyTorch proporciona las herramientas necesarias para aprovechar al máximo estas arquitecturas, y con el correcto uso y ajuste, puedes alcanzar resultados impresionantes en tus proyectos de aprendizaje profundo.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).