Downloads · 30 days
0
liodon-ai/hemodialysis-hypotension
hemodialysis-hypotension is a machine learning model from liodon-ai. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as apache-2.0.
FT-Transformer (Feature Tokenizer Transformer, Gorishniy et al. 2021) trained on 97,640 real hemodialysis sessions to predict intradialytic hypotension (IDH) from pre-session clinical parameters.
Downloads · 30 days
0
Access
Public
Updated Jul 14, 2026
Repo size
19.1 MB
Likes
0
Public
Click a slice to open those files.
.pt19.1 MB · 100%
From the Hugging Face model README
FT-Transformer (Feature Tokenizer Transformer, Gorishniy et al. 2021) trained on 97,640 real hemodialysis sessions to predict intradialytic hypotension (IDH) from pre-session clinical parameters.
| Architecture | FT-Transformer (d_token=256, 6 layers, 8 heads, 4.77M params) |
| Task | Binary classification — hypotension during session (yes/no) |
| Dataset | Mendeley 10.17632/7kmtsmsgfw.1 — 97,640 sessions, 758 patients |
| Training split | 73,034 train / 9,960 val / 14,646 test |
| Metric | Value |
|---|---|
| ROC-AUC | 0.7841 |
| Average Precision | 0.5849 |
| F1 (threshold=0.5) | 0.5557 |
| Hypotension recall | ~75% |
20 numeric features (StandardScaler normalized): age, dry_weight_kg, pre_weight_kg, post_weight_kg, interdialytic_gain_kg, dialysate_temp_c, reposition_vol_ml, kt, blood_flow_mlmin, dialysate_flow_mlmin, dialysate_conductivity, bicarbonate_conductivity, arterial_pressure_mmhg, venous_pressure_mmhg, transmembrane_pressure, systolic_bp_mmhg, diastolic_bp_mmhg, pulse_bpm, uf_rate, body_temp_c
4 categorical features (label encoded): sex, dialyzer_type, bath_type, technique
import torch
import torch.nn as nn
import math
class FeatureTokenizer(nn.Module):
def __init__(self, n_num, cat_cardinalities, d_token):
super().__init__()
self.num_weight = nn.Parameter(torch.empty(n_num, d_token))
self.num_bias = nn.Parameter(torch.empty(n_num, d_token))
self.cat_embs = nn.ModuleList([nn.Embedding(c+1, d_token) for c in cat_cardinalities])
nn.init.kaiming_uniform_(self.num_weight, a=math.sqrt(5))
nn.init.zeros_(self.num_bias)
def forward(self, x_num, x_cat):
x_n = x_num.unsqueeze(-1) * self.num_weight + self.num_bias
x_c = torch.stack([e(x_cat[:, i]) for i, e in enumerate(self.cat_embs)], dim=1)
return torch.cat([x_n, x_c], dim=1)
class FTTransformer(nn.Module):
def __init__(self, n_num, cat_cardinalities, d_token=256, n_heads=8, n_layers=6, dropout=0.1):
super().__init__()
self.tokenizer = FeatureTokenizer(n_num, cat_cardinalities, d_token)
self.cls_token = nn.Parameter(torch.zeros(1, 1, d_token))
enc = nn.TransformerEncoderLayer(d_model=d_token, nhead=n_heads,
dim_feedforward=4*d_token, dropout=dropout, batch_first=True,
norm_first=True, activation='gelu')
self.encoder = nn.TransformerEncoder(enc, num_layers=n_layers)
self.head = nn.Sequential(nn.LayerNorm(d_token), nn.Linear(d_token, 1))
def forward(self, x_num, x_cat):
x = self.tokenizer(x_num, x_cat)
cls = self.cls_token.expand(x.size(0), -1, -1)
x = self.encoder(torch.cat([cls, x], dim=1))
return self.head(x[:, 0]).squeeze(-1)
# Load
ckpt = torch.load("hemodialysis_ft.pt", map_location="cpu")
model = FTTransformer(n_num=20, cat_cardinalities=ckpt["cat_cardinalities"])
model.load_state_dict(ckpt["model_state"])
model.eval()
# Inference (x_num normalized with ckpt scaler_mean/scaler_scale)
prob = torch.sigmoid(model(x_num, x_cat)).item()
print(f"Hypotension probability: {prob:.1%}")
Dataset: Sánchez-Crisostomo et al. (2023). Mendeley Data. https://doi.org/10.17632/7kmtsmsgfw.1
Model: Liodon AI (2026). FT-Transformer for intradialytic hypotension prediction.