Running MNIST and Fashion-MNIST side by side is a better exercise than either alone, and the reason is instructive: same shape, same size, same architecture, and the accuracy you get is very different. That gap is the whole lesson about data difficulty versus model capacity, delivered without changing a single hyperparameter. Fashion-MNIST is also where confusion matrices start earning their keep, because the errors are not uniform - shirt, coat and pullover collapse into each other while trousers are near-perfect. Looking at which classes get confused teaches more than the aggregate number does, and it is the same habit that later stops you from shipping a model that is excellent on average and useless on the one class that matters.
Ahmet, I added a confusion matrix to the notebook based on your comment — and the data confirms exactly what you predicted.
Trouser, Bag, Sandal, and Ankle boot all hit 95%+ recall (unique enough silhouettes). Shirt is the worst performer at 67.7% recall, getting confused with T-shirt/top (98 images) and Coat (103 images) most often. Pullover and Coat also swap with each other constantly — 169 Pullovers misclassified as Coat alone.
The aggregate 87% accuracy completely hid this. Really appreciate you pointing me toward looking at it this way — it's a habit I'll carry into future projects.
The updated notebook (confusion matrix in the last section) is linked from the GitHub repo mentioned in the post above.
Adding the confusion matrix makes that 87% much easier to interpret. Shirt at 67.7% recall is a different engineering problem from improving classes already above 95%, and the Shirt-to-Coat and Pullover-to-Coat counts give you concrete samples to inspect.
I would look at representative errors from each direction before changing the network. Ambiguous garment labels, cropped silhouettes, and visually similar examples can require different fixes. Keep both normalized rows and raw counts visible so class support does not disappear behind percentages, then compare the same class-level view after the next change.
Running MNIST and Fashion-MNIST side by side is a better exercise than either alone, and the reason is instructive: same shape, same size, same architecture, and the accuracy you get is very different. That gap is the whole lesson about data difficulty versus model capacity, delivered without changing a single hyperparameter. Fashion-MNIST is also where confusion matrices start earning their keep, because the errors are not uniform - shirt, coat and pullover collapse into each other while trousers are near-perfect. Looking at which classes get confused teaches more than the aggregate number does, and it is the same habit that later stops you from shipping a model that is excellent on average and useless on the one class that matters.