Rafael Rivera
Juan Arevalo
Hacer inferencia con un modelo entrenado en PyTorch significa usarlo para generar predicciones sobre datos nuevos y compararlas con los valores reales. Si vienes de Keras y quieres entender cómo se traduce ese flujo en PyTorch, aquí tienes los tres pasos clave para evaluar un modelo de regresión lineal y visualizar qué tan cerca quedan tus predicciones del objetivo.
¿Qué pasos sigo para hacer inferencia en PyTorch?
Antes de pedirle predicciones a tu modelo, necesitas prepararlo. Hay tres movimientos que no puedes saltarte.
model.eval(). Esto desactiva comportamientos propios del entrenamiento.inference_mode(), que ya hemos usado en clases anteriores.¿Qué es el modo eval en PyTorch? Es el estado en el que pones tu modelo cuando ya no vas a entrenarlo, solo a usarlo para predecir. Se activa con
model.eval()y le indica a PyTorch que apague mecanismos de entrenamiento.
¿Por qué el device importa aunque uses solo CPU?
En este ejercicio todo corre en CPU y ni siquiera inicializamos una GPU. Aun así, es buena práctica mover explícitamente tu modelo y tus datos al device correcto cuando trabajas con GPU, por ejemplo en Colab.
El patrón se ve así: usas la función to para mandar el modelo a un device (puede ser cuda o cpu) y haces lo mismo con tu tensor de prueba. Si X_prueba y el modelo viven en lugares distintos, PyTorch te lanza un error. Por eso ambos tienen que coincidir.
Como aquí no era necesario, esa línea queda comentada. Pero tenla siempre presente cuando subas tu código a una GPU.
¿Cómo genero las predicciones con el modelo entrenado?
Una vez que tu modelo está en modo eval y dentro del inference mode, llamas al modelo y le pasas los valores de prueba que definiste antes. El resultado es un tensor con las nuevas predicciones, ya con los pesos ajustados después de 100 épocas de entrenamiento.
Ese tensor lo guardas en una variable, por ejemplo y_preds, y lo llevas a la función plot_predictions que creaste al inicio del Colab. En el argumento predictions colocas y_preds y obtienes la gráfica comparativa.
¿Qué muestra la gráfica de predicciones? Los puntos rojos representan lo que predijo tu modelo y los amarillos los valores reales. Mientras más cerca estén los rojos de los amarillos, mejor aprendió tu red.
¿Cómo sé si mi modelo mejoró?
Al comparar la nueva gráfica con la del inicio, los puntos rojos quedan mucho más pegados a los amarillos. Ese es el objetivo: que las predicciones sean prácticamente iguales a los valores reales. Es una mejora notable frente a la dispersión inicial, antes del entrenamiento.
Desde aquí viene el reto. Modifica las piezas y observa cómo se mueven los puntos rojos en la gráfica.
Cada cambio te dará una intuición sobre qué tanto se acercan o se alejan tus predicciones de los valores reales.
¿Qué construiste en este módulo de PyTorch?
Levantaste un modelo de regresión lineal de principio a fin: lo inicializaste, lo entrenaste y lo evaluaste con datos de prueba. También graficaste el avance para ver con tus propios ojos cómo el modelo se acercaba al objetivo época tras época.
Si ya conocías Keras, este flujo en PyTorch te da control más fino sobre cada paso: el bucle de entrenamiento, el manejo del device y los modos de evaluación. ¿Cómo sientes que avanzaron tus conocimientos en deep learning comparado con las herramientas que ya usabas? Déjalo en los comentarios de la clase y nos vemos en el siguiente módulo, donde entrenaremos una red neuronal con PyTorch.
Rafael Rivera
Juan Arevalo
Jeison Wu Mitre
Manuel Pérez Terradillos
Mario Alberto Hernández Pintor
Nydia Mejía Zavala
Bryan Castano
Ivan Mercedes
Alex Xiomar Rubio Lopez
Mario Alexander Vargas Celis
Juan Jose Garcia
Realicé la prueba aumentando las épocas, y la mejor fue 300, de ahí en adelante no se vio mejoría en las predicciones
Yo también lo hice de esa manera, se me hizo más facil que tantear el learning rate :)
Increíble!
como el reto suponía ajustar el modelo, lo que hice fue agrandar los steps y he aquí mi resultado:
Si reducimos el lr a 0.002, y aumentamos las épocas a 1330, se aprecia una mejora razonable del aprendizaje, pero también cómo es necesario aumentar las épocas al reducir el lr en este ejemplo sencillo.
Con 160 épocas obtuve este resultado
Con 250 épocas
Hola Chicos.
Este fue mi resultado con epochs = 200.
Yo le di un momentum al SGD de 0.01, eso ayudo tambien al entrenamiento.
Haciendo una prueba con 250 epochs
Una vez que has entrenado un modelo en PyTorch, puedes utilizarlo para realizar predicciones sobre nuevos datos o sobre datos de prueba. Para ello, es fundamental cambiar el modelo a modo de evaluación utilizando model.eval() y asegurarte de que no se están calculando los gradientes con torch.no\_grad(), ya que durante la predicción no es necesario el retropropagación.
Aquí te muestro cómo hacer predicciones con un modelo de PyTorch ya entrenado:
### Ejemplo de código para hacer predicciones
import torch \# Pon el modelo en modo de evaluación model\_1.eval() \# Datos de entrada para la predicción (puede ser cualquier tensor nuevo o de prueba) \# Asegúrate de que X\_nuevos\_datos tiene la misma estructura que los datos de entrenamiento X\_nuevos\_datos = torch.tensor(\[\[0.5, 0.8], \[0.3, 0.9]]) # Ejemplo de nuevos datos (cambia según tu caso) \# Realizar la predicción sin calcular gradientes with torch.no\_grad():   \# Pase hacia adelante para hacer predicciones   predicciones = model\_1(X\_nuevos\_datos) \# Si las predicciones son logits (para clasificación), puedes convertirlas a probabilidades \# Por ejemplo, si la última capa de tu modelo no tiene una función softmax, puedes aplicar una: probs = torch.softmax(predicciones, dim=1) \# O si usas una regresión, puedes imprimir directamente los valores predichos print("Predicciones:") print(predicciones) \# Si es un problema de clasificación, puedes obtener la clase predicha clases\_predichas = torch.argmax(probs, dim=1) print("Clases predichas:", clases\_predichas)
### Explicación del código:
1. **model.eval()**: Cambiamos el modelo al modo de evaluación. Esto asegura que ciertas capas como Dropout o BatchNorm se comporten de manera adecuada durante la predicción.
2. **Datos de entrada**: Usamos X\_nuevos\_datos, que debe tener el mismo formato y dimensiones que los datos de entrenamiento. Si usas normalización o preprocesamiento durante el entrenamiento, asegúrate de aplicarlo también a los datos de predicción.
3. **torch.no\_grad()**: Esto desactiva el cálculo de gradientes, lo que hace que la predicción sea más rápida y eficiente en términos de memoria.
4. **Predicción**: Usamos el modelo para hacer una predicción (model\_1(X\_nuevos\_datos)). Si es un modelo de clasificación, los resultados pueden estar en forma de **logits**, por lo que podemos aplicar torch.softmax() para convertirlos en probabilidades.
5. **Clases predichas** (si es clasificación): Si el modelo es de clasificación, torch.argmax() puede ayudarte a obtener la clase predicha para cada muestra.
### Consideraciones adicionales:
- **Clasificación**: En un problema de clasificación, el modelo típicamente devuelve logits (valores sin procesar antes de la función de activación final), y se pueden convertir a probabilidades con softmax. Luego, las clases predichas se obtienen usando torch.argmax().
- **Regresión**: En problemas de regresión, la salida será el valor predicho directamente, por lo que no necesitas aplicar softmax.
- **Preprocesamiento**: Asegúrate de aplicar el mismo preprocesamiento a los datos de entrada de predicción que aplicaste durante el entrenamiento (como la normalización de características).
Añadí un poco de sesgo a los datos y aumenté el número de steps