Section
Playground
A public, server-free playground -- train a Neural ODE or a classifier live in your browser and watch it learn.
Live
This is the public build of vZero, a research playground for Neural ODEs built around a chemical-kinetics problem (H2/O2 autoignition). Everything below runs entirely in your browser: no server, no data leaves this tab, and it works offline. It has two tabs.
Neural ODE tab: watch a network learn the physics
A neural network f is trained so that integrating dy/dt = f(y) reproduces trajectories sampled from a known system. You see the true trajectories (grey, dashed), the network’s own trajectories from the same starting points (blue), a start the network never trained on (orange), the learned vector field as small arrows, and the training loss falling live.
- How it trains. A small tanh network is the right-hand side; a fixed-step Runge-Kutta (RK4) integrator turns it into trajectories; and the gradient is back-propagated by hand through every RK4 stage. It is checked against finite differences, not trusted by eye.
- Two systems. A damped spiral and a predator-prey (Lotka-Volterra) orbit. Change the network width or learning rate and press Reset; if the loss blows up, the page tells you.
- An honest limit. These are smooth, non-stiff systems. Stiff H2/O2 autoignition did not pass the same test in the browser: the loss fell about a hundred-fold, but the radical species peaks stayed wrong, so that case is trained with the Python version and shown as figures on the project page, not faked here.
Classifier tab: the toy-dataset playground
Pick a dataset, edit the network’s width and depth, choose an activation, and watch a real gradient-descent loop train live.
- 9 datasets. The original 6 (circle, XOR, two-Gaussian, spiral, plane regression, Gaussian-mixture regression) re-implement the formulas TensorFlow Playground’s
dataset.tsuses (Apache-2.0; re-derived from the main project’s Python port, not copied). Three are written for this playground: moons, checkerboard, and rings. - Bring your own data. A CSV upload (
x, y, label, label -1/0/1) trains the same network on your data, parsed and kept entirely in your browser (capped at 2,000 rows). - Your personal best, per dataset, saved in this browser’s local storage only; never shared.
- The network is a from-scratch multi-layer perceptron (own initialization, hand-derived backpropagation, Adam, mini-batches, optional L1/L2). It is verified to reach comparable accuracy to the main project’s PyTorch version, not to match it bit-for-bit.
- Two things TensorFlow Playground doesn’t have: a small activation heatmap for every neuron, and a loss-function picker (squared error or cross-entropy).
What the full vZero trains
The full local environment trains the H2/O2 autoignition Neural ODE with the real chemistry: Cantera h2o2.yaml, a constant-pressure reactor at a range of starting temperatures, an 11-value state (ten species fractions plus temperature), an adaptive stiff-capable ODE solver, and a loss that can be plain squared error or a power mean. Its best-known finding is a plain one: scaling temperature is what makes the training work (about an order of magnitude lower error), because otherwise temperature’s raw size dominates the gradient. The environment is not public yet; the project page tells the full story.
Built with Claude Code across a multi-week collaboration.
Learn
-
State, rate, trajectory: the three things a Neural ODE must not confuse Open in the Studio -
A complete small learning loop: fit with Adam, test beyond the training window, and check the gradient three ways Open in the Studio -
Two clocks, one step size: why stiffness limits the solver and why a change of coordinates must be checked Open in the Studio -
Which channel is loud? Scaling, gradients, power means and a loss landscape as four views of the same question Open in the Studio -
Making nonlinear dynamics look linear: lifts, snapshot fits and low-dimensional models Open in the Studio -
Put the structure in the model: valid inertia, valid rates, graphs, and what a sensor can see Open in the Studio -
Round it, export it, compare it: the checks that remain after the model is trained Open in the Studio
Concept explainers
- The adjoint method gets the gradient of a loss through an ODE solve by integrating one more ODE backwards, and a finite-difference check proves it right
- Making nonlinear dynamics look linear: Koopman lifts, snapshot fits (DMD) and low-dimensional modes (POD)
- A latent neural ODE learns the dynamics in a few coordinates: encode, evolve, decode, and check what was lost
- The shape of the loss decides how fast training goes: curvature, condition number and why optimizers behave differently
- A neural ODE learns the rate law: the network is the right-hand side of dy/dt, and its picture is a vector field
- A power mean turns a loss into a dial between average and worst case, and scaling decides which variable owns the gradient
- Rounding the weights to a grid: step size, error bounds, and how the error travels through a network and a rollout
- One-step loss can look perfect while the rollout drifts: training on longer horizons exposes the error that compounds
- A stiff system makes an explicit solver crawl, and a neural ODE has to learn that same right-hand side





















