1Un tensor de PyTorch es un arreglo como los de NumPy que además puede vivir en la GPU y recordar las operaciones que lo produjeron. Un lote de imágenes tiene forma (N, canales, alto, ancho), y reshape, permute, flatten, unsqueeze, cat y stack cambian esa forma sin cambiar los números.
2Autograd es la clase Valor del tema 17 hecha a escala: requires_grad=True arma el grafo, .backward() llena los .grad, y los gradientes se acumulan hasta que se ponen en cero.
3Un modelo es una clase de nn.Module con sus capas en __init__ y el camino de los datos en forward. nn.CrossEntropyLoss recibe logits y aplica el softmax por dentro.
4Dataset da ejemplos sueltos y DataLoader los agrupa en lotes mezclados. El bucle de entrenamiento es siempre zero_grad, adelante, pérdida, backward y step; para medir, eval() y no_grad().
5Las funciones entrenar() y evaluar() empaquetan ese bucle y se reutilizan en el resto de la ruta. Un MLP de unos cien mil parámetros acierta el 86 % de las prendas de prueba de FashionMNIST, y sus errores se concentran en camisas, camisetas, suéteres y abrigos.
6El mismo código corre en CPU o GPU moviendo modelo y datos con .to(device); las semillas fijas lo hacen reproducible, y state_dict guarda y carga el modelo entrenado.