Neural network study

Back to visual explanations
How does a network recognise handwriting?

Which digit is this?

A real handwritten digit becomes a grid of brightness values. The network receives pixels, not the correct answer.

Aℓ = ReLU(Wℓ ∗ Aℓ−1 + bℓ)
Choose a handwritten digit

Real test images · sample 1 of 3 per digit · labels are from the dataset

fifteen02

Each square is one feature map. Connections show which channels feed the next layer; yellow follows the selected channel. Watch the filters scan and the responses appear, then inspect a channel below. This is a forward pass through an already-trained model.

The image the network receives

Brightness represents the input value at each pixel. Choose another handwritten digit, rotate it or add noise to change what all subsequent layers receive.

1 channel · 32 × 32 pixels

Each map uses its own brightness scale. Brightness can be compared within a map, not between maps.

Look inside one convolution
Model and visualisation notes

This compact teaching CNN has four learned layers: three 3 × 3 convolutions (4, 8 and 12 channels), each followed by ReLU, and a 12-to-10 linear classifier. Global average pooling connects the final convolution to the classifier. It was trained from scratch on 60,000 public MNIST handwriting images, independently of any client model. The 28 × 28 images are scaled to 0–1 and padded with two black pixels on each edge.

On the separate 10,000-image test set, this model achieved 92.65% accuracy on unmodified images. The examples here are the first three test images of each digit, selected without checking their predictions. MNIST dataset and source.

Every feature map, average and score comes from a real forward pass in your browser. The yellow 3 × 3 patch spans every incoming channel. Output filters are revealed together at matching spatial positions. Animation reveals the precomputed result; it does not represent execution speed or training. Graph edges connect whole channels: every convolutional output reads every incoming channel, pooling reduces each map separately, and the classifier connects all twelve averages to all ten outputs. The graph does not draw individual spatial kernel weights. Travelling dots guide the explanation; they do not encode activation values. The smaller convolution lesson has independent input and playback controls.

    fifteen02