LECCIÓN 1 · FUNDAMENTOS

¿Qué es PyTorch?

Antes de escribir código, entendamos qué problema resuelve PyTorch y por qué es la herramienta dominante para construir redes neuronales — desde la investigación hasta producción.

1. La idea en una frase

PyTorch es una librería de Python para hacer cálculo numérico con tensores, calcular gradientes automáticamente y construir redes neuronales. Si ya hiciste el curso de redes a mano, PyTorch es lo que automatiza todo eso para que escales a millones de parámetros.

Piensa en PyTorch como "NumPy con superpoderes": arrays que además corren en GPU y que recuerdan cómo se calcularon, para poder derivarse solos. Esos dos añadidos son los que hacen posible entrenar redes neuronales.

2. Los tres superpoderes

🧮

Tensores

La estructura de datos central: arrays N-dimensionales (como los de NumPy) pero que pueden vivir en la GPU. Todo en PyTorch son tensores.

🔄

Autograd

Calcula gradientes automáticamente. Escribes solo el forward; PyTorch deriva el backward por ti (el backprop de tu curso, gratis).

GPU

Mueve los cálculos a la tarjeta gráfica con una línea. Las operaciones matriciales se vuelven decenas de veces más rápidas.

Encima de eso, el módulo torch.nn ofrece capas, funciones de pérdida y optimizadores listos para usar. Lo veremos a partir de la lección 5.

3. ¿Lo tengo instalado? Comprobación

PyTorch ya está instalado en el entorno de este proyecto. Lo confirmamos con:

import torch
print(torch.__version__)
salida real2.12.0+cpu

El +cpu indica que es la versión para CPU (sin GPU NVIDIA). Es perfecta para aprender; todo lo del curso funciona igual, solo que el entrenamiento de modelos grandes sería más lento.

4. Tu primer tensor (cálculo real)

Un tensor se crea con torch.tensor(...). Creemos una matriz 2×2 y miremos sus propiedades:

t = torch.tensor([[1.0, 2.0],
                  [3.0, 4.0]])
print(t)
print(t.shape, t.dtype)
salida realtensor([[1., 2.], [3., 4.]]) torch.Size([2, 2]) torch.float32

Las operaciones son naturales. Sumar 1 a cada elemento:

print(t + 1)
salida realtensor([[2., 3.], [4., 5.]])

5. ¿Igual que NumPy? Casi — y se hablan entre sí

Si conoces NumPy, te sentirás en casa: misma idea de arrays y operaciones. De hecho, puedes convertir de uno a otro sin copiar datos:

import numpy as np
a = np.array([10., 20., 30.])
t = torch.from_numpy(a)        # numpy → torch
print(t)
salida realtensor([10., 20., 30.], dtype=torch.float64)
NumPyPyTorch
Arrays N-dim
Corre en GPU
Gradientes automáticos✅ (autograd)
Capas de red listas✅ (torch.nn)

6. El superpoder estrella: autograd (adelanto)

Esto es lo que distingue a PyTorch de NumPy. Marca un tensor con requires_grad=True y PyTorch recordará todas las operaciones para poder derivar. Calculemos y = x² en x = 3 y pidamos su derivada:

x = torch.tensor(3.0, requires_grad=True)
y = x**2
y.backward()      # autograd calcula dy/dx
print(x.grad)     # el gradiente queda guardado aquí
salida realy = 9.0 x.grad = 6.0
✍️ El cálculo a mano, sin omitir pasos
1) El valor de y:   y = x²  = 3²      = 9     ✓ coincide con la salida
2) La derivada:     d(x²)/dx = 2·x                (regla de la potencia)
3) Evaluada en x=3: 2·x = 2·3         = 6     ✓ coincide con x.grad
La derivada de es 2x, que en x=3 vale 6. PyTorch lo calculó solo, sin que escribiéramos ninguna fórmula de derivada. Multiplica esto por millones de parámetros y tienes el entrenamiento de una red neuronal. Le dedicamos la lección 4 entera.

7. ¿Para qué se usa en el mundo real?

Resumen: PyTorch = tensores (como NumPy) + autograd (gradientes gratis) + GPU + herramientas de red (torch.nn). En la próxima lección nos metemos de lleno con los tensores: cómo crearlos, sus tipos, formas y cómo indexarlos — la base de todo lo demás.