David Klingbeil

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.

Context
Coursework, BSc Artificial Intelligence
Where
JKU Linz
Teams
Alone, and a team of four
When
Summer terms 2024 and 2025

Image classification, 20 classes, built alone

73.4%

accuracy on the university’s hidden test set

0.51.01.52.0010203040evaluation 1.00training 0.31the gap a training score hides
Loss per epoch, from the run that produced the model
  1. Grayscale image
  2. 32
  3. 64
  4. 96
  5. 96
  6. 64
  7. 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.

  1. Predicting nothing108.86
  2. BiGRU, one threshold for all46.43
  3. A threshold per class40.23
  4. Cost-specific thresholds38.62
  5. 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
Both numbers come from data the models never saw while training. The loss curves are read from the training plot in the classifier’s repository, the costs from the team’s MLPC report.

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