
Why
Ball-in-cup taught the action-conditioned side of JEPA. The other big use case is a self-supervised visual backbone for domains with many images and few labels, like pathology. I wanted to see it work at a realistic resolution on my own hardware: PathMNIST at 224 px, ViT encoder, block masking, no EMA target.
Engineering on a 24 GB Mac
The 224 px split ships as a compressed .npz, and loading it pulls ~13.5 GB into RAM, which put training
straight into swap. Decompressing each split once to an uncompressed .npy and memory-mapping it brought
data RAM to roughly zero. It also let multiple data-loader workers share pages instead of copying.
Probing the frozen encoder
Frozen features, 9 tissue classes, 7,180 test images. The same probes run on a randomly initialised encoder as a baseline:
The linear-probe gain over random init is real but modest. The nearest-neighbour gain (+15 points) is the clearer sign that the representation organises tissue types. The features' effective rank also roughly doubled between epochs 1 and 4.
