A fixed-shape channel subset: full graph, live clique only
Earlier work on a "shrinking subset" idea had the graph itself shrink to k nodes when a top-k channel selection was applied — a k-node graph with k(k-1)/2 edges. That's not what this session built. The ask instead: the GNN always sees the full 23 channels and all 253 possible edges; a per-window selection just decides which small clique of those edges actually gets real coherence features computed. Everything else is zero.
How it works
Per window, the top-k channels by absolute cosine affinity are found, and the "live" edges are the undirected clique among just those k channels — for k=4, that's 6 edges out of 253. Real wavelet-coherence features get computed only for that clique and scattered into an otherwise-zero tensor at the correct fixed positions; every other edge slot stays exactly zero. Different windows in the same training batch can pick entirely different cliques, computed independently. The edge ordering had to match the model's own internal registration exactly — a mismatch there would silently scramble which slot a live feature lands in, so this was checked directly against the model's own index arrays before trusting anything downstream, along with confirming k=23 (full mesh) reproduces the unmodified path exactly and inactive slots really are exact zeros, not just small numbers.
Three smoke runs to confirm it actually trains
A single fold at k=4 completed cleanly, correctly reporting the full 23-node/253-edge graph shape rather than a shrunk one, and reached ROC-AUC 0.936 on its held-out seizure. A six-fold run at the same setting (smoke-scale interictal cap, not the real uncapped data) hit 6/6 raw event detection, 5/6 after alarm smoothing, with one fold behaving as a known smoke-scale artifact from the reduced interictal pool rather than anything wrong with k=4 itself. A separate run added a genuinely computed validation split — the streaming classifier had previously just raised an error if asked for one — and confirmed a best-checkpoint restore working correctly, at a modest recall cost versus training on the full fold.
Open items
This session ran entirely on Apple Silicon (MPS), so neither of the bf16 speedup flags from the Windows/CUDA work were exercised here at all — how this design performs on CUDA hardware, where those flags matter, is a separate open question the next session picks up.