Platform · Model anatomy

Every layer, weight and bias, drawn and replayed.

The dashboard draws the structure you uploaded and walks a prediction through it in your browser, from the stored weights, with every step confirmed against the API's own trace. Here is one trace from the API reference, one operation at a time.

Model anatomy · a real trace

Follow one prediction through every weight.

A small churn network from the Kaimei API reference scores one customer. Scroll to walk the prediction through it one operation at a time, with every number written out as it is computed.

POST /v1/models/churn-net-docs/structure/trace

  1. 01 / 07The network

    One network, one customer.

    churn-net-docs is the example network in the API reference. All 27 of its parameters are uploaded, so every weight below is the one that computes the score. One customer waits at its inputs.

    Request body

    {"input": {"tenure_months": 3,
               "monthly_spend": 91.5,
               "support_tickets": 4}}
    • 11 nodes
    • 27 parameters
    • 4 layers
    • fidelity exact
  2. 02 / 07Standardise

    Standardise each input.

    The model stores a centre and a scale for every input. Three months sits 21 below the centre of 24; divided by the scale of 18, it becomes −1.167.

    tenure_monthstenure(3−24)/18=−1.1667 monthly_spendspend(91.5−62)/30=0.9833 support_ticketstickets(4−1.2)/1.6=1.75

    The trace's own line tenure months: (3 − 24) / 18 = -1.167.

  3. 03 / 07Hidden layer

    Four weighted sums.

    Each hidden unit weighs the three standardised inputs and adds a bias. The edges carry the products: blue raises a unit, pink lowers it, thicker moves it more.

    W
    0.8−0.30.5 −0.60.90.2 0.10.4−0.7 0.3−0.20.9
    ·
    x
    −1.16670.98331.75
    +
    b
    0.1−0.20.050
    =
    h
    −0.25331.735−0.89831.0283

    h₁ = 0.8·(−1.1667) − 0.3·0.9833 + 0.5·1.75 + 0.1h₁ = −0.9333 − 0.295 + 0.875 + 0.1 = −0.2533

    h₂ = −0.6·(−1.1667) + 0.9·0.9833 + 0.2·1.75 − 0.2h₂ = 0.7 + 0.885 + 0.35 − 0.2 = 1.735

    h₃ = 0.1·(−1.1667) + 0.4·0.9833 − 0.7·1.75 + 0.05h₃ = −0.1167 + 0.3933 − 1.225 + 0.05 = −0.8983

    h₄ = 0.3·(−1.1667) − 0.2·0.9833 + 0.9·1.75 + 0h₄ = −0.35 − 0.1967 + 1.575 + 0 = 1.0283

  4. 04 / 07ReLU

    Two units switch off.

    ReLU keeps positive values and turns negative ones into zero. Units 1 and 3 fall below zero for this customer, so their outgoing weights play no part in the score.

    relu(−0.2533) =0unit 1 off relu(1.735) =1.735 relu(−0.8983) =0unit 3 off relu(1.0283) =1.0283

    What the trace hands the output "input": [0.0, 1.735, 0.0, 1.0283]

  5. 05 / 07Output

    One logit, then a probability.

    The output unit weighs the two live units and adds its bias of −0.3, giving 2.3927. The sigmoid maps that to 0.916, above the 0.5 threshold, so the label is churn.

    z = −1.2·0 + 0.9·1.735 + 0.7·0 + 1.1·1.0283 − 0.3

    z = 1.5615 + 1.1312 − 0.3 = 2.3927

    p = σ(2.3927) = 0.91626639

    0.9163 ≥ 0.5 threshold churn

  6. 06 / 07Drivers

    What moved the score.

    The trace names the nodes that moved the final score, and by how much. The hidden layer pushed it up by 2.6927; the bias pulled it down by 0.3. By size, that is 90% and 10%.

    fromdeltashare hidden__relu+2.69270.8998 bias−0.30.1002

    Together 2.6927 − 0.3 = 2.3927 → σ → 0.91626639

  7. 07 / 07The API

    The same walk, in one call.

    The dashboard's anatomy view replays this walk in your browser, from the stored weights, with every step confirmed against the API's own trace.

    trace = client.models.trace_structure(
        "churn-net-docs",
        input={"tenure_months": 3,
               "monthly_spend": 91.5,
               "support_tickets": 4})
    print(trace.output)
    # {'label': 'churn', 'probability': 0.9163, …}

Every number is from the churn-net-docs example in the Kaimei API reference (its spec, weights and trace response), for the reference's example customer. Values the reference elides with “…” are recomputed from the same weights, and every value it does print matches. Products are rounded to four decimals; sums use full precision. The drawing and its timing are made for this page; the dashboard draws the same structure in its own anatomy view.

Model anatomy · titanic-forest

Walk a real forest, one passenger at a time.

The random forest from the Titanic example, drawn the way the dashboard draws it: ten inputs, one of its thirty trees, and the prediction. Change the passenger and the path moves. Every number is worked out in your browser from the model's own splits and leaves.

Model anatomy

Titanic survival · random forest

Forest of 30 trees. The scene draws tree 1 of 30; a trace walks every tree and averages the leaves.

Family
Ensemble
Trees
30
Nodes
1,430
Fidelity
Exact
Input
Passenger
Pclass
Sex
22 years
1
0
7.25 GBP
Embarked
Title

FamSize 2 · IsAlone no
from SibSp + Parch + 1

Tree 1 of 30
How this prediction is madetree 1 of 30 · root to leaf

    Replayed in your browserfrom the forest's 1,430 nodes. For all 891 passengers in the training file it gives the same P(survived) as scikit-learn, and Mr Braund's 7.4% is the figure the API returns in notebook 01.

    In the dashboard

    The same walk, for any model you upload.

    • Trees, forests, linear models and MLPsDrawn node by node, with the path a prediction takes highlighted.
    • Keras and PyTorch networksLayer graphs including convolutions, pooling, residual adds and concatenations.
    • Large models stay readableRepeated blocks fold into one, so encoder.layers.0 to 47 becomes a single ×48 block, and tensors load only when you open them.
    Kaimei model anatomy view: a random forest drawn as a 3D scene with the prediction path highlighted and a step-by-step account below

    Upload a model this afternoon.

    The free plan covers the whole Titanic walkthrough with room to spare. Your own model is one call away.