Running a classroom is an ops problem
Details the paper doesn't dwell on: the parts I built so the activity wouldn't derail.
Who may uploadEvery phone announced its device ID; new ones landed in a pending queue until the teacher approved them. A blacklist handled the inevitable joker.
Which classroomA session code separated parallel classes; the wrong code got its own HTTP status and an in-app prompt.
PhasesTesting stayed locked (HTTP 412: "it's not time yet!") until the teacher opened it, so nobody could peek before the network was trained.
Mess controlStudents could delete their last shot; the teacher could prune anything. The pile still ended up with black frames and empty desks, a lesson in itself.
Live finaleThe trained net ran on the presenter's laptop against a webcam feed, drawing class probabilities in real time while the audience tried to fool it.
The activity's script, compressed
- Frame the problem. Three classes, 100 held-out evaluation photos, a 33% baseline: what would "good" even mean?
- The room shoots the dataset. 80–200 photos per class in ~10 minutes, straight into the server's three folders.
- Train, and celebrate too early. Training accuracy marches to 100%. Applause.
- Evaluate, and deflate. On unseen photos it scores under 50%. The network memorized, it didn't learn. That word: overfitting.
- Augment and retrain. Rotate, flip, zoom, recolor: the net never sees the same photo twice. Evaluation climbs to ~75%.
- Play against it live. Webcam, probability bars, and a room trying its best to break their own model.
What's smaller here: this page trains a ~3,600-parameter convnet (two conv layers + pooling) on 24×24 grayscale drawings so it converges in seconds; the classroom trained a Keras convnet on 64×64 color photos for a few minutes. Same curves, same lesson.
The activity and its paper, Introducing Machine Learning Concepts by Training a Neural Network to Recognize Hand Gestures (Giusti, Huber & Gambardella, EAAI-18), are the work of my IDSIA colleagues; I built the data-collection app, the web service and the model-serving around it, which this page recreates. Original repository ↗