nn.Module es la clase base para todos los modelos de PyTorch. Crea una subclase de ella para definir capas, implementar forward() y registrar parámetros que los optimizadores actualizan durante el entrenamiento.
# Congelar la base, entrenar solo la cabezafor param in model.conv1.parameters(): param.requires_grad = False# Diferentes tasas de aprendizaje por grupooptimizer = torch.optim.Adam([ {"params": model.conv1.parameters(), "lr": 1e-5}, {"params": model.fc2.parameters(), "lr": 1e-3},])
Llamar a forward() directamente - omite los hooks y los envoltorios de nn.Module. Solución: siempre llama a model(x).
Olvidar super().__init__() - submódulos no registrados. Solución: llama a super().__init__() primero en __init__.
No llamar a model.eval() para inferencia - dropout y batch norm se comportan incorrectamente. Solución:model.eval() antes de la inferencia; model.train() para entrenamiento.
Crear capas en forward - nuevos parámetros en cada pasada, nunca entrenados. Solución: define todas las capas en __init__.
Desajuste de dispositivo - modelo en GPU, entrada en CPU. Solución:model.to(device) y x.to(device).
BatchNorm con batch_size=1 - las estadísticas no están definidas. Solución: usa model.eval() o nn.GroupNorm para lotes pequeños.