Objetivo: leer las dimensiones de un tensor y prevenir la mayoría de los errores de forma. Requisito previo: NumPy elemental.
Un tensor es un arreglo multidimensional homogéneo. Un escalar tiene cero ejes, un vector un eje, una matriz dos ejes. El rango no es el número de elementos: es el número de ejes.
| Dato | Forma habitual |
|---|---|
| Tabla densa | (batch, features) |
| Imágenes PyTorch | (batch, channels, height, width) |
| Texto tokenizado | (batch, sequence_length) |
| Logits multiclase | (batch, classes) |
import torch
x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4El batch agrupa varios ejemplos procesados en paralelo. Un mini-batch de 32 imágenes produce una estimación del gradiente menos exacta que el conjunto completo, pero mucho menos costosa. Esta pequeña cantidad de ruido puede incluso ayudar a la generalización.
Los pesos suelen estar en float32. Las etiquetas que espera
CrossEntropyLoss son enteros torch.long. Todos los datos de una operación
deben encontrarse en el mismo dispositivo: CPU, CUDA u otro acelerador.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = x.to(device=device, dtype=torch.float32)En cada capa, escribe la forma esperada antes que el código. Para una capa densa
Linear(128, 10), el último eje de entrada debe medir 128. Utiliza reshape con prudencia
y prefiere flatten(start_dim=1) para preservar el eje del batch.
NHWC y NCHW.squeeze().float32 a una pérdida que espera índices de clase.¿Cuál es la forma de 64 imágenes RGB de 32×32 en PyTorch? ¿Qué eje interpreta una capa densa como dimensión de entrada?
(64, 3, 32, 32). La capa densa utiliza el último eje.
Parte de X.shape = (32, 3, 64, 64). Hazlo atravesar una convolución que produzca 16
canales, una reducción espacial a la mitad, un pooling global y una cabeza de 7 clases. Escribe
cada forma y tres aserciones Python. Éxito: el eje del lote sigue siendo 32 y la salida vale
(32, 7).
Lectura: el eje B atraviesa toda la red; solo las dimensiones de representación se
transforman. Antes del entrenamiento, comprueba explícitamente X.ndim, el orden de los canales y
la concordancia entre logits.shape[0] e y.shape[0]. La trampa principal es una
permutación silenciosa de los ejes: el código puede ejecutarse mientras aprende una estructura
que no tiene ningún sentido.