WorkSteps 1 and 3
Two models
t = 1 Summer term 2024
Skills step 1 wrote into the state:
- Python
- PyTorch
- CNNs
- Held-out evaluation
t = 3 Summer term 2025
Skills step 3 wrote into the state:
- Python
- PyTorch
- PyTorch Lightning
- Recurrent nets
An image classifier I built alone and a sound event detector built in a team of four, both scored on data they never saw.
Image classification, 20 classes, built alone
73.4%
accuracy on the university’s hidden test set
- Grayscale image
- 32
- 64
- 96
- 96
- 64
- 20 classes
Sound event detection, 10 classes, team of four
37.7
challenge cost on the test set, where predicting nothing scores 108.9. Lower is better.
- Predicting nothing108.86
- BiGRU, one threshold for all46.43
- A threshold per class40.23
- Cost-specific thresholds38.62
- Cost-weighted loss37.69
my system the team’s improvements
- Speech
- Dog bark
- Rooster crow
- Shout
- Lawn mower
- Chainsaw
- Jackhammer
- Power drill
- Horn honk
- Siren
Image classification
My final project for Programming in Python II: a convolutional network in PyTorch that sorts grayscale images into 20 classes. I did the whole pipeline myself, from preparing the data to the architecture, training and evaluation. Five convolutional layers of 32, 64, 96, 96 and 64 channels, 3×3 kernels throughout. On the university’s hidden test set it scored 73.4%.
The training plot is the honest part. Over 44 epochs the training loss kept falling, to 0.31, while the evaluation loss levelled off near 1.0 from about epoch 10. Everything below that line is the model getting better at data it had already seen.
Sound event detection
A four-person project for the MLPC course in 2025: find ten kinds of urban noise, from speech and dog barks to jackhammers and sirens, in 1.2-second stretches of recording. My part was the detection system and its evaluation.
A two-layer bidirectional GRU with 1024 hidden units reads a 768-number audio embedding every 120 ms; its frame predictions are averaged over each segment. The challenge cost punishes a missed event far more than a false alarm, so one threshold for every class was the wrong choice. Searching a threshold per class took the cost from 46.4 to 40.2. The team’s improvements, cost-specific thresholds and a cost-weighted loss, brought it to 38.6 and then 37.7. Predicting nothing at all scores 108.9.
A GRU is the LSTM’s smaller cousin: the same idea of gated memory, with two gates instead of three. It is the reason this site is drawn the way it is.
Why the numbers look like this
Neither number is a training score. The classifier’s comes from the university’s hidden test set; the detector’s from data split by recording, so no file sits in two sets. Not every idea helped: a smaller GRU with attention trained faster and scored worse, and we kept the larger model.
Stack
- Python
- PyTorch
- PyTorch Lightning
- CNN
- BiGRU
Carried
- Python went on to step 8, Regius