Fundamentos de PyTorch para modelos de machine learning
Todos los cursos GRATIS
Se acaba en:
:::
Resumen
PyTorch es un framework robusto creado por Meta, anteriormente Facebook, diseñado específicamente para construir modelos de machine learning y deep learning. Ofrece recursos variados y librerías que facilitan desarrollar arquitecturas neuronales complejas desde cero o con cierta base previa.
¿Qué es un tensor en PyTorch?
El elemento central de PyTorch es el tensor, una estructura similar a una lista, vector o matriz en Python. Básicamente, se trata de una estructura n-dimensional manejada internamente según filas y columnas requeridas para almacenar datos numéricos. En machine learning, estos tensores constituyen la base sobre la que se procesan los modelos.
¿Cuál es el rol de Autograd en PyTorch?
Un aspecto fundamental de PyTorch es Autograd, un sistema computacional diseñado para realizar automáticamente la derivación parcial. Sin Autograd, los cálculos de derivadas parciales para modelos grandes consumirían demasiado tiempo manualmente. Con este mecanismo, PyTorch automatiza estos procedimientos mediante aproximaciones que facilitan notablemente la creación y ajuste de modelos avanzados.
¿Qué es el optimizer y cómo ayuda a entrenar modelos?
El optimizer es otro componente clave que maneja el aprendizaje del modelo mediante métodos específicos como el popular algoritmo Adam. Este realiza ajustes internos (por ejemplo, utilizando back propagation) y determina el learning rate, ayudando a que el modelo supere mínimos locales y optimizando su aprendizaje.
Tipos de optimizadores disponibles:
Adam
Adam X
Adam W
Adam Z
¿Cómo implementar un modelo MLP con PyTorch paso a paso?
Utilizando PyTorch, la creación de un modelo Multi Layer Perceptron (MLP) sigue estos pasos simples pero indispensables:
Importación y configuración:
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import time
Definir la arquitectura de red neuronal:
classMLP(nn.Module):def__init__(self, input_dim, hidden_dim, output_dim):super(MLP, self).__init__() self.layer1 = nn.Linear(input_dim, hidden_dim) self.layer2 = nn.Linear(hidden_dim, output_dim)defforward(self, x): x = F.relu(self.layer1(x)) x = self.layer2(x)return x
Entrenamiento y optimización:
Instanciar el modelo con dimensiones específicas.
Elegir la función de pérdida (error cuadrático medio).
Seleccionar un optimizer, frecuentemente Adam.
Crear datos ficticios y ejecutar entrenamiento.
model = MLP(10,100,1)criterion = nn.MSELoss()optimizer = optim.Adam(model.parameters(), lr=0.01)
¿Es posible entrenar modelos con GPU en PyTorch?
Sí, PyTorch permite usar GPU para acelerar los procesos. El paso para verificar disponibilidad es sencillo:
Luego, transfiriendo nuestros tensores al dispositivo elegido, podemos reducir significativamente los tiempos de procesamiento de grandes conjuntos de datos o arquitecturas más complejas.
Ejemplo práctico de uso con GPU:
x = torch.randn(2000000,10).to(device)y = torch.randn(2000000,1).to(device)
Te invitamos a dejar tu comentario sobre cualquier punto adicional sobre PyTorch o la implementación de modelos avanzados que te interese explorar más a fondo.
me dolió la cabeza, investigue en internet un poco pero creo que le tome la idea, mi aporte.
conceptos clave:
Función de activación: existen muchas y depende del problema que se trata de solucionar, básicamente es un umbral ante el que responde o no una neurona, ¿recuerdan a McFly de volver al futuro?, el no respondía cuando se la montaban, a menos que le dijeran gallina, la función de activación de McFly era esa palabra. (claro no es tan fácil pero se entiende)
Función de coste: como sabes que el modelo esta respondiendo mal? bueno porque sabes la respuesta correcta, la función de coste es la diferencia que hay entre las respuestas azarosas que da el modelo vs las respuestas correctas o esperadas, como es una función se puede graficar, así que empiezas desde el primer valor al azar y vas reajustando hasta que el error sea casi 0, la grafica que se da al hacer esto es el descenso del gradiente.
Backpropagation: es un algoritmo que en términos mas mundanos busca la culpa, empezando por la ultima capa (la de salida), es como esa estrategia de los 5 porqués que creó Honda, empieza a preguntar de pa a atrás capa por capa cual fue la neurona que causo el error y en esa cadena de responsables se ajustan los pesos, como cuando en una empresa algo sale mal y empieza a escalar el problema capa por capa hasta encontrar el responsable
(obviamente no es tan simple, se calculan las derivadas parciales de las funciones de coste y de activación capa por capa)
que buena explicacion gracias. yo ando intentando entender
Gracias por tu aporte, me ha ayudado a comprender mejor los conceptos.
🎯 PYTORCH EN RESUMEN
🧠 ¿Qué es PyTorch?
Framework creado por Meta (Facebook).
Diseñado para Machine Learning y Deep Learning.
Permite construir redes neuronales desde cero o con base previa.
Ofrece librerías y herramientas para acelerar el desarrollo.
🔢 ¿Qué es un Tensor?
Estructura n-dimensional (como listas, vectores o matrices).
Contiene datos numéricos organizados en filas y columnas.
Es la unidad básica para representar datos en modelos.
🔁 ¿Qué es Autograd?
Sistema que realiza derivación automática.
Calcula gradientes sin intervención manual.
Esencial para el entrenamiento mediante backpropagation.
Ahorra tiempo y evita errores al derivar funciones complejas.
🛠️ Optimizer: Motor del Aprendizaje
Ajusta pesos del modelo para mejorar su rendimiento.
Determina la tasa de aprendizaje (learning rate).
Utiliza algoritmos como Adam para escapar de mínimos locales.
📌 Tipos de optimizadores en PyTorch:
Adam
AdamX
AdamW
AdamZ
🏗️ Modelo MLP (Multi Layer Perceptron): Pasos
Importar librerías: import torch, torch.nn, torch.optim, torch.nn.functional, time
Ideal para grandes volúmenes de datos y modelos complejos.
🔍 Cómo verificar y usar la GPU:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = torch.randn(2000000, 10).to(device)
y = torch.randn(2000000, 1).to(device)
Espectacular, gracias por el aporte 👍
esta imagen la haces con alguna ia
# 1. Preparar el modelomodel = MLP(input_dim=10, hidden_dim=64, output_dim=1)criterion = nn.MSELoss()# Mean Squared Erroroptimizer = optim.Adam(model.parameters(), lr=0.01)# 2. Preparar datos (ejemplo)X_train = torch.randn(1000,10)y_train = torch.randn(1000,1)# 3. Ciclo de entrenamientomodel.train()for epoch inrange(100):# Forward pass predictions = model(X_train) loss = criterion(predictions, y_train)# Backward pass optimizer.zero_grad() loss.backward() optimizer.step()if epoch %10==0:print(f"Época {epoch}, Pérdida: {loss.item():.4f}")
En mi caso me salto el siguiente error:
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument mat1 in method wrapper_CUDA_addmm)
Y tuve que agregar model.to(device) después de declarar model para que me funcione:
model =MLP(imput_dim=10, hidden_dim=32, output_dim=1)model.to(device)
Los fundamentos de PyTorch se centran en la estructura del tensor, que es una representación n-dimensional similar a listas o matrices. Esta estructura permite realizar cálculos eficientes. PyTorch incluye un mecanismo llamado autograd, que calcula derivadas automáticamente, facilitando el entrenamiento de modelos de machine learning. También cuenta con optimizadores como Adam, que ajustan los parámetros del modelo durante el aprendizaje. Comprender estos conceptos es esencial para construir y entrenar redes neuronales en este framework.
Clase 7 — Fundamentos de PyTorch para modelos de machine learning
Idea central
PyTorch es la herramienta práctica que permite convertir toda la teoría anterior (redes neuronales, backpropagation, optimización) en código ejecutable que entrena modelos reales.
Es el puente entre:
Matemática del aprendizaje automático
Implementación real de modelos de IA
Conceptos clave
1️⃣ Tensor: la unidad básica
Un tensor es una estructura numérica n-dimensional (generaliza escalar, vector y matriz).
En deep learning:
Todos los datos son tensores
Todos los cálculos ocurren sobre tensores
👉 Sin tensores no hay redes neuronales.
2️⃣ Autograd: derivadas automáticas
PyTorch incluye Autograd, que:
Calcula automáticamente gradientes
Permite ejecutar backpropagation sin derivar a mano
Hace posible entrenar modelos grandes
👉 Es lo que vuelve práctico el deep learning moderno.
3️⃣ Optimizer: cómo aprende el modelo
El optimizer ajusta los pesos para minimizar la función de pérdida.
Ejemplo común:
Adam (el más usado en deep learning)
Controla:
Gradientes
Learning rate
Convergencia del modelo
Cómo se construye un modelo en PyTorch
Paso 1: Definir la arquitectura (MLP)
Se crea una clase que hereda de nn.Module:
Capas lineales (nn.Linear)
Función de activación (ReLU)
Método forward() → define el flujo de datos
👉 Aquí se define la estructura del cerebro artificial.
👉 Ya tienes las bases matemáticas + conceptuales + técnicas de los LLMs.
Mini-resumen en una frase
PyTorch convierte la teoría del aprendizaje profundo en modelos reales entrenables mediante tensores, autograd y optimización.
Se que debemos tener algunos conceptos claros antes de iniciar este curso pero siento que ya se asumen muchas cosas y los videos estan muy largos para la cantidad de conceptos que se explican. Me encantan las explicaciones del profe pero si seria genial dedicarle un video a cada concepto
muy bueno, espero que en la ruta de IA expliquen con más detenimiento y más interactivo respecto a ir desarrollando el código explicando su funcionamiento para un mayor entendimiento, sin embargo, sé que tomaría mucho más tiempo el curso.
OJO:
Un vector es esencialmente un array de 1 dimensión, mientras que un tensor puede tener cualquiernúmero de dimensiones.
Vector: Es un array de una dimensión. Imaginemos una lista de números en una sola fila o columna. Matemáticamente, es un tensor de rango 1.
Ejemplo en Python (con NumPy): [1, 2, 3]
Matriz: Es un array de dos dimensiones (filas y columnas). Es un tensor de rango 2.
Ejemplo: [[1, 2], [3, 4]]
Tensor: Es un array que puede tener N dimensiones.
Un número escalar (como 5) es un tensor de rango 0.
Un vector es un tensor de rango 1.
Una matriz es un tensor de rango 2.
Un cubo de números (como una imagen RGB) sería un tensor de rango 3 (alto, ancho, canales de color).
El término "tensor" es el nombre matemáticamente correcto para este tipo de estructura de datos. En física y matemáticas, los tensores son objetos que generalizan escalares, vectores y matrices a dimensiones superiores. El deep learning se basa en operaciones matemáticas complejas (como el cálculo tensorial), usar el término correcto es más preciso y universal.
Hey que onda, estudie línea por línea y deje en comentarios lo que aprendí. Esta es la primera parte, de seguro te puede ayudar en algo.
# Seleccionamos el dispositivo: GPU si está disponible, sino CPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("Usando dispositivo:", device)
# Plantilla de la estructura de nuestra red neuronal. Multicapa Percepton(MLP) es una red neuronal
class MLP(nn.Module): # Con nn.module heredamos funciones especiales para poder trabajar un MLP
def __init__(self, input_dim, hidden_dim, output_dim): # En esta función creamos las capas. Input_diem: Numero de caracteristicas de nuestros datos, hidden_dim: Numero de neuronas en la capa oculta, puedes poner tantas como quieras, normalmente se usa 32, 68 o 124 para empezar, no pongas pocas porque no aprendera la red ni demasiadas porque causara sobreajuste, output_dim: numero de neuronas de salida, ponemos 1 porque solo necesitas la prediccion de un solo valor. Si predijieramos si una imagen es perro o gato tendriamos 2 de salida, la neurona que tenga el valor mas alto indicaria si es gato o perro
super(MLP, self).__init__() # Aqui llamamos a la clase padre de nn.Module para poder hacer esas funciones especiales (en segundo plano) de Pytorch como gestionar parametros, hacer el modelo visible, configurar el sistema para el entrenamiento, etc.
self.fc1 = nn.Linear(input_dim, hidden_dim) # Aqui creamos la capa oculta con 32 neuronas. Podemos tener tantas capas ocultas como queramos. Aqui la capa realizará un multipricacion matricial (x*W) y desuma (+b) para cada neurona simultaneamente
self.fc2 = nn.Linear(hidden_dim, output_dim) # Aqui creamos la capa de salida con 1 neurona. Esta neurona tomara los resultados de las 32 neuronas de la capa oculta y el resultado de esta neurona de salida sera la prediccion final del modelo
def forward(self, x): # En esta funcion ahora si ponemos a funcionar las capas
x = F.relu(self.fc1(x)) # Primero pasamos los datos X (los datos de entrenamiento) por la capa oculta y despues aplicamos la funcion de activacion con F.relu para poder aprender patrones mas complejos de los datos
x = self.fc2(x) # Ahora el resultado de la capa oculta se lo pasamos a la capa de salida que nos da la prediccion en una salida en la variable X
return x # Retornamos la prediccion final del modelo (X)
Existen varias alternativas a PyTorch para el desarrollo de modelos de Machine Learning y Deep Learning. Algunas de las más destacadas son:
TensorFlow: Desarrollado por Google, es uno de los frameworks más populares. Ofrece flexibilidad y una amplia comunidad.
Keras: Inicialmente un wrapper para TensorFlow, Keras permite construir y entrenar modelos de manera más sencilla, ideal para principiantes.
MXNet: Utilizado por Amazon, es conocido por su eficiencia en el uso de recursos y su capacidad para escalar.
Caffe: Aunque más limitado en comparación, es rápido y eficiente para aplicaciones de visión por computadora.
Cada uno tiene sus ventajas y desventajas, así que la elección dependerá de tus necesidades específicas en el desarrollo de modelos.
El descenso del gradiente es un algoritmo de optimización que se utiliza para minimizar la función de pérdida en modelos de machine learning. Funciona calculando el gradiente (o derivada) de la función de pérdida respecto a los parámetros del modelo y ajustando estos parámetros en la dirección opuesta al gradiente. Este proceso se repite iterativamente hasta que se alcanza un mínimo.
Los biases (sesgos) son parámetros adicionales en las redes neuronales que permiten ajustar la salida del modelo, independientemente de la entrada. Esto ayuda a que el modelo aprenda patrones más complejos, ya que le permite desplazarse hacia arriba o hacia abajo en la función de activación.
entendí la referencia
Donde estan los recursos de esta clase?
Que buena explicacion gracias
Hice un NotebooKLM para poder entender mejor como funciona y le pedi resumen con todas fuentes que encontro y infografias mapas mentales y audio y un video para entenderlo mucho mejor
¿Dónde encaja la función forward aquí?
La función forward es literalmente la línea de ensamblaje principal de tu red neuronal. Cuando heredas de nn.Module, defines las piezas individuales (como las capas lineales) en la inicialización, pero es exclusivamente en el método forward donde dictas exactamente cómo fluyen los datos a través de ellas. Imagina que estás construyendo un sistema de purificación de agua: primero compras los filtros de carbón y las mallas de arena (esto es la inicialización), y luego conectas las tuberías para que el agua pase primero por la arena, luego por el carbón y finalmente salga limpia (esto es el forward). Aquí es donde aplicas las funciones de activación, como ReLU, decidiendo qué información matemática pasa a la siguiente capa y cuál se bloquea. Sin esta función, tus capas serían solo variables aisladas sin capacidad de procesar información secuencialmente.
Entender PyTorch es como observar el vuelo de un dron en tiempo real:
Los Tensores son la telemetría: cada ráfaga de viento y coordenada GPS convertida en un dato organizado.
Autograd es el sentido del equilibrio: calcula al instante qué motor debe corregir para no caer, sin que tengamos que resolver la física a mano.
El Optimizer es la pericia del piloto: el ajuste sutil que aprende de cada balanceo para lograr un vuelo estable.
En resumen, PyTorch no solo procesa números; automatiza la búsqueda de la armonía entre el error y la precisión.