Jacob Garcia · Hugging Face Model Foundry

Flow Pocket Lab

Interactive temperature-controlled RealNVP sampler. This showcase backs up the trained artifacts, measured evaluation, and complete runnable source.

Explore every file View the full foundry

Verified project card

# Flow Pocket

Flow Pocket trains an exactly invertible RealNVP density model on a curved
five-armed pinwheel distribution. Eight affine coupling layers transform data into
a standard Gaussian while tracking the exact change-of-variables log determinant.

The benchmark compares held-out negative log-likelihood and generated-sample MMD
against a fitted full-covariance Gaussian and a five-component Gaussian mixture.
It also measures forward/inverse cycle error to verify that the saved neural
transform is numerically invertible.

## Verified results

The flow trained on 40,000 samples and was evaluated on 10,000 independently
generated samples.

| Model | Held-out NLL | Sample MMD |
| --- | ---: | ---: |
| RealNVP | 2.2629 | 0.000236 |
| Five-component GMM | 2.5887 | 0.000436 |
| Full-covariance Gaussian | 3.3527 | 0.002800 |

The eight-coupling-layer RealNVP has 21,536 parameters. Its maximum absolute
forward/inverse reconstruction error over 2,000 held-out points was `5.78e-6`.
MMD uses independently randomized 1,000-sample subsets and a shared median
distance bandwidth.

## Reproduce

```powershell
uv run python projects/flow-pocket/train.py
```

Evaluation snapshot

