SMAI Assignment 4: selected MLP and IOC-NN
Two classifiers for 32x32 CIFAR-10 images, trained from flattened, standardised pixels. Both use the architecture selected in Task 1.2.5: 3072-64-10 (relu hidden activation for the MLP, ELU for the IOC-NN).
| file | model | hidden activation | parameters | test acc |
|---|---|---|---|---|
mlp_selected.npz |
NumPy MLP (Q1, from scratch), trained on the 36,000-image split (1.2) | relu | 197322 | 0.4552 |
ioc_selected.pt |
PyTorch IOC-NN (Task 1.4, p = 0, 100 epochs on the 50,000 train images) | ELU, non-negative weights in layers >= 2 | 197322 | 0.4419 |
mlp_selected.npz holds float64 arrays W0, b0, W1, b1, with
logits = act(x @ W0 + b0) @ W1 + b1. mlp_config.json records the seed, the architecture and
the preprocessing. ioc_selected.pt is a torch.save dictionary with state_dict, hidden,
activation and projection (negative weights of layers >= 2 are replaced by exp(w - 5) after every step).
Preprocessing: RGB / 255, flatten to 3072 features, subtract the per-column mean and divide by the
per-column standard deviation. The NumPy MLP uses the statistics of its 36,000-image training split
(preprocess_numpy.npz); the IOC-NN uses those of the 50,000 CIFAR-10 training images
(preprocess_torch.npz). Arrays mean and std have shape (3072,).