1 Draw a digit
Brush
draw a single digit (0–9) with your mouse or finger ·
C clear · it’s centred & scaled like MNIST before the net sees it
2 Inside the convolutional net
input 28×28
→
conv1 · 8 maps 28×28 · ReLU
→
conv2 · 16 maps 14×14 → pool 7×7
Each map is a learned filter’s response — bright = the filter fired there. Early maps catch strokes
& edges; deeper maps catch corners & loops. The 16×7×7 = 784 deep activations feed one dense
softmax layer that votes on the digit.
3 Prediction
·
draw something to start
ƒ Equation & training loss
architecture
x → [conv 3×3 → ReLU → maxpool]×2 → flatten → dense → softmax
prediction · softmax head
ŷⱼ = softmax(z)ⱼ = e^{zⱼ} / Σᵢ e^{zᵢ}
loss · cross-entropy (NLL of true class)
J = −(1/m) Σ ln ŷ₍ₜᵣᵤₑ₎
training loss · pure numpy
epoch 0… 3
pure-numpy training loss · 60k MNIST · test acc 96.6% → 97.2% → 97.9% per epoch → 98.4% final