
Deep CNN Image Classifier
SE-ResNet · 16-class image classifier
Ranked 1st in the graduate cohort: the instructor's PA2 results announcement reported the best submitted model at 78% test accuracy, more than 20 points above the 57% base, and that was this one. A from-scratch pre-activation SE-ResNet with a modern training recipe (Mixup/CutMix, SE attention, stochastic depth, cosine LR), tuned across nine GPU-cluster experiments; 77.66% best validation accuracy.
Generated geometric tiles in the 32x32 spirit of the dataset. Click one for a deterministic toy verdict (seeded, same every time).
Pick a tile to see how a 16-way softmax verdict reads: top classes ranked with confidence bars.
Synthetic preview. No real data: the tiles are generated patterns and the verdicts are seeded toy numbers, not output of the coursework model (a from-scratch SE-ResNet, private, trained on a GPU cluster).
Course baseline 56.38% · best val 77.66% · graded 300-epoch run 77.12% at epoch 260. Real numbers, extracted verbatim from the HW2 training log and submission notes; not produced by the toy tiles above. The coursework repo is private.
Synthetic tiles and seeded toy verdicts, not the private coursework model. The training-run panel is real: extracted verbatim from the HW2 notebook log and submission notes.
Graduate Deep Learning coursework: both networks are written from scratch in PyTorch. The baseline is a plain conv/batch-norm/ReLU/pool stack built from a layer spec; the improved model is a wide pre-activation SE-ResNet (96/192/384 filters, 4 residual blocks per stage, Squeeze-and-Excitation channel attention) with linearly scheduled stochastic depth. The training recipe stacks batch-level augmentation (random flip, pad-4 crop, random erase), Mixup and CutMix, label smoothing at 0.05, gradient clipping at 5.0, cosine-annealed LR from 0.1 to 1e-6 with a 10-epoch warmup (300 epochs in the graded run; the 77.66% best Colab run used a 200-epoch budget), Nesterov SGD, best-checkpoint restoration, and test-time augmentation in the submission pipeline. Trained on 32,000 32×32 RGB images (6,400 validation, 9,600 test, 16 classes) through a Kaggle-style submission flow, with nine named experiments (exp_a..exp_i) sweeping width, depth, seeds, SWA, SAM, TTA and epoch budgets as SLURM batch jobs on a university GPU cluster. Net result: 56.38% baseline to 77.66% best validation accuracy.
- PyTorch
- Python
- CNN / SE-ResNet
- Matplotlib
- SLURM
- Kaggle
- Cohort rank
- 1st of the class
- Test accuracy · cohort best
- 78%
- Baseline → improved
- 56.38% → 77.66%
- Best val accuracy
- 77.66% (16 classes)
Where the numbers come from
1st in the cohort / 78% test: the course instructor's PA2 results…
1st in the cohort / 78% test: the course instructor's PA2 results announcement reported the cohort's best submitted model at 78% test accuracy, more than 20 points above the 57% base model; this was Karim's submission (ranked 1st). The class grade distribution was mean 85.7 / median 90. The model's own validation log shows 77.66% best validation accuracy, consistent with the reported 78% test.
Two real runs of the same recipe: the best Colab run logged…
Two real runs of the same recipe: the best Colab run logged 77.66% best validation accuracy on a 200-epoch budget, while the graded submission ran the saved 300-epoch config and finished at 77.12% (best checkpoint at epoch 260).


What I'd improve
The headline 77.66% is a best run, not a mean: the graded 300-epoch submission of the same recipe finished at 77.12% (the best run used a 200-epoch budget), and several of the nine experiments changed multiple variables at once (exp_d adds SAM while deepening to 6/6/6 blocks; exp_h widens, adds SAM and fixes SWA together), so attributing each point of accuracy to a specific trick is fuzzy. The next pass is a one-variable-at-a-time ablation grid with seed-averaged runs, so every component earns its place in the recipe. A fine-tuned pretrained backbone would be the pragmatic ceiling test, but the point of the coursework was building and training the network from scratch.