{
  "benchmark": "Five-arm pinwheel density estimation",
  "training_examples": 40000,
  "heldout_examples": 10000,
  "results": {
    "realnvp": {
      "parameters": 21536,
      "test_nll": 2.2628610134124756,
      "sample_mmd": 0.00023621320724487305,
      "maximum_cycle_error": 5.781650543212891e-06
    },
    "full_covariance_gaussian": {
      "test_nll": 3.352746780780259,
      "sample_mmd": 0.002799742898649704
    },
    "five_component_gmm": {
      "test_nll": 2.5887062549591064,
      "sample_mmd": 0.00043558339810489954
    }
  },
  "training_history": [
    {
      "training_step": 100,
      "training_nll": 2.974477767944336,
      "validation_nll": 3.012097120285034
    },
    {
      "training_step": 200,
      "training_nll": 2.768125295639038,
      "validation_nll": 2.759519100189209
    },
    {
      "training_step": 300,
      "training_nll": 2.7486166954040527,
      "validation_nll": 2.6988091468811035
    },
    {
      "training_step": 400,
      "training_nll": 2.6729800701141357,
      "validation_nll": 2.6116697788238525
    },
    {
      "training_step": 500,
      "training_nll": 2.523287534713745,
      "validation_nll": 2.579714298248291
    },
    {
      "training_step": 600,
      "training_nll": 2.5287487506866455,
      "validation_nll": 2.553705930709839
    },
    {
      "training_step": 700,
      "training_nll": 2.5176467895507812,
      "validation_nll": 2.56897234916687
    },
    {
      "training_step": 800,
      "training_nll": 2.5820188522338867,
      "validation_nll": 2.540039539337158
    },
    {
      "training_step": 900,
      "training_nll": 2.5383265018463135,
      "validation_nll": 2.5277373790740967
    },
    {
      "training_step": 1000,
      "training_nll": 2.48282527923584,
      "validation_nll": 2.535404682159424
    },
    {
      "training_step": 1100,
      "training_nll": 2.428791046142578,
      "validation_nll": 2.5110583305358887
    },
    {
      "training_step": 1200,
      "training_nll": 2.5302720069885254,
      "validation_nll": 2.50561261177063
    },
    {
      "training_step": 1300,
      "training_nll": 2.3884363174438477,
      "validation_nll": 2.4981091022491455
    },
    {
      "training_step": 1400,
      "training_nll": 2.4792046546936035,
      "validation_nll": 2.491697311401367
    },
    {
      "training_step": 1500,
      "training_nll": 2.419118881225586,
      "validation_nll": 2.463804244995117
    },
    {
      "training_step": 1600,
      "training_nll": 2.4760823249816895,
      "validation_nll": 2.4544918537139893
    },
    {
      "training_step": 1700,
      "training_nll": 2.3438639640808105,
      "validation_nll": 2.4196836948394775
    },
    {
      "training_step": 1800,
      "training_nll": 2.284365653991699,
      "validation_nll": 2.4094793796539307
    },
    {
      "training_step": 1900,
      "training_nll": 2.41039776802063,
      "validation_nll": 2.386476516723633
    },
    {
      "training_step": 2000,
      "training_nll": 2.343876361846924,
      "validation_nll": 2.371260166168213
    },
    {
      "training_step": 2100,
      "training_nll": 2.3377065658569336,
      "validation_nll": 2.371122121810913
    },
    {
      "training_step": 2200,
      "training_nll": 2.3578639030456543,
      "validation_nll": 2.3843414783477783
    },
    {
      "training_step": 2300,
      "training_nll": 2.361250400543213,
      "validation_nll": 2.374619960784912
    },
    {
      "training_step": 2400,
      "training_nll": 2.317490339279175,
      "validation_nll": 2.3640923500061035
    },
    {
      "training_step": 2500,
      "training_nll": 2.31643009185791,
      "validation_nll": 2.368194818496704
    },
    {
      "training_step": 2600,
      "training_nll": 2.295240640640259,
      "validation_nll": 2.3607025146484375
    },
    {
      "training_step": 2700,
      "training_nll": 2.38124942779541,
      "validation_nll": 2.3652212619781494
    },
    {
      "training_step": 2800,
      "training_nll": 2.3277204036712646,
      "validation_nll": 2.375239372253418
    },
    {
      "training_step": 2900,
      "training_nll": 2.340425491333008,
      "validation_nll": 2.3583223819732666
    },
    {
      "training_step": 3000,
      "training_nll": 2.306485176086426,
      "validation_nll": 2.3473105430603027
    },
    {
      "training_step": 3100,
      "training_nll": 2.2540557384490967,
      "validation_nll": 2.361114978790283
    },
    {
      "training_step": 3200,
      "training_nll": 2.2472634315490723,
      "validation_nll": 2.3361361026763916
    },
    {
      "training_step": 3300,
      "training_nll": 2.2850630283355713,
      "validation_nll": 2.3237645626068115
    },
    {
      "training_step": 3400,
      "training_nll": 2.372798442840576,
      "validation_nll": 2.346468448638916
    },
    {
      "training_step": 3500,
      "training_nll": 2.311044216156006,
      "validation_nll": 2.32955002784729
    },
    {
      "training_step": 3600,
      "training_nll": 2.2257301807403564,
      "validation_nll": 2.319716453552246
    },
    {
      "training_step": 3700,
      "training_nll": 2.2926011085510254,
      "validation_nll": 2.323981285095215
    },
    {
      "training_step": 3800,
      "training_nll": 2.2168548107147217,
      "validation_nll": 2.305316925048828
    },
    {
      "training_step": 3900,
      "training_nll": 2.2342185974121094,
      "validation_nll": 2.3181967735290527
    },
    {
      "training_step": 4000,
      "training_nll": 2.3150432109832764,
      "validation_nll": 2.279649257659912
    }
  ]
}

Backed-up artifact tree

  • README.md
  • __pycache__/app.cpython-311.pyc
  • __pycache__/data.cpython-311.pyc
  • __pycache__/model.cpython-311.pyc
  • app.py
  • artifacts/flow-pocket/classical_controls.joblib
  • artifacts/flow-pocket/evaluation.json
  • artifacts/flow-pocket/generated_samples.npz
  • artifacts/flow-pocket/realnvp.safetensors
  • data.py
  • data/pinwheel_test.parquet
  • model.py
  • requirements.txt
  • train.py