A model you trained yourself, with an honest ablation — retraining with one component removed or swapped at a time, to measure what each one contributes. Pick one:
- Same thread: a small network on your Chapter 3 features, in raw PyTorch. Tune on the same training and validation data, then compare once on the same test with your Chapter 3 baseline and boosted tree. Losing to the trees is worth reporting. The reference lab sets up the same experiment
- A classifier on 200-plus photos you took, in raw PyTorch, deployed as a small demo
- A character-level language model on a corpus that means something to you, with the modern architecture pieces swapped in one at a time
- A reproduction of one bounded paper component, implemented from the paper and compared against a reference
Whichever you pick, save the split and data versions, configuration, environment, seed and a full training checkpoint: model, optimiser, scheduler and scaler if used, random-generator states and progress. Save preprocessing and tokeniser versions too. Resuming mid-epoch can also need the sampler or data-loader position. Practise resuming from it. To judge whether an ablation helped, record how results vary across repeated runs. A seed does not guarantee identical results across releases or devices (PyTorch reproducibility notes).
Keep a final test untouched until model selection is done. Include a real ablation, failed runs, one diagnosed failure, and a demo with its inference settings recorded. If hosting is unavailable, a reproducible local demo is fine, but do not present a screenshot as a live service.
The ablation is where most of the value sits. A table showing that one change mattered and three were within noise, with wall-clock times alongside, says more about you than a good final number.
Handoff to Chapter 5. Carry these habits forward: an untouched test, replayable runs and a fair baseline comparison. Chapter 5 applies them to documents from your Chapter 2 domain, starting from a pretrained model rather than one you trained.