0
respostas

[Projeto] Comparando o notebook original com a minha versão: o que mudei e quais foram os ganhos.

Pessoal,

Como exercício de aprendizado, comparei o notebook original do curso (com leves ajustes de CPU) com uma versão minha focada em generalização e redução de overfitting. Seguem mudanças e resultados.

Notebooks

Contexto rápido

  • Tarefa: classificação (imagens 32×32).
  • Ambiente: CPU, com num_workers, prefetch, etc., e reprodutibilidade (seeds + determinístico).
  • Métrica: acurácia de validação (observando gap treino–val).

O que mudei na minha versão (além do original)

Dados / Transforms

  • Normalize (por canal, CIFAR-10): aplico ((x-\mu)/\sigma) após ToTensor() com estatísticas do treino do CIFAR-10, o que estabiliza a otimização e ajuda a convergência. Opacus usa MEAN=(0.4914,0.4822,0.4465) e STD=(0.2023,0.1994,0.2010). Ref.: https://opacus.ai/tutorials/building_image_classifier
  • RandomCrop(32, padding=2) e RandomHorizontalFlip: aumentam diversidade e ajudam a conter overfitting.

Perda / Regularização

  • CrossEntropyLoss com label_smoothing=0.05 (calibragem/robustez).
  • Weight Decay no otimizador.

Otimizador e Scheduler

  • CosineAnnealingLR (LR decai suave; fim ~3e-5).
  • Mantive Adam (com WD).

Disciplina de treino

  • Early Stopping e Checkpoint do melhor val_loss (avaliar sempre o best-val).
  • EMA (Exponential Moving Average) dos pesos (predições mais estáveis).

Reprodutibilidade e CPU

  • Seeds (random, numpy, torch) + torch.use_deterministic_algorithms(True).
  • DataLoader com persistent_workers, prefetch_factor, drop_last e cap de threads nos workers.

Obs.: Arquitetura permaneceu essencialmente a mesma (sem Dropout extra). O ganho veio de pipeline, regularização e política de LR.

Resultados

Originaloverfitting evidente: treino ~78% vs validação ~62–65% e val_loss alto (a professora Camila interrompeu o treinamento ao perceber).

Minha versão (v2) — validação estável em ~75.8–76.1%; melhor modelo salvo por val_loss (ex.: epoch 145, val_loss=0.8855, val_acc=76.05%; LR final ~3e-5).

Comparativo resumido

AspectoOriginalMinha versão (v2)
TransformsBásico (sem normalização)Normalize + RandomCrop + HorizontalFlip
LossCrossEntropyCrossEntropy + Label Smoothing (0.05)
Weight DecaySim
SchedulerCosineAnnealingLR
Early Stopping / CheckpointSim (por val_loss)
EMA de pesosSim
ReprodutibilidadeSeedsSeeds + determinístico
Val Acc (faixa)~62–65%~75.8–76.1%
Gap treino–val~13 pp~1–2 pp (bem controlado)
Tempo/época (aprox.)~5.8–6.0 s~7.2–7.3 s (↑ pelo pipeline)

Gráficos

Loss por época — Original
Loss - Original

Loss por época — Minha versão (v2)
Loss - (v2)

MC - Original
MC
MC - Minha versão (v2)
MC v2

Principais aprendizados

  1. Augmentação + Normalização mudam o jogo (mais diversidade, sinais mais estáveis).
  2. Label smoothing (+ WD) melhora generalização sem mudar a rede.
  3. Cosine LR guia o treino sem “degraus”; fim com LR pequeno ajuda a não superajustar.
  4. EMA + Early Stopping + Checkpoint garantem uso do melhor ponto de validação.

Estudo pontual: não continuei tunando além disso.

Abraços!

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora