Section

Playground

A public, server-free Neural ODE playground -- pick a dataset, edit the network, and watch a real model train live in your browser.

Live

This is a trimmed, public build of vZero, a TensorFlow-Playground-class research environment for Neural ODEs built around a chemical-kinetics problem (H2/O2 combustion). Everything below runs entirely in your browser – no server, no data leaves this tab, and it works even if you’re offline. Pick a dataset, edit the network’s width and depth, choose an activation, and watch a real gradient-descent loop train live.

This is intentionally a SMALL slice of the full project: the classification/regression toy-dataset playground only, with a from-scratch multi-layer perceptron (own weight init, own hand-derived backprop – see the project write-up for what that means and why). The full local research environment adds Cantera chemical-kinetics trajectories, a continuous-depth Neural-ODE classifier peer, hyperparameter search, reinforcement learning, exportable notebooks, and multi-language code export (Python/JAX/Julia) – none of which can run without a real backend, so none of it is here. Read the full story on the project page or browse the source for the complete environment.

What you’re actually looking at

  • 9 datasets. The original 6 (circle, XOR, two-Gaussian, spiral, plane regression, Gaussian-mixture regression) are a faithful re-implementation of the exact formulas TensorFlow Playground’s own dataset.ts uses (Apache-2.0 licensed; re-derived a second time in this browser build from the main project’s own Python port, not copied from the JS original – see the project’s ACKNOWLEDGEMENTS.md/CITATIONS.bib). 3 more are written directly for this playground, not ported from anywhere: moons (two interleaving crescents), checkerboard (a 4x4 alternating grid, a harder multi-region generalization of XOR), and rings (three nested alternating bands, a harder generalization of circle).
  • Bring your own data. A CSV upload (3 columns: x, y, label, label -1/0/1) trains the same network on whatever you provide – parsed and kept entirely in your browser (FileReader, nothing ever leaves the tab), capped at 2,000 rows.
  • Your personal best, per dataset, saved in this browser’s own local storage – never shared, never a public leaderboard (that would need a real server this static build deliberately doesn’t have). Beat your own last run and it tells you.
  • The network is a real multi-layer perceptron – Linear-then-activation, repeated per hidden layer, trained with Adam, mini-batches, and (optionally) L1/L2 regularization – with its own independent weight initialization and hand-derived backpropagation. It is verified to reach comparable accuracy to the main project’s PyTorch implementation on the same datasets (roughly 75%+ test accuracy within 200 epochs on circle/gauss/xor), not to reproduce it bit-for-bit – different languages, different random-number streams, same architecture and same problem.
  • The decision surface, loss chart, and network diagram are the exact same visualization components the full local playground uses – this build only swaps out where the training data comes from (a live WebSocket from a real server, vs. a training loop running on your own CPU right now), not what renders it.
  • Two things TensorFlow Playground doesn’t have. Every hidden (and readout) neuron in the network diagram carries its own small activation-heatmap preview – what that one neuron alone has learned, not just the combined output surface. And the loss function is a real picker, not fixed: squared error (TF Playground’s own only option) or cross-entropy, so the textbook accuracy-vs-loss distinction is something you can actually toggle and watch change, not just read about.

Built with Claude Code across an 11-session multi-week collaboration. Full continuity log, design decisions, and the complete (non-public) research environment live in the project’s own repository.

Learn

  1. State, rate, trajectory: the three things a Neural ODE must not confuse Open in the Studio
  2. A complete small learning loop: fit with Adam, test beyond the training window, and check the gradient three ways Open in the Studio
  3. Two clocks, one step size: why stiffness limits the solver and why a change of coordinates must be checked Open in the Studio
  4. Which channel is loud? Scaling, gradients, power means and a loss landscape as four views of the same question Open in the Studio
  5. Making nonlinear dynamics look linear: lifts, snapshot fits and low-dimensional models Open in the Studio
  6. Put the structure in the model: valid inertia, valid rates, graphs, and what a sensor can see Open in the Studio
  7. Round it, export it, compare it: the checks that remain after the model is trained Open in the Studio

Concept explainers

Documents

Experiments

optimizer race

11-optimizer race on the Van der Pol benchmark, proper names + final numbers
11-optimizer race on the Van der Pol benchmark, proper names + final numbersExplain

ablation

Normalization ablation — raw baseline vs. 9 normalized arms
Normalization ablation — raw baseline vs. 9 normalized armsExplain

rl arena

RL Arena — the real PPO agent's weight-space trajectory
RL Arena — the real PPO agent's weight-space trajectoryExplain
RL arena: weight-space trajectory of the agent
RL arena: weight-space trajectory of the agentExplain
RL arena: objective and reward over training
RL arena: objective and reward over trainingExplain
RL arena: action magnitude vs episode phase
RL arena: action magnitude vs episode phaseExplain
RL arena: reward autocorrelation
RL arena: reward autocorrelationExplain

dataset geometry

Dataset split geometry — random pool split
Dataset split geometry — random pool splitExplain
Trajectory bundles by split — T, H2O, OH, HO2
Trajectory bundles by split — T, H2O, OH, HO2Explain
Dataset split geometry — structured grid (never run)
Dataset split geometry — structured grid (never run)Explain

rl evaluation

RL vs. gradient-free solvers, matched-budget scorecard
RL vs. gradient-free solvers, matched-budget scorecardExplain
RL training convergence, running best objective
RL training convergence, running best objectiveExplain
Machine-written verdict: ADOPT
Machine-written verdict: ADOPTExplain

curriculum

Per-parameter gradient magnitude over training
Per-parameter gradient magnitude over trainingExplain
Gradient flow to the first hidden layer — shallow vs. deep
Gradient flow to the first hidden layer — shallow vs. deepExplain
The seven input features as fixed spatial filters
The seven input features as fixed spatial filtersExplain
Final-layer embedding — discrete MLP vs. continuous Neural ODE
Final-layer embedding — discrete MLP vs. continuous Neural ODEExplain
Linear vs. nonlinear model on two toy datasets
Linear vs. nonlinear model on two toy datasetsExplain
Weight decay vs. the train/test generalization gap
Weight decay vs. the train/test generalization gapExplain
Zero initialization fails to break symmetry
Zero initialization fails to break symmetryExplain

loss and training

Train vs. validation loss on the Van der Pol benchmark
Train vs. validation loss on the Van der Pol benchmarkExplain
Linear readout vs. an MLP decoder stage
Linear readout vs. an MLP decoder stageExplain

Code