{
  "claim": "TabFM v1.0.0 is 1,639,444,522 parameters, and 98.81% of them are in the 24-block transformer that never sees a table cell. The part that actually reads cells — the Fourier cell embedder — is 36,032 parameters, 0.0022% of the model.",
  "method": "Read the safetensors header of google/tabfm-1.0.0-pytorch (both subfolders) over HTTP range requests, summed the product of each tensor's shape, and grouped by top-level module. Shapes cross-checked against classification/config.json and against the module definitions in tabfm/src/pytorch/model.py at google-research/tabfm.",
  "source": "https://huggingface.co/google/tabfm-1.0.0-pytorch",
  "captured": "2026-09-19",
  "note": "Every tensor in both checkpoints is F32, so the classification checkpoint is 6,557,778,088 bytes (6.25 GiB) and the regression checkpoint 6,591,132,852 bytes (6.29 GiB) — 12.5 GiB to hold both, for a model whose inputs are spreadsheets. The loader casts to bfloat16 on load. The regression checkpoint has 1,647,783,213 parameters: the same stack, with an MLP target encoder and a scalar head in place of the 10-way embedding and 10-way decoder.",
  "columns": [
    { "key": "stage", "label": "stage" },
    { "key": "what", "label": "what it attends over" },
    { "key": "params", "label": "params (clf)", "align": "right" },
    { "key": "share", "label": "share", "align": "right" },
    { "key": "shape", "label": "shape" }
  ],
  "rows": [
    {
      "stage": "cell_embedder",
      "what": "one cell, plus the cells 1 and 3 columns to its right",
      "params": "36,032",
      "share": "0.0022%",
      "shape": "2 x Fourier[3,32] + 2 x Linear[64 -> 256] + Embedding[10,256]"
    },
    {
      "stage": "col_embedder",
      "what": "a whole column as an unordered set of rows",
      "params": "6,581,376",
      "share": "0.40%",
      "shape": "3 induced-attention blocks, d=256, 4 heads, 256 induced points"
    },
    {
      "stage": "row_interactor",
      "what": "one row across its columns (RoPE over the column axis)",
      "params": "3,159,344",
      "share": "0.19%",
      "shape": "3 blocks, d=256, 8 heads, 8 CLS tokens"
    },
    {
      "stage": "col_embedder_2",
      "what": "the columns again, after row mixing",
      "params": "6,581,376",
      "share": "0.40%",
      "shape": "3 induced-attention blocks, d=256"
    },
    {
      "stage": "row_interactor_2",
      "what": "the row again; keeps only the 8 CLS slots",
      "params": "3,159,344",
      "share": "0.19%",
      "shape": "3 blocks, d=256, output 8 x 256 = 2048"
    },
    {
      "stage": "cls_tokens",
      "what": "the learned row summary slots",
      "params": "2,048",
      "share": "0.0001%",
      "shape": "[8, 256]"
    },
    {
      "stage": "icl_predictor",
      "what": "one 2048-d vector per row; context rows only",
      "params": "1,619,925,002",
      "share": "98.81%",
      "shape": "24 blocks, d=2048, 8 heads (head dim 256), SwiGLU ff 8192"
    },
    {
      "stage": "  — one ICL block",
      "what": "attention 16.8M + SwiGLU 50.3M",
      "params": "67,144,448",
      "share": "4.10%",
      "shape": "x24 = 1,611,466,752"
    },
    {
      "stage": "  — ICL decoder",
      "what": "row vector to class logits",
      "params": "8,433,674",
      "share": "0.51%",
      "shape": "MLP[2048 -> 4096 -> 10]"
    },
    {
      "stage": "TOTAL",
      "what": "classification checkpoint",
      "params": "1,639,444,522",
      "share": "100%",
      "shape": "913 F32 tensors, 6,557,778,088 bytes"
    }
  ]
}
