Cell-type heads and supervised refinement#

Open in Colab

UniVI’s generative model is unsupervised, but many projects have labels for some cells: annotated cell types, genotypes, disease status. Classification heads are small networks on the latent space that predict those labels. This notebook shows the two ways to use them:

  1. Refine a trained reference (recommended): attach a head, train it with the encoders frozen, then fine-tune the encoders gently while the decoders stay fixed. Missing labels are simply masked. This is the workflow behind the refined bridge (Fig. 5) and the AML mutation heads (Fig. 7) in the paper.

  2. Train a head jointly with the VAE from the start.

To make it realistic, only 20% of training cells are labeled.

import sys

if "google.colab" in sys.modules:
    %pip install -q "univi[tutorials]>=1.0" "pandas==2.2.3"
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scanpy as sc
import torch

import univi.datasets as uds
from univi import (ClassHeadConfig, ModalityConfig, RefinementConfig, TrainingConfig, UniVIConfig,
                   UniVIMultiModalVAE, UniVIRefiner, UniVITrainer, predict_heads_adata)
from univi.evaluation import encode_adata, label_transfer_knn
from univi.preprocessing import ATACPreprocessor, RNAPreprocessor, split_by_label
from univi.utils.seed import set_seed
from univi.workflows import make_loader, save_reference

device = "cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")
set_seed(0)
C:\Users\ashfo\micromamba\envs\univi-release-050\Lib\site-packages\tqdm\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
N_EPOCHS = 400        # unsupervised reference training
REFINE_EPOCHS = 300   # head warmup + encoder fine-tuning
BATCH_SIZE = 256
N_HVG = 2000
N_LSI = 101
LABELED_FRACTION = 0.2

Train an unsupervised reference#

The same setup as the quickstart.

data = uds.pbmc_multiome_10k()
rna, atac = data["rna"], data["atac"]
splits = split_by_label(rna.obs["cell_type"], train_fraction=0.8, val_fraction=0.1, seed=0)
rna_prep = RNAPreprocessor(n_hvg=N_HVG, scale=True).fit(rna[splits["train"]])
atac_prep = ATACPreprocessor(n_components=N_LSI, drop_first=True, scale=True).fit(atac[splits["train"]])
parts = {k: {"rna": rna_prep.transform(rna[i]), "atac": atac_prep.transform(atac[i])} for k, i in splits.items()}
train, val, test = parts["train"], parts["val"], parts["test"]

cfg = UniVIConfig(
    latent_dim=30, beta=1.25, gamma=4.35, encoder_dropout=0.10, decoder_dropout=0.05,
    kl_anneal_start=50, kl_anneal_end=85, align_anneal_start=75, align_anneal_end=110,
    modalities=[ModalityConfig("rna", train["rna"].n_vars, [512, 256, 128], [128, 256, 512]),
                ModalityConfig("atac", train["atac"].n_vars, [128, 64], [64, 128])],
)
model = UniVIMultiModalVAE(cfg, loss_mode="v1", v1_recon="avg", normalize_v1_terms=True)
UniVITrainer(model, make_loader(train, batch_size=BATCH_SIZE, shuffle=True, drop_last=True),
             make_loader(val, batch_size=1024),
             TrainingConfig(n_epochs=N_EPOCHS, batch_size=BATCH_SIZE, lr=1e-3, weight_decay=1e-4, device=device,
                            early_stopping=True, patience=50, best_epoch_warmup=110, log_every=50)).fit();
[2026-09-21 00:45:07,339] [UniVITrainer] [INFO] TrainingConfig:
[2026-09-21 00:45:07,339] [UniVITrainer] [INFO]   n_epochs: 400
[2026-09-21 00:45:07,340] [UniVITrainer] [INFO]   batch_size: 256
[2026-09-21 00:45:07,340] [UniVITrainer] [INFO]   lr: 0.001
[2026-09-21 00:45:07,340] [UniVITrainer] [INFO]   weight_decay: 0.0001
[2026-09-21 00:45:07,341] [UniVITrainer] [INFO]   device: 'cuda'
[2026-09-21 00:45:07,341] [UniVITrainer] [INFO]   log_every: 50
[2026-09-21 00:45:07,341] [UniVITrainer] [INFO]   grad_clip: None
[2026-09-21 00:45:07,342] [UniVITrainer] [INFO]   num_workers: 0
[2026-09-21 00:45:07,342] [UniVITrainer] [INFO]   seed: 0
[2026-09-21 00:45:07,342] [UniVITrainer] [INFO]   early_stopping: True
[2026-09-21 00:45:07,343] [UniVITrainer] [INFO]   patience: 50
[2026-09-21 00:45:07,343] [UniVITrainer] [INFO]   min_delta: 0.0
[2026-09-21 00:45:07,343] [UniVITrainer] [INFO]   best_epoch_warmup: 110
Training UniVI:   0%|          | 0/400 [00:00<?, ?it/s]
[2026-09-21 00:45:08,583] [UniVITrainer] [INFO] [Epoch 001] Train loss=1031.3157 (beta=0.000, gamma=0.000)
[2026-09-21 00:45:08,617] [UniVITrainer] [INFO] [Epoch 001] Val loss=266590.1875 (beta=1.250, gamma=4.350)
Training UniVI:   0%|          | 0/400 [00:01<?, ?it/s, beta=0.000, gamma=0.000, train_loss=1031.3157, val_loss=266590.1875]
Training UniVI:   0%|          | 1/400 [00:01<08:27,  1.27s/it, beta=0.000, gamma=0.000, train_loss=1031.3157, val_loss=266590.1875]
Training UniVI:   0%|          | 1/400 [00:02<08:27,  1.27s/it, beta=0.000, gamma=0.000, train_loss=973.3594, val_loss=20329.1582]
Training UniVI:   0%|          | 2/400 [00:02<07:29,  1.13s/it, beta=0.000, gamma=0.000, train_loss=973.3594, val_loss=20329.1582]
Training UniVI:   0%|          | 2/400 [00:03<07:29,  1.13s/it, beta=0.000, gamma=0.000, train_loss=949.1110, val_loss=2518.5203]
Training UniVI:   1%|          | 3/400 [00:03<07:11,  1.09s/it, beta=0.000, gamma=0.000, train_loss=949.1110, val_loss=2518.5203]
Training UniVI:   1%|          | 3/400 [00:04<07:11,  1.09s/it, beta=0.000, gamma=0.000, train_loss=941.2736, val_loss=6005.2139]
Training UniVI:   1%|          | 4/400 [00:04<07:01,  1.06s/it, beta=0.000, gamma=0.000, train_loss=941.2736, val_loss=6005.2139]
Training UniVI:   1%|          | 4/400 [00:05<07:01,  1.06s/it, beta=0.000, gamma=0.000, train_loss=935.5734, val_loss=3702.3184]
Training UniVI:   1%|▏         | 5/400 [00:05<06:55,  1.05s/it, beta=0.000, gamma=0.000, train_loss=935.5734, val_loss=3702.3184]
Training UniVI:   1%|▏         | 5/400 [00:06<06:55,  1.05s/it, beta=0.000, gamma=0.000, train_loss=929.2958, val_loss=3902.0078]
Training UniVI:   2%|▏         | 6/400 [00:06<06:50,  1.04s/it, beta=0.000, gamma=0.000, train_loss=929.2958, val_loss=3902.0078]
Training UniVI:   2%|▏         | 6/400 [00:07<06:50,  1.04s/it, beta=0.000, gamma=0.000, train_loss=924.2407, val_loss=4929.0679]
Training UniVI:   2%|▏         | 7/400 [00:07<06:47,  1.04s/it, beta=0.000, gamma=0.000, train_loss=924.2407, val_loss=4929.0679]
Training UniVI:   2%|▏         | 7/400 [00:08<06:47,  1.04s/it, beta=0.000, gamma=0.000, train_loss=917.5109, val_loss=7596.7017]
Training UniVI:   2%|▏         | 8/400 [00:08<06:45,  1.03s/it, beta=0.000, gamma=0.000, train_loss=917.5109, val_loss=7596.7017]
Training UniVI:   2%|▏         | 8/400 [00:09<06:45,  1.03s/it, beta=0.000, gamma=0.000, train_loss=913.2560, val_loss=13061.0059]
Training UniVI:   2%|▏         | 9/400 [00:09<06:43,  1.03s/it, beta=0.000, gamma=0.000, train_loss=913.2560, val_loss=13061.0059]
Training UniVI:   2%|▏         | 9/400 [00:10<06:43,  1.03s/it, beta=0.000, gamma=0.000, train_loss=908.8355, val_loss=11333.3701]
Training UniVI:   2%|▎         | 10/400 [00:10<06:42,  1.03s/it, beta=0.000, gamma=0.000, train_loss=908.8355, val_loss=11333.3701]
Training UniVI:   2%|▎         | 10/400 [00:11<06:42,  1.03s/it, beta=0.000, gamma=0.000, train_loss=906.5698, val_loss=12769.0312]
Training UniVI:   3%|▎         | 11/400 [00:11<06:39,  1.03s/it, beta=0.000, gamma=0.000, train_loss=906.5698, val_loss=12769.0312]
Training UniVI:   3%|▎         | 11/400 [00:12<06:39,  1.03s/it, beta=0.000, gamma=0.000, train_loss=904.1865, val_loss=11193.0215]
Training UniVI:   3%|▎         | 12/400 [00:12<06:38,  1.03s/it, beta=0.000, gamma=0.000, train_loss=904.1865, val_loss=11193.0215]
Training UniVI:   3%|▎         | 12/400 [00:13<06:38,  1.03s/it, beta=0.000, gamma=0.000, train_loss=902.8899, val_loss=15597.0781]
Training UniVI:   3%|▎         | 13/400 [00:13<06:45,  1.05s/it, beta=0.000, gamma=0.000, train_loss=902.8899, val_loss=15597.0781]
Training UniVI:   3%|▎         | 13/400 [00:14<06:45,  1.05s/it, beta=0.000, gamma=0.000, train_loss=901.7137, val_loss=15151.1074]
Training UniVI:   4%|▎         | 14/400 [00:14<06:44,  1.05s/it, beta=0.000, gamma=0.000, train_loss=901.7137, val_loss=15151.1074]
Training UniVI:   4%|▎         | 14/400 [00:15<06:44,  1.05s/it, beta=0.000, gamma=0.000, train_loss=900.5247, val_loss=18614.4668]
Training UniVI:   4%|▍         | 15/400 [00:15<06:40,  1.04s/it, beta=0.000, gamma=0.000, train_loss=900.5247, val_loss=18614.4668]
Training UniVI:   4%|▍         | 15/400 [00:16<06:40,  1.04s/it, beta=0.000, gamma=0.000, train_loss=899.1338, val_loss=21533.4277]
Training UniVI:   4%|▍         | 16/400 [00:16<06:42,  1.05s/it, beta=0.000, gamma=0.000, train_loss=899.1338, val_loss=21533.4277]
Training UniVI:   4%|▍         | 16/400 [00:17<06:42,  1.05s/it, beta=0.000, gamma=0.000, train_loss=896.7336, val_loss=25980.5312]
Training UniVI:   4%|▍         | 17/400 [00:17<06:36,  1.03s/it, beta=0.000, gamma=0.000, train_loss=896.7336, val_loss=25980.5312]
Training UniVI:   4%|▍         | 17/400 [00:18<06:36,  1.03s/it, beta=0.000, gamma=0.000, train_loss=895.7543, val_loss=29911.3926]
Training UniVI:   4%|▍         | 18/400 [00:18<06:34,  1.03s/it, beta=0.000, gamma=0.000, train_loss=895.7543, val_loss=29911.3926]
Training UniVI:   4%|▍         | 18/400 [00:19<06:34,  1.03s/it, beta=0.000, gamma=0.000, train_loss=894.3380, val_loss=34749.5039]
Training UniVI:   5%|▍         | 19/400 [00:19<06:32,  1.03s/it, beta=0.000, gamma=0.000, train_loss=894.3380, val_loss=34749.5039]
Training UniVI:   5%|▍         | 19/400 [00:20<06:32,  1.03s/it, beta=0.000, gamma=0.000, train_loss=893.7001, val_loss=33711.3164]
Training UniVI:   5%|▌         | 20/400 [00:20<06:32,  1.03s/it, beta=0.000, gamma=0.000, train_loss=893.7001, val_loss=33711.3164]
Training UniVI:   5%|▌         | 20/400 [00:21<06:32,  1.03s/it, beta=0.000, gamma=0.000, train_loss=892.3967, val_loss=32652.7598]
Training UniVI:   5%|▌         | 21/400 [00:21<06:29,  1.03s/it, beta=0.000, gamma=0.000, train_loss=892.3967, val_loss=32652.7598]
Training UniVI:   5%|▌         | 21/400 [00:22<06:29,  1.03s/it, beta=0.000, gamma=0.000, train_loss=890.5778, val_loss=38194.8281]
Training UniVI:   6%|▌         | 22/400 [00:22<06:27,  1.02s/it, beta=0.000, gamma=0.000, train_loss=890.5778, val_loss=38194.8281]
Training UniVI:   6%|▌         | 22/400 [00:23<06:27,  1.02s/it, beta=0.000, gamma=0.000, train_loss=889.2427, val_loss=36304.0664]
Training UniVI:   6%|▌         | 23/400 [00:23<06:25,  1.02s/it, beta=0.000, gamma=0.000, train_loss=889.2427, val_loss=36304.0664]
Training UniVI:   6%|▌         | 23/400 [00:24<06:25,  1.02s/it, beta=0.000, gamma=0.000, train_loss=889.3290, val_loss=45242.8164]
Training UniVI:   6%|▌         | 24/400 [00:24<06:24,  1.02s/it, beta=0.000, gamma=0.000, train_loss=889.3290, val_loss=45242.8164]
Training UniVI:   6%|▌         | 24/400 [00:25<06:24,  1.02s/it, beta=0.000, gamma=0.000, train_loss=888.5817, val_loss=47354.9102]
Training UniVI:   6%|▋         | 25/400 [00:25<06:22,  1.02s/it, beta=0.000, gamma=0.000, train_loss=888.5817, val_loss=47354.9102]
Training UniVI:   6%|▋         | 25/400 [00:27<06:22,  1.02s/it, beta=0.000, gamma=0.000, train_loss=886.9824, val_loss=49267.7422]
Training UniVI:   6%|▋         | 26/400 [00:27<06:21,  1.02s/it, beta=0.000, gamma=0.000, train_loss=886.9824, val_loss=49267.7422]
Training UniVI:   6%|▋         | 26/400 [00:28<06:21,  1.02s/it, beta=0.000, gamma=0.000, train_loss=886.3221, val_loss=56742.8477]
Training UniVI:   7%|▋         | 27/400 [00:28<06:21,  1.02s/it, beta=0.000, gamma=0.000, train_loss=886.3221, val_loss=56742.8477]
Training UniVI:   7%|▋         | 27/400 [00:29<06:21,  1.02s/it, beta=0.000, gamma=0.000, train_loss=886.1593, val_loss=58984.7695]
Training UniVI:   7%|▋         | 28/400 [00:29<06:18,  1.02s/it, beta=0.000, gamma=0.000, train_loss=886.1593, val_loss=58984.7695]
Training UniVI:   7%|▋         | 28/400 [00:30<06:18,  1.02s/it, beta=0.000, gamma=0.000, train_loss=884.0870, val_loss=51786.6328]
Training UniVI:   7%|▋         | 29/400 [00:30<06:17,  1.02s/it, beta=0.000, gamma=0.000, train_loss=884.0870, val_loss=51786.6328]
Training UniVI:   7%|▋         | 29/400 [00:31<06:17,  1.02s/it, beta=0.000, gamma=0.000, train_loss=884.8322, val_loss=53447.4727]
Training UniVI:   8%|▊         | 30/400 [00:31<06:16,  1.02s/it, beta=0.000, gamma=0.000, train_loss=884.8322, val_loss=53447.4727]
Training UniVI:   8%|▊         | 30/400 [00:32<06:16,  1.02s/it, beta=0.000, gamma=0.000, train_loss=883.3410, val_loss=60379.1211]
Training UniVI:   8%|▊         | 31/400 [00:32<06:14,  1.01s/it, beta=0.000, gamma=0.000, train_loss=883.3410, val_loss=60379.1211]
Training UniVI:   8%|▊         | 31/400 [00:33<06:14,  1.01s/it, beta=0.000, gamma=0.000, train_loss=882.4127, val_loss=75851.9609]
Training UniVI:   8%|▊         | 32/400 [00:33<06:15,  1.02s/it, beta=0.000, gamma=0.000, train_loss=882.4127, val_loss=75851.9609]
Training UniVI:   8%|▊         | 32/400 [00:34<06:15,  1.02s/it, beta=0.000, gamma=0.000, train_loss=881.7899, val_loss=76704.5625]
Training UniVI:   8%|▊         | 33/400 [00:34<06:12,  1.01s/it, beta=0.000, gamma=0.000, train_loss=881.7899, val_loss=76704.5625]
Training UniVI:   8%|▊         | 33/400 [00:35<06:12,  1.01s/it, beta=0.000, gamma=0.000, train_loss=880.3549, val_loss=79027.0625]
Training UniVI:   8%|▊         | 34/400 [00:35<06:12,  1.02s/it, beta=0.000, gamma=0.000, train_loss=880.3549, val_loss=79027.0625]
Training UniVI:   8%|▊         | 34/400 [00:36<06:12,  1.02s/it, beta=0.000, gamma=0.000, train_loss=880.4706, val_loss=77161.7422]
Training UniVI:   9%|▉         | 35/400 [00:36<06:10,  1.02s/it, beta=0.000, gamma=0.000, train_loss=880.4706, val_loss=77161.7422]
Training UniVI:   9%|▉         | 35/400 [00:37<06:10,  1.02s/it, beta=0.000, gamma=0.000, train_loss=880.2641, val_loss=93765.6719]
Training UniVI:   9%|▉         | 36/400 [00:37<06:10,  1.02s/it, beta=0.000, gamma=0.000, train_loss=880.2641, val_loss=93765.6719]
Training UniVI:   9%|▉         | 36/400 [00:38<06:10,  1.02s/it, beta=0.000, gamma=0.000, train_loss=879.2236, val_loss=99038.2578]
Training UniVI:   9%|▉         | 37/400 [00:38<06:09,  1.02s/it, beta=0.000, gamma=0.000, train_loss=879.2236, val_loss=99038.2578]
Training UniVI:   9%|▉         | 37/400 [00:39<06:09,  1.02s/it, beta=0.000, gamma=0.000, train_loss=878.5147, val_loss=105540.1641]
Training UniVI:  10%|▉         | 38/400 [00:39<06:25,  1.06s/it, beta=0.000, gamma=0.000, train_loss=878.5147, val_loss=105540.1641]
Training UniVI:  10%|▉         | 38/400 [00:40<06:25,  1.06s/it, beta=0.000, gamma=0.000, train_loss=878.7767, val_loss=106787.1172]
Training UniVI:  10%|▉         | 39/400 [00:40<06:23,  1.06s/it, beta=0.000, gamma=0.000, train_loss=878.7767, val_loss=106787.1172]
Training UniVI:  10%|▉         | 39/400 [00:41<06:23,  1.06s/it, beta=0.000, gamma=0.000, train_loss=878.0679, val_loss=131246.2500]
Training UniVI:  10%|█         | 40/400 [00:41<06:18,  1.05s/it, beta=0.000, gamma=0.000, train_loss=878.0679, val_loss=131246.2500]
Training UniVI:  10%|█         | 40/400 [00:42<06:18,  1.05s/it, beta=0.000, gamma=0.000, train_loss=878.9308, val_loss=156303.0312]
Training UniVI:  10%|█         | 41/400 [00:42<06:14,  1.04s/it, beta=0.000, gamma=0.000, train_loss=878.9308, val_loss=156303.0312]
Training UniVI:  10%|█         | 41/400 [00:43<06:14,  1.04s/it, beta=0.000, gamma=0.000, train_loss=880.8869, val_loss=136520.4844]
Training UniVI:  10%|█         | 42/400 [00:43<06:11,  1.04s/it, beta=0.000, gamma=0.000, train_loss=880.8869, val_loss=136520.4844]
Training UniVI:  10%|█         | 42/400 [00:44<06:11,  1.04s/it, beta=0.000, gamma=0.000, train_loss=876.9445, val_loss=140302.1875]
Training UniVI:  11%|█         | 43/400 [00:44<06:09,  1.04s/it, beta=0.000, gamma=0.000, train_loss=876.9445, val_loss=140302.1875]
Training UniVI:  11%|█         | 43/400 [00:45<06:09,  1.04s/it, beta=0.000, gamma=0.000, train_loss=875.8696, val_loss=145845.8438]
Training UniVI:  11%|█         | 44/400 [00:45<06:06,  1.03s/it, beta=0.000, gamma=0.000, train_loss=875.8696, val_loss=145845.8438]
Training UniVI:  11%|█         | 44/400 [00:46<06:06,  1.03s/it, beta=0.000, gamma=0.000, train_loss=875.2555, val_loss=150271.4219]
Training UniVI:  11%|█▏        | 45/400 [00:46<06:05,  1.03s/it, beta=0.000, gamma=0.000, train_loss=875.2555, val_loss=150271.4219]
Training UniVI:  11%|█▏        | 45/400 [00:47<06:05,  1.03s/it, beta=0.000, gamma=0.000, train_loss=872.9996, val_loss=150839.6875]
Training UniVI:  12%|█▏        | 46/400 [00:47<06:03,  1.03s/it, beta=0.000, gamma=0.000, train_loss=872.9996, val_loss=150839.6875]
Training UniVI:  12%|█▏        | 46/400 [00:48<06:03,  1.03s/it, beta=0.000, gamma=0.000, train_loss=874.0027, val_loss=166704.3594]
Training UniVI:  12%|█▏        | 47/400 [00:48<06:02,  1.03s/it, beta=0.000, gamma=0.000, train_loss=874.0027, val_loss=166704.3594]
Training UniVI:  12%|█▏        | 47/400 [00:49<06:02,  1.03s/it, beta=0.000, gamma=0.000, train_loss=873.3817, val_loss=171383.0469]
Training UniVI:  12%|█▏        | 48/400 [00:49<06:01,  1.03s/it, beta=0.000, gamma=0.000, train_loss=873.3817, val_loss=171383.0469]
Training UniVI:  12%|█▏        | 48/400 [00:50<06:01,  1.03s/it, beta=0.000, gamma=0.000, train_loss=872.5345, val_loss=166952.0000]
Training UniVI:  12%|█▏        | 49/400 [00:50<06:02,  1.03s/it, beta=0.000, gamma=0.000, train_loss=872.5345, val_loss=166952.0000]
[2026-09-21 00:45:59,025] [UniVITrainer] [INFO] [Epoch 050] Train loss=872.6094 (beta=0.000, gamma=0.000)
[2026-09-21 00:45:59,056] [UniVITrainer] [INFO] [Epoch 050] Val loss=194952.6250 (beta=1.250, gamma=4.350)
Training UniVI:  12%|█▏        | 49/400 [00:51<06:02,  1.03s/it, beta=0.000, gamma=0.000, train_loss=872.6094, val_loss=194952.6250]
Training UniVI:  12%|█▎        | 50/400 [00:51<05:58,  1.02s/it, beta=0.000, gamma=0.000, train_loss=872.6094, val_loss=194952.6250]
Training UniVI:  12%|█▎        | 50/400 [00:52<05:58,  1.02s/it, beta=0.036, gamma=0.000, train_loss=875.7625, val_loss=75232.2344]
Training UniVI:  13%|█▎        | 51/400 [00:52<05:58,  1.03s/it, beta=0.036, gamma=0.000, train_loss=875.7625, val_loss=75232.2344]
Training UniVI:  13%|█▎        | 51/400 [00:53<05:58,  1.03s/it, beta=0.071, gamma=0.000, train_loss=878.4648, val_loss=5777.4297]
Training UniVI:  13%|█▎        | 52/400 [00:53<05:55,  1.02s/it, beta=0.071, gamma=0.000, train_loss=878.4648, val_loss=5777.4297]
Training UniVI:  13%|█▎        | 52/400 [00:54<05:55,  1.02s/it, beta=0.107, gamma=0.000, train_loss=878.6317, val_loss=1972.8624]
Training UniVI:  13%|█▎        | 53/400 [00:54<05:55,  1.02s/it, beta=0.107, gamma=0.000, train_loss=878.6317, val_loss=1972.8624]
Training UniVI:  13%|█▎        | 53/400 [00:55<05:55,  1.02s/it, beta=0.143, gamma=0.000, train_loss=878.7282, val_loss=1321.9735]
Training UniVI:  14%|█▎        | 54/400 [00:55<05:53,  1.02s/it, beta=0.143, gamma=0.000, train_loss=878.7282, val_loss=1321.9735]
Training UniVI:  14%|█▎        | 54/400 [00:56<05:53,  1.02s/it, beta=0.179, gamma=0.000, train_loss=879.6496, val_loss=1180.2725]
Training UniVI:  14%|█▍        | 55/400 [00:56<05:54,  1.03s/it, beta=0.179, gamma=0.000, train_loss=879.6496, val_loss=1180.2725]
Training UniVI:  14%|█▍        | 55/400 [00:57<05:54,  1.03s/it, beta=0.214, gamma=0.000, train_loss=879.9785, val_loss=1123.9177]
Training UniVI:  14%|█▍        | 56/400 [00:57<05:52,  1.02s/it, beta=0.214, gamma=0.000, train_loss=879.9785, val_loss=1123.9177]
Training UniVI:  14%|█▍        | 56/400 [00:58<05:52,  1.02s/it, beta=0.250, gamma=0.000, train_loss=880.5969, val_loss=1076.5580]
Training UniVI:  14%|█▍        | 57/400 [00:58<05:50,  1.02s/it, beta=0.250, gamma=0.000, train_loss=880.5969, val_loss=1076.5580]
Training UniVI:  14%|█▍        | 57/400 [00:59<05:50,  1.02s/it, beta=0.286, gamma=0.000, train_loss=881.6707, val_loss=1050.2799]
Training UniVI:  14%|█▍        | 58/400 [00:59<05:49,  1.02s/it, beta=0.286, gamma=0.000, train_loss=881.6707, val_loss=1050.2799]
Training UniVI:  14%|█▍        | 58/400 [01:00<05:49,  1.02s/it, beta=0.321, gamma=0.000, train_loss=881.9299, val_loss=1039.9436]
Training UniVI:  15%|█▍        | 59/400 [01:00<05:47,  1.02s/it, beta=0.321, gamma=0.000, train_loss=881.9299, val_loss=1039.9436]
Training UniVI:  15%|█▍        | 59/400 [01:01<05:47,  1.02s/it, beta=0.357, gamma=0.000, train_loss=882.5695, val_loss=1025.2517]
Training UniVI:  15%|█▌        | 60/400 [01:01<05:46,  1.02s/it, beta=0.357, gamma=0.000, train_loss=882.5695, val_loss=1025.2517]
Training UniVI:  15%|█▌        | 60/400 [01:02<05:46,  1.02s/it, beta=0.393, gamma=0.000, train_loss=882.4798, val_loss=1007.7615]
Training UniVI:  15%|█▌        | 61/400 [01:02<05:45,  1.02s/it, beta=0.393, gamma=0.000, train_loss=882.4798, val_loss=1007.7615]
Training UniVI:  15%|█▌        | 61/400 [01:03<05:45,  1.02s/it, beta=0.429, gamma=0.000, train_loss=883.3840, val_loss=1002.2283]
Training UniVI:  16%|█▌        | 62/400 [01:03<05:44,  1.02s/it, beta=0.429, gamma=0.000, train_loss=883.3840, val_loss=1002.2283]
Training UniVI:  16%|█▌        | 62/400 [01:04<05:44,  1.02s/it, beta=0.464, gamma=0.000, train_loss=883.2916, val_loss=992.0285]
Training UniVI:  16%|█▌        | 63/400 [01:04<05:41,  1.01s/it, beta=0.464, gamma=0.000, train_loss=883.2916, val_loss=992.0285]
Training UniVI:  16%|█▌        | 63/400 [01:05<05:41,  1.01s/it, beta=0.500, gamma=0.000, train_loss=884.0746, val_loss=986.0002]
Training UniVI:  16%|█▌        | 64/400 [01:05<05:41,  1.02s/it, beta=0.500, gamma=0.000, train_loss=884.0746, val_loss=986.0002]
Training UniVI:  16%|█▌        | 64/400 [01:07<05:41,  1.02s/it, beta=0.536, gamma=0.000, train_loss=883.0678, val_loss=981.2090]
Training UniVI:  16%|█▋        | 65/400 [01:07<05:41,  1.02s/it, beta=0.536, gamma=0.000, train_loss=883.0678, val_loss=981.2090]
Training UniVI:  16%|█▋        | 65/400 [01:08<05:41,  1.02s/it, beta=0.571, gamma=0.000, train_loss=883.7998, val_loss=974.5379]
Training UniVI:  16%|█▋        | 66/400 [01:08<05:40,  1.02s/it, beta=0.571, gamma=0.000, train_loss=883.7998, val_loss=974.5379]
Training UniVI:  16%|█▋        | 66/400 [01:09<05:40,  1.02s/it, beta=0.607, gamma=0.000, train_loss=883.7031, val_loss=966.1899]
Training UniVI:  17%|█▋        | 67/400 [01:09<05:39,  1.02s/it, beta=0.607, gamma=0.000, train_loss=883.7031, val_loss=966.1899]
Training UniVI:  17%|█▋        | 67/400 [01:10<05:39,  1.02s/it, beta=0.643, gamma=0.000, train_loss=883.8752, val_loss=966.6315]
Training UniVI:  17%|█▋        | 68/400 [01:10<05:37,  1.02s/it, beta=0.643, gamma=0.000, train_loss=883.8752, val_loss=966.6315]
Training UniVI:  17%|█▋        | 68/400 [01:11<05:37,  1.02s/it, beta=0.679, gamma=0.000, train_loss=883.9389, val_loss=960.0228]
Training UniVI:  17%|█▋        | 69/400 [01:11<05:36,  1.02s/it, beta=0.679, gamma=0.000, train_loss=883.9389, val_loss=960.0228]
Training UniVI:  17%|█▋        | 69/400 [01:12<05:36,  1.02s/it, beta=0.714, gamma=0.000, train_loss=884.3726, val_loss=954.4869]
Training UniVI:  18%|█▊        | 70/400 [01:12<05:35,  1.02s/it, beta=0.714, gamma=0.000, train_loss=884.3726, val_loss=954.4869]
Training UniVI:  18%|█▊        | 70/400 [01:13<05:35,  1.02s/it, beta=0.750, gamma=0.000, train_loss=883.8937, val_loss=952.1627]
Training UniVI:  18%|█▊        | 71/400 [01:13<05:38,  1.03s/it, beta=0.750, gamma=0.000, train_loss=883.8937, val_loss=952.1627]
Training UniVI:  18%|█▊        | 71/400 [01:14<05:38,  1.03s/it, beta=0.786, gamma=0.000, train_loss=884.5502, val_loss=950.3908]
Training UniVI:  18%|█▊        | 72/400 [01:14<05:39,  1.04s/it, beta=0.786, gamma=0.000, train_loss=884.5502, val_loss=950.3908]
Training UniVI:  18%|█▊        | 72/400 [01:15<05:39,  1.04s/it, beta=0.821, gamma=0.000, train_loss=883.9830, val_loss=948.9128]
Training UniVI:  18%|█▊        | 73/400 [01:15<05:41,  1.04s/it, beta=0.821, gamma=0.000, train_loss=883.9830, val_loss=948.9128]
Training UniVI:  18%|█▊        | 73/400 [01:16<05:41,  1.04s/it, beta=0.857, gamma=0.000, train_loss=884.5575, val_loss=947.1469]
Training UniVI:  18%|█▊        | 74/400 [01:16<05:39,  1.04s/it, beta=0.857, gamma=0.000, train_loss=884.5575, val_loss=947.1469]
Training UniVI:  18%|█▊        | 74/400 [01:17<05:39,  1.04s/it, beta=0.893, gamma=0.000, train_loss=884.3295, val_loss=944.2822]
Training UniVI:  19%|█▉        | 75/400 [01:17<05:36,  1.03s/it, beta=0.893, gamma=0.000, train_loss=884.3295, val_loss=944.2822]
Training UniVI:  19%|█▉        | 75/400 [01:18<05:36,  1.03s/it, beta=0.929, gamma=0.124, train_loss=886.9024, val_loss=930.4769]
Training UniVI:  19%|█▉        | 76/400 [01:18<05:32,  1.03s/it, beta=0.929, gamma=0.124, train_loss=886.9024, val_loss=930.4769]
Training UniVI:  19%|█▉        | 76/400 [01:19<05:32,  1.03s/it, beta=0.964, gamma=0.249, train_loss=889.1273, val_loss=919.5212]
Training UniVI:  19%|█▉        | 77/400 [01:19<05:31,  1.03s/it, beta=0.964, gamma=0.249, train_loss=889.1273, val_loss=919.5212]
Training UniVI:  19%|█▉        | 77/400 [01:20<05:31,  1.03s/it, beta=1.000, gamma=0.373, train_loss=890.1263, val_loss=914.2207]
Training UniVI:  20%|█▉        | 78/400 [01:20<05:31,  1.03s/it, beta=1.000, gamma=0.373, train_loss=890.1263, val_loss=914.2207]
Training UniVI:  20%|█▉        | 78/400 [01:21<05:31,  1.03s/it, beta=1.036, gamma=0.497, train_loss=892.0749, val_loss=910.6555]
Training UniVI:  20%|█▉        | 79/400 [01:21<05:29,  1.03s/it, beta=1.036, gamma=0.497, train_loss=892.0749, val_loss=910.6555]
Training UniVI:  20%|█▉        | 79/400 [01:22<05:29,  1.03s/it, beta=1.071, gamma=0.621, train_loss=891.1175, val_loss=909.5662]
Training UniVI:  20%|██        | 80/400 [01:22<05:27,  1.02s/it, beta=1.071, gamma=0.621, train_loss=891.1175, val_loss=909.5662]
Training UniVI:  20%|██        | 80/400 [01:23<05:27,  1.02s/it, beta=1.107, gamma=0.746, train_loss=892.6656, val_loss=905.8114]
Training UniVI:  20%|██        | 81/400 [01:23<05:26,  1.02s/it, beta=1.107, gamma=0.746, train_loss=892.6656, val_loss=905.8114]
Training UniVI:  20%|██        | 81/400 [01:24<05:26,  1.02s/it, beta=1.143, gamma=0.870, train_loss=893.0751, val_loss=905.9138]
Training UniVI:  20%|██        | 82/400 [01:24<05:26,  1.03s/it, beta=1.143, gamma=0.870, train_loss=893.0751, val_loss=905.9138]
Training UniVI:  20%|██        | 82/400 [01:25<05:26,  1.03s/it, beta=1.179, gamma=0.994, train_loss=893.2403, val_loss=903.7292]
Training UniVI:  21%|██        | 83/400 [01:25<05:24,  1.02s/it, beta=1.179, gamma=0.994, train_loss=893.2403, val_loss=903.7292]
Training UniVI:  21%|██        | 83/400 [01:26<05:24,  1.02s/it, beta=1.214, gamma=1.119, train_loss=894.2674, val_loss=900.8222]
Training UniVI:  21%|██        | 84/400 [01:26<05:24,  1.03s/it, beta=1.214, gamma=1.119, train_loss=894.2674, val_loss=900.8222]
Training UniVI:  21%|██        | 84/400 [01:27<05:24,  1.03s/it, beta=1.250, gamma=1.243, train_loss=894.5599, val_loss=901.0587]
Training UniVI:  21%|██▏       | 85/400 [01:27<05:21,  1.02s/it, beta=1.250, gamma=1.243, train_loss=894.5599, val_loss=901.0587]
Training UniVI:  21%|██▏       | 85/400 [01:28<05:21,  1.02s/it, beta=1.250, gamma=1.367, train_loss=895.6655, val_loss=901.7742]
Training UniVI:  22%|██▏       | 86/400 [01:28<05:21,  1.02s/it, beta=1.250, gamma=1.367, train_loss=895.6655, val_loss=901.7742]
Training UniVI:  22%|██▏       | 86/400 [01:29<05:21,  1.02s/it, beta=1.250, gamma=1.491, train_loss=894.6508, val_loss=900.3816]
Training UniVI:  22%|██▏       | 87/400 [01:29<05:19,  1.02s/it, beta=1.250, gamma=1.491, train_loss=894.6508, val_loss=900.3816]
Training UniVI:  22%|██▏       | 87/400 [01:30<05:19,  1.02s/it, beta=1.250, gamma=1.616, train_loss=893.9766, val_loss=899.5460]
Training UniVI:  22%|██▏       | 88/400 [01:30<05:19,  1.02s/it, beta=1.250, gamma=1.616, train_loss=893.9766, val_loss=899.5460]
Training UniVI:  22%|██▏       | 88/400 [01:31<05:19,  1.02s/it, beta=1.250, gamma=1.740, train_loss=894.1108, val_loss=899.3526]
Training UniVI:  22%|██▏       | 89/400 [01:31<05:18,  1.02s/it, beta=1.250, gamma=1.740, train_loss=894.1108, val_loss=899.3526]
Training UniVI:  22%|██▏       | 89/400 [01:32<05:18,  1.02s/it, beta=1.250, gamma=1.864, train_loss=893.5979, val_loss=898.1977]
Training UniVI:  22%|██▎       | 90/400 [01:32<05:18,  1.03s/it, beta=1.250, gamma=1.864, train_loss=893.5979, val_loss=898.1977]
Training UniVI:  22%|██▎       | 90/400 [01:33<05:18,  1.03s/it, beta=1.250, gamma=1.989, train_loss=894.5926, val_loss=897.9777]
Training UniVI:  23%|██▎       | 91/400 [01:33<05:16,  1.02s/it, beta=1.250, gamma=1.989, train_loss=894.5926, val_loss=897.9777]
Training UniVI:  23%|██▎       | 91/400 [01:34<05:16,  1.02s/it, beta=1.250, gamma=2.113, train_loss=894.6772, val_loss=897.1004]
Training UniVI:  23%|██▎       | 92/400 [01:34<05:27,  1.06s/it, beta=1.250, gamma=2.113, train_loss=894.6772, val_loss=897.1004]
Training UniVI:  23%|██▎       | 92/400 [01:35<05:27,  1.06s/it, beta=1.250, gamma=2.237, train_loss=894.4353, val_loss=897.5634]
Training UniVI:  23%|██▎       | 93/400 [01:35<05:21,  1.05s/it, beta=1.250, gamma=2.237, train_loss=894.4353, val_loss=897.5634]
Training UniVI:  23%|██▎       | 93/400 [01:36<05:21,  1.05s/it, beta=1.250, gamma=2.361, train_loss=893.7865, val_loss=896.0641]
Training UniVI:  24%|██▎       | 94/400 [01:36<05:17,  1.04s/it, beta=1.250, gamma=2.361, train_loss=893.7865, val_loss=896.0641]
Training UniVI:  24%|██▎       | 94/400 [01:37<05:17,  1.04s/it, beta=1.250, gamma=2.486, train_loss=894.3180, val_loss=895.9908]
Training UniVI:  24%|██▍       | 95/400 [01:37<05:15,  1.03s/it, beta=1.250, gamma=2.486, train_loss=894.3180, val_loss=895.9908]
Training UniVI:  24%|██▍       | 95/400 [01:38<05:15,  1.03s/it, beta=1.250, gamma=2.610, train_loss=894.5101, val_loss=896.2109]
Training UniVI:  24%|██▍       | 96/400 [01:38<05:13,  1.03s/it, beta=1.250, gamma=2.610, train_loss=894.5101, val_loss=896.2109]
Training UniVI:  24%|██▍       | 96/400 [01:39<05:13,  1.03s/it, beta=1.250, gamma=2.734, train_loss=895.2599, val_loss=895.8615]
Training UniVI:  24%|██▍       | 97/400 [01:39<05:11,  1.03s/it, beta=1.250, gamma=2.734, train_loss=895.2599, val_loss=895.8615]
Training UniVI:  24%|██▍       | 97/400 [01:40<05:11,  1.03s/it, beta=1.250, gamma=2.859, train_loss=894.6442, val_loss=895.6740]
Training UniVI:  24%|██▍       | 98/400 [01:40<05:08,  1.02s/it, beta=1.250, gamma=2.859, train_loss=894.6442, val_loss=895.6740]
Training UniVI:  24%|██▍       | 98/400 [01:41<05:08,  1.02s/it, beta=1.250, gamma=2.983, train_loss=894.2341, val_loss=895.4545]
Training UniVI:  25%|██▍       | 99/400 [01:41<05:08,  1.02s/it, beta=1.250, gamma=2.983, train_loss=894.2341, val_loss=895.4545]
[2026-09-21 00:46:50,295] [UniVITrainer] [INFO] [Epoch 100] Train loss=894.0796 (beta=1.250, gamma=3.107)
[2026-09-21 00:46:50,329] [UniVITrainer] [INFO] [Epoch 100] Val loss=895.8738 (beta=1.250, gamma=4.350)
Training UniVI:  25%|██▍       | 99/400 [01:42<05:08,  1.02s/it, beta=1.250, gamma=3.107, train_loss=894.0796, val_loss=895.8738]
Training UniVI:  25%|██▌       | 100/400 [01:42<05:06,  1.02s/it, beta=1.250, gamma=3.107, train_loss=894.0796, val_loss=895.8738]
Training UniVI:  25%|██▌       | 100/400 [01:44<05:06,  1.02s/it, beta=1.250, gamma=3.231, train_loss=894.0647, val_loss=894.4191]
Training UniVI:  25%|██▌       | 101/400 [01:44<05:05,  1.02s/it, beta=1.250, gamma=3.231, train_loss=894.0647, val_loss=894.4191]
Training UniVI:  25%|██▌       | 101/400 [01:45<05:05,  1.02s/it, beta=1.250, gamma=3.356, train_loss=894.0100, val_loss=895.1014]
Training UniVI:  26%|██▌       | 102/400 [01:45<05:03,  1.02s/it, beta=1.250, gamma=3.356, train_loss=894.0100, val_loss=895.1014]
Training UniVI:  26%|██▌       | 102/400 [01:46<05:03,  1.02s/it, beta=1.250, gamma=3.480, train_loss=894.6983, val_loss=894.7870]
Training UniVI:  26%|██▌       | 103/400 [01:46<05:05,  1.03s/it, beta=1.250, gamma=3.480, train_loss=894.6983, val_loss=894.7870]
Training UniVI:  26%|██▌       | 103/400 [01:47<05:05,  1.03s/it, beta=1.250, gamma=3.604, train_loss=894.0463, val_loss=894.9208]
Training UniVI:  26%|██▌       | 104/400 [01:47<05:04,  1.03s/it, beta=1.250, gamma=3.604, train_loss=894.0463, val_loss=894.9208]
Training UniVI:  26%|██▌       | 104/400 [01:48<05:04,  1.03s/it, beta=1.250, gamma=3.729, train_loss=894.2328, val_loss=894.1076]
Training UniVI:  26%|██▋       | 105/400 [01:48<05:03,  1.03s/it, beta=1.250, gamma=3.729, train_loss=894.2328, val_loss=894.1076]
Training UniVI:  26%|██▋       | 105/400 [01:49<05:03,  1.03s/it, beta=1.250, gamma=3.853, train_loss=893.3763, val_loss=893.9024]
Training UniVI:  26%|██▋       | 106/400 [01:49<05:01,  1.03s/it, beta=1.250, gamma=3.853, train_loss=893.3763, val_loss=893.9024]
Training UniVI:  26%|██▋       | 106/400 [01:50<05:01,  1.03s/it, beta=1.250, gamma=3.977, train_loss=892.5810, val_loss=894.2571]
Training UniVI:  27%|██▋       | 107/400 [01:50<05:00,  1.03s/it, beta=1.250, gamma=3.977, train_loss=892.5810, val_loss=894.2571]
Training UniVI:  27%|██▋       | 107/400 [01:51<05:00,  1.03s/it, beta=1.250, gamma=4.101, train_loss=894.9242, val_loss=893.6678]
Training UniVI:  27%|██▋       | 108/400 [01:51<05:01,  1.03s/it, beta=1.250, gamma=4.101, train_loss=894.9242, val_loss=893.6678]
Training UniVI:  27%|██▋       | 108/400 [01:52<05:01,  1.03s/it, beta=1.250, gamma=4.226, train_loss=892.7179, val_loss=893.4564]
[2026-09-21 00:46:59,575] [UniVITrainer] [INFO] [Epoch 109] Best tracking warmup ends next epoch (best_epoch_warmup=110).
Training UniVI:  27%|██▋       | 109/400 [01:52<04:57,  1.02s/it, beta=1.250, gamma=4.226, train_loss=892.7179, val_loss=893.4564]
Training UniVI:  27%|██▋       | 109/400 [01:53<04:57,  1.02s/it, beta=1.250, gamma=4.350, train_loss=893.2364, val_loss=893.9067]
[2026-09-21 00:47:00,612] [UniVITrainer] [INFO] [Epoch 110] New best val loss: 893.9067
Training UniVI:  28%|██▊       | 110/400 [01:53<04:58,  1.03s/it, beta=1.250, gamma=4.350, train_loss=893.2364, val_loss=893.9067]
Training UniVI:  28%|██▊       | 110/400 [01:54<04:58,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.7542, val_loss=893.5537]
[2026-09-21 00:47:01,650] [UniVITrainer] [INFO] [Epoch 111] New best val loss: 893.5537
Training UniVI:  28%|██▊       | 111/400 [01:54<04:57,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.7542, val_loss=893.5537]
Training UniVI:  28%|██▊       | 111/400 [01:55<04:57,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.4288, val_loss=893.1466]
[2026-09-21 00:47:02,687] [UniVITrainer] [INFO] [Epoch 112] New best val loss: 893.1466
Training UniVI:  28%|██▊       | 112/400 [01:55<04:57,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.4288, val_loss=893.1466]
Training UniVI:  28%|██▊       | 112/400 [01:56<04:57,  1.03s/it, beta=1.250, gamma=4.350, train_loss=891.9913, val_loss=894.5000]
Training UniVI:  28%|██▊       | 113/400 [01:56<04:56,  1.03s/it, beta=1.250, gamma=4.350, train_loss=891.9913, val_loss=894.5000]
Training UniVI:  28%|██▊       | 113/400 [01:57<04:56,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.0752, val_loss=893.4216]
Training UniVI:  28%|██▊       | 114/400 [01:57<04:55,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.0752, val_loss=893.4216]
Training UniVI:  28%|██▊       | 114/400 [01:58<04:55,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.9742, val_loss=894.2277]
Training UniVI:  29%|██▉       | 115/400 [01:58<04:52,  1.03s/it, beta=1.250, gamma=4.350, train_loss=892.9742, val_loss=894.2277]
Training UniVI:  29%|██▉       | 115/400 [01:59<04:52,  1.03s/it, beta=1.250, gamma=4.350, train_loss=893.0800, val_loss=894.5850]
Training UniVI:  29%|██▉       | 116/400 [01:59<04:51,  1.03s/it, beta=1.250, gamma=4.350, train_loss=893.0800, val_loss=894.5850]
Training UniVI:  29%|██▉       | 116/400 [02:00<04:51,  1.03s/it, beta=1.250, gamma=4.350, train_loss=890.7701, val_loss=894.6185]
Training UniVI:  29%|██▉       | 117/400 [02:00<04:49,  1.02s/it, beta=1.250, gamma=4.350, train_loss=890.7701, val_loss=894.6185]
Training UniVI:  29%|██▉       | 117/400 [02:01<04:49,  1.02s/it, beta=1.250, gamma=4.350, train_loss=890.8967, val_loss=893.5407]
Training UniVI:  30%|██▉       | 118/400 [02:01<04:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=890.8967, val_loss=893.5407]
Training UniVI:  30%|██▉       | 118/400 [02:02<04:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.7270, val_loss=893.4150]
Training UniVI:  30%|██▉       | 119/400 [02:02<04:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.7270, val_loss=893.4150]
Training UniVI:  30%|██▉       | 119/400 [02:03<04:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.4811, val_loss=894.1627]
Training UniVI:  30%|███       | 120/400 [02:03<04:46,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.4811, val_loss=894.1627]
Training UniVI:  30%|███       | 120/400 [02:04<04:46,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.9737, val_loss=894.1321]
Training UniVI:  30%|███       | 121/400 [02:04<04:45,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.9737, val_loss=894.1321]
Training UniVI:  30%|███       | 121/400 [02:05<04:45,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.4651, val_loss=892.9580]
[2026-09-21 00:47:12,920] [UniVITrainer] [INFO] [Epoch 122] New best val loss: 892.9580
Training UniVI:  30%|███       | 122/400 [02:05<04:44,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.4651, val_loss=892.9580]
Training UniVI:  30%|███       | 122/400 [02:06<04:44,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.2600, val_loss=894.2567]
Training UniVI:  31%|███       | 123/400 [02:06<04:43,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.2600, val_loss=894.2567]
Training UniVI:  31%|███       | 123/400 [02:07<04:43,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.5676, val_loss=893.5481]
Training UniVI:  31%|███       | 124/400 [02:07<04:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.5676, val_loss=893.5481]
Training UniVI:  31%|███       | 124/400 [02:08<04:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.3848, val_loss=894.3311]
Training UniVI:  31%|███▏      | 125/400 [02:08<04:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.3848, val_loss=894.3311]
Training UniVI:  31%|███▏      | 125/400 [02:09<04:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.0508, val_loss=894.9636]
Training UniVI:  32%|███▏      | 126/400 [02:09<04:38,  1.02s/it, beta=1.250, gamma=4.350, train_loss=889.0508, val_loss=894.9636]
Training UniVI:  32%|███▏      | 126/400 [02:10<04:38,  1.02s/it, beta=1.250, gamma=4.350, train_loss=888.6349, val_loss=893.1765]
Training UniVI:  32%|███▏      | 127/400 [02:10<04:38,  1.02s/it, beta=1.250, gamma=4.350, train_loss=888.6349, val_loss=893.1765]
Training UniVI:  32%|███▏      | 127/400 [02:11<04:38,  1.02s/it, beta=1.250, gamma=4.350, train_loss=887.7709, val_loss=893.7564]
Training UniVI:  32%|███▏      | 128/400 [02:11<04:36,  1.02s/it, beta=1.250, gamma=4.350, train_loss=887.7709, val_loss=893.7564]
Training UniVI:  32%|███▏      | 128/400 [02:12<04:36,  1.02s/it, beta=1.250, gamma=4.350, train_loss=888.0647, val_loss=892.8262]
[2026-09-21 00:47:20,064] [UniVITrainer] [INFO] [Epoch 129] New best val loss: 892.8262
Training UniVI:  32%|███▏      | 129/400 [02:12<04:37,  1.02s/it, beta=1.250, gamma=4.350, train_loss=888.0647, val_loss=892.8262]
Training UniVI:  32%|███▏      | 129/400 [02:13<04:37,  1.02s/it, beta=1.250, gamma=4.350, train_loss=887.3106, val_loss=893.4935]
Training UniVI:  32%|███▎      | 130/400 [02:13<04:41,  1.04s/it, beta=1.250, gamma=4.350, train_loss=887.3106, val_loss=893.4935]
Training UniVI:  32%|███▎      | 130/400 [02:14<04:41,  1.04s/it, beta=1.250, gamma=4.350, train_loss=887.5899, val_loss=894.1957]
Training UniVI:  33%|███▎      | 131/400 [02:14<04:42,  1.05s/it, beta=1.250, gamma=4.350, train_loss=887.5899, val_loss=894.1957]
Training UniVI:  33%|███▎      | 131/400 [02:15<04:42,  1.05s/it, beta=1.250, gamma=4.350, train_loss=887.3327, val_loss=893.9418]
Training UniVI:  33%|███▎      | 132/400 [02:15<04:38,  1.04s/it, beta=1.250, gamma=4.350, train_loss=887.3327, val_loss=893.9418]
Training UniVI:  33%|███▎      | 132/400 [02:16<04:38,  1.04s/it, beta=1.250, gamma=4.350, train_loss=886.3782, val_loss=893.0788]
Training UniVI:  33%|███▎      | 133/400 [02:16<04:36,  1.04s/it, beta=1.250, gamma=4.350, train_loss=886.3782, val_loss=893.0788]
Training UniVI:  33%|███▎      | 133/400 [02:17<04:36,  1.04s/it, beta=1.250, gamma=4.350, train_loss=885.0104, val_loss=893.5895]
Training UniVI:  34%|███▎      | 134/400 [02:17<04:34,  1.03s/it, beta=1.250, gamma=4.350, train_loss=885.0104, val_loss=893.5895]
Training UniVI:  34%|███▎      | 134/400 [02:18<04:34,  1.03s/it, beta=1.250, gamma=4.350, train_loss=887.2306, val_loss=893.4545]
Training UniVI:  34%|███▍      | 135/400 [02:18<04:31,  1.02s/it, beta=1.250, gamma=4.350, train_loss=887.2306, val_loss=893.4545]
Training UniVI:  34%|███▍      | 135/400 [02:19<04:31,  1.02s/it, beta=1.250, gamma=4.350, train_loss=888.0627, val_loss=894.1757]
Training UniVI:  34%|███▍      | 136/400 [02:19<04:31,  1.03s/it, beta=1.250, gamma=4.350, train_loss=888.0627, val_loss=894.1757]
Training UniVI:  34%|███▍      | 136/400 [02:21<04:31,  1.03s/it, beta=1.250, gamma=4.350, train_loss=886.9751, val_loss=894.2230]
Training UniVI:  34%|███▍      | 137/400 [02:21<04:30,  1.03s/it, beta=1.250, gamma=4.350, train_loss=886.9751, val_loss=894.2230]
Training UniVI:  34%|███▍      | 137/400 [02:22<04:30,  1.03s/it, beta=1.250, gamma=4.350, train_loss=887.4858, val_loss=893.2033]
Training UniVI:  34%|███▍      | 138/400 [02:22<04:29,  1.03s/it, beta=1.250, gamma=4.350, train_loss=887.4858, val_loss=893.2033]
Training UniVI:  34%|███▍      | 138/400 [02:23<04:29,  1.03s/it, beta=1.250, gamma=4.350, train_loss=885.4091, val_loss=894.1384]
Training UniVI:  35%|███▍      | 139/400 [02:23<04:27,  1.03s/it, beta=1.250, gamma=4.350, train_loss=885.4091, val_loss=894.1384]
Training UniVI:  35%|███▍      | 139/400 [02:24<04:27,  1.03s/it, beta=1.250, gamma=4.350, train_loss=886.4648, val_loss=894.4606]
Training UniVI:  35%|███▌      | 140/400 [02:24<04:27,  1.03s/it, beta=1.250, gamma=4.350, train_loss=886.4648, val_loss=894.4606]
Training UniVI:  35%|███▌      | 140/400 [02:25<04:27,  1.03s/it, beta=1.250, gamma=4.350, train_loss=885.3659, val_loss=893.4937]
Training UniVI:  35%|███▌      | 141/400 [02:25<04:26,  1.03s/it, beta=1.250, gamma=4.350, train_loss=885.3659, val_loss=893.4937]
Training UniVI:  35%|███▌      | 141/400 [02:26<04:26,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.9669, val_loss=895.0175]
Training UniVI:  36%|███▌      | 142/400 [02:26<04:33,  1.06s/it, beta=1.250, gamma=4.350, train_loss=884.9669, val_loss=895.0175]
Training UniVI:  36%|███▌      | 142/400 [02:27<04:33,  1.06s/it, beta=1.250, gamma=4.350, train_loss=883.8890, val_loss=893.9971]
Training UniVI:  36%|███▌      | 143/400 [02:27<04:29,  1.05s/it, beta=1.250, gamma=4.350, train_loss=883.8890, val_loss=893.9971]
Training UniVI:  36%|███▌      | 143/400 [02:28<04:29,  1.05s/it, beta=1.250, gamma=4.350, train_loss=885.3762, val_loss=893.6650]
Training UniVI:  36%|███▌      | 144/400 [02:28<04:27,  1.04s/it, beta=1.250, gamma=4.350, train_loss=885.3762, val_loss=893.6650]
Training UniVI:  36%|███▌      | 144/400 [02:29<04:27,  1.04s/it, beta=1.250, gamma=4.350, train_loss=883.7672, val_loss=892.5613]
[2026-09-21 00:47:36,674] [UniVITrainer] [INFO] [Epoch 145] New best val loss: 892.5613
Training UniVI:  36%|███▋      | 145/400 [02:29<04:23,  1.03s/it, beta=1.250, gamma=4.350, train_loss=883.7672, val_loss=892.5613]
Training UniVI:  36%|███▋      | 145/400 [02:30<04:23,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.1131, val_loss=893.2346]
Training UniVI:  36%|███▋      | 146/400 [02:30<04:22,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.1131, val_loss=893.2346]
Training UniVI:  36%|███▋      | 146/400 [02:31<04:22,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.6514, val_loss=893.4193]
Training UniVI:  37%|███▋      | 147/400 [02:31<04:20,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.6514, val_loss=893.4193]
Training UniVI:  37%|███▋      | 147/400 [02:32<04:20,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.2256, val_loss=893.7837]
Training UniVI:  37%|███▋      | 148/400 [02:32<04:19,  1.03s/it, beta=1.250, gamma=4.350, train_loss=884.2256, val_loss=893.7837]
Training UniVI:  37%|███▋      | 148/400 [02:33<04:19,  1.03s/it, beta=1.250, gamma=4.350, train_loss=882.9866, val_loss=893.4225]
Training UniVI:  37%|███▋      | 149/400 [02:33<04:18,  1.03s/it, beta=1.250, gamma=4.350, train_loss=882.9866, val_loss=893.4225]
[2026-09-21 00:47:41,771] [UniVITrainer] [INFO] [Epoch 150] Train loss=882.2986 (beta=1.250, gamma=4.350)
[2026-09-21 00:47:41,804] [UniVITrainer] [INFO] [Epoch 150] Val loss=892.8906 (beta=1.250, gamma=4.350)
Training UniVI:  37%|███▋      | 149/400 [02:34<04:18,  1.03s/it, beta=1.250, gamma=4.350, train_loss=882.2986, val_loss=892.8906]
Training UniVI:  38%|███▊      | 150/400 [02:34<04:16,  1.03s/it, beta=1.250, gamma=4.350, train_loss=882.2986, val_loss=892.8906]
Training UniVI:  38%|███▊      | 150/400 [02:35<04:16,  1.03s/it, beta=1.250, gamma=4.350, train_loss=881.8406, val_loss=894.5910]
Training UniVI:  38%|███▊      | 151/400 [02:35<04:15,  1.03s/it, beta=1.250, gamma=4.350, train_loss=881.8406, val_loss=894.5910]
Training UniVI:  38%|███▊      | 151/400 [02:36<04:15,  1.03s/it, beta=1.250, gamma=4.350, train_loss=882.7411, val_loss=893.9317]
Training UniVI:  38%|███▊      | 152/400 [02:36<04:13,  1.02s/it, beta=1.250, gamma=4.350, train_loss=882.7411, val_loss=893.9317]
Training UniVI:  38%|███▊      | 152/400 [02:37<04:13,  1.02s/it, beta=1.250, gamma=4.350, train_loss=883.4450, val_loss=894.6815]
Training UniVI:  38%|███▊      | 153/400 [02:37<04:12,  1.02s/it, beta=1.250, gamma=4.350, train_loss=883.4450, val_loss=894.6815]
Training UniVI:  38%|███▊      | 153/400 [02:38<04:12,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.0335, val_loss=893.0833]
Training UniVI:  38%|███▊      | 154/400 [02:38<04:11,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.0335, val_loss=893.0833]
Training UniVI:  38%|███▊      | 154/400 [02:39<04:11,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.5549, val_loss=893.1270]
Training UniVI:  39%|███▉      | 155/400 [02:39<04:10,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.5549, val_loss=893.1270]
Training UniVI:  39%|███▉      | 155/400 [02:40<04:10,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.2494, val_loss=894.6259]
Training UniVI:  39%|███▉      | 156/400 [02:40<04:08,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.2494, val_loss=894.6259]
Training UniVI:  39%|███▉      | 156/400 [02:41<04:08,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.9947, val_loss=893.5921]
Training UniVI:  39%|███▉      | 157/400 [02:41<04:07,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.9947, val_loss=893.5921]
Training UniVI:  39%|███▉      | 157/400 [02:42<04:07,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.9660, val_loss=893.4149]
Training UniVI:  40%|███▉      | 158/400 [02:42<04:06,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.9660, val_loss=893.4149]
Training UniVI:  40%|███▉      | 158/400 [02:43<04:06,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.1647, val_loss=893.1555]
Training UniVI:  40%|███▉      | 159/400 [02:43<04:06,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.1647, val_loss=893.1555]
Training UniVI:  40%|███▉      | 159/400 [02:44<04:06,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.8466, val_loss=892.0657]
[2026-09-21 00:47:52,024] [UniVITrainer] [INFO] [Epoch 160] New best val loss: 892.0657
Training UniVI:  40%|████      | 160/400 [02:44<04:05,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.8466, val_loss=892.0657]
Training UniVI:  40%|████      | 160/400 [02:45<04:05,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.4559, val_loss=893.4800]
Training UniVI:  40%|████      | 161/400 [02:45<04:04,  1.02s/it, beta=1.250, gamma=4.350, train_loss=881.4559, val_loss=893.4800]
Training UniVI:  40%|████      | 161/400 [02:46<04:04,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.9349, val_loss=893.6672]
Training UniVI:  40%|████      | 162/400 [02:46<04:03,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.9349, val_loss=893.6672]
Training UniVI:  40%|████      | 162/400 [02:47<04:03,  1.02s/it, beta=1.250, gamma=4.350, train_loss=879.9705, val_loss=893.6740]
Training UniVI:  41%|████      | 163/400 [02:47<04:01,  1.02s/it, beta=1.250, gamma=4.350, train_loss=879.9705, val_loss=893.6740]
Training UniVI:  41%|████      | 163/400 [02:48<04:01,  1.02s/it, beta=1.250, gamma=4.350, train_loss=879.2841, val_loss=893.7551]
Training UniVI:  41%|████      | 164/400 [02:48<04:00,  1.02s/it, beta=1.250, gamma=4.350, train_loss=879.2841, val_loss=893.7551]
Training UniVI:  41%|████      | 164/400 [02:49<04:00,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.4448, val_loss=893.8979]
Training UniVI:  41%|████▏     | 165/400 [02:49<03:59,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.4448, val_loss=893.8979]
Training UniVI:  41%|████▏     | 165/400 [02:50<03:59,  1.02s/it, beta=1.250, gamma=4.350, train_loss=879.6896, val_loss=893.5966]
Training UniVI:  42%|████▏     | 166/400 [02:50<04:00,  1.03s/it, beta=1.250, gamma=4.350, train_loss=879.6896, val_loss=893.5966]
Training UniVI:  42%|████▏     | 166/400 [02:51<04:00,  1.03s/it, beta=1.250, gamma=4.350, train_loss=879.3617, val_loss=894.6089]
Training UniVI:  42%|████▏     | 167/400 [02:51<03:58,  1.02s/it, beta=1.250, gamma=4.350, train_loss=879.3617, val_loss=894.6089]
Training UniVI:  42%|████▏     | 167/400 [02:52<03:58,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.6970, val_loss=894.6547]
Training UniVI:  42%|████▏     | 168/400 [02:52<03:57,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.6970, val_loss=894.6547]
Training UniVI:  42%|████▏     | 168/400 [02:53<03:57,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.9413, val_loss=894.7817]
Training UniVI:  42%|████▏     | 169/400 [02:53<03:55,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.9413, val_loss=894.7817]
Training UniVI:  42%|████▏     | 169/400 [02:54<03:55,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.1850, val_loss=894.3716]
Training UniVI:  42%|████▎     | 170/400 [02:54<03:54,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.1850, val_loss=894.3716]
Training UniVI:  42%|████▎     | 170/400 [02:55<03:54,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.2881, val_loss=893.9407]
Training UniVI:  43%|████▎     | 171/400 [02:55<03:53,  1.02s/it, beta=1.250, gamma=4.350, train_loss=880.2881, val_loss=893.9407]
Training UniVI:  43%|████▎     | 171/400 [02:56<03:53,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.6809, val_loss=893.7900]
Training UniVI:  43%|████▎     | 172/400 [02:56<03:51,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.6809, val_loss=893.7900]
Training UniVI:  43%|████▎     | 172/400 [02:57<03:51,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.2909, val_loss=893.3983]
Training UniVI:  43%|████▎     | 173/400 [02:57<03:50,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.2909, val_loss=893.3983]
Training UniVI:  43%|████▎     | 173/400 [02:58<03:50,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.5939, val_loss=892.4224]
Training UniVI:  44%|████▎     | 174/400 [02:58<03:49,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.5939, val_loss=892.4224]
Training UniVI:  44%|████▎     | 174/400 [02:59<03:49,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.4321, val_loss=892.7604]
Training UniVI:  44%|████▍     | 175/400 [02:59<03:49,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.4321, val_loss=892.7604]
Training UniVI:  44%|████▍     | 175/400 [03:00<03:49,  1.02s/it, beta=1.250, gamma=4.350, train_loss=877.8807, val_loss=894.0200]
Training UniVI:  44%|████▍     | 176/400 [03:00<03:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=877.8807, val_loss=894.0200]
Training UniVI:  44%|████▍     | 176/400 [03:02<03:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=877.1344, val_loss=894.0457]
Training UniVI:  44%|████▍     | 177/400 [03:02<03:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=877.1344, val_loss=894.0457]
Training UniVI:  44%|████▍     | 177/400 [03:03<03:47,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.7513, val_loss=893.1730]
Training UniVI:  44%|████▍     | 178/400 [03:03<03:44,  1.01s/it, beta=1.250, gamma=4.350, train_loss=876.7513, val_loss=893.1730]
Training UniVI:  44%|████▍     | 178/400 [03:04<03:44,  1.01s/it, beta=1.250, gamma=4.350, train_loss=877.1338, val_loss=893.3207]
Training UniVI:  45%|████▍     | 179/400 [03:04<03:44,  1.02s/it, beta=1.250, gamma=4.350, train_loss=877.1338, val_loss=893.3207]
Training UniVI:  45%|████▍     | 179/400 [03:05<03:44,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.3829, val_loss=893.1020]
Training UniVI:  45%|████▌     | 180/400 [03:05<03:43,  1.02s/it, beta=1.250, gamma=4.350, train_loss=878.3829, val_loss=893.1020]
Training UniVI:  45%|████▌     | 180/400 [03:06<03:43,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.8516, val_loss=893.5695]
Training UniVI:  45%|████▌     | 181/400 [03:06<03:43,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.8516, val_loss=893.5695]
Training UniVI:  45%|████▌     | 181/400 [03:07<03:43,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.6677, val_loss=893.3596]
Training UniVI:  46%|████▌     | 182/400 [03:07<03:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.6677, val_loss=893.3596]
Training UniVI:  46%|████▌     | 182/400 [03:08<03:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.5037, val_loss=894.3834]
Training UniVI:  46%|████▌     | 183/400 [03:08<03:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.5037, val_loss=894.3834]
Training UniVI:  46%|████▌     | 183/400 [03:09<03:41,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.7363, val_loss=894.0727]
Training UniVI:  46%|████▌     | 184/400 [03:09<03:40,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.7363, val_loss=894.0727]
Training UniVI:  46%|████▌     | 184/400 [03:10<03:40,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.1342, val_loss=894.2446]
Training UniVI:  46%|████▋     | 185/400 [03:10<03:38,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.1342, val_loss=894.2446]
Training UniVI:  46%|████▋     | 185/400 [03:11<03:38,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.3733, val_loss=895.4325]
Training UniVI:  46%|████▋     | 186/400 [03:11<03:37,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.3733, val_loss=895.4325]
Training UniVI:  46%|████▋     | 186/400 [03:12<03:37,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.8597, val_loss=894.5309]
Training UniVI:  47%|████▋     | 187/400 [03:12<03:36,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.8597, val_loss=894.5309]
Training UniVI:  47%|████▋     | 187/400 [03:13<03:36,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.8065, val_loss=894.1853]
Training UniVI:  47%|████▋     | 188/400 [03:13<03:38,  1.03s/it, beta=1.250, gamma=4.350, train_loss=875.8065, val_loss=894.1853]
Training UniVI:  47%|████▋     | 188/400 [03:14<03:38,  1.03s/it, beta=1.250, gamma=4.350, train_loss=875.4015, val_loss=894.6072]
Training UniVI:  47%|████▋     | 189/400 [03:14<03:40,  1.05s/it, beta=1.250, gamma=4.350, train_loss=875.4015, val_loss=894.6072]
Training UniVI:  47%|████▋     | 189/400 [03:15<03:40,  1.05s/it, beta=1.250, gamma=4.350, train_loss=875.0662, val_loss=893.1078]
Training UniVI:  48%|████▊     | 190/400 [03:15<03:40,  1.05s/it, beta=1.250, gamma=4.350, train_loss=875.0662, val_loss=893.1078]
Training UniVI:  48%|████▊     | 190/400 [03:16<03:40,  1.05s/it, beta=1.250, gamma=4.350, train_loss=875.4133, val_loss=895.6769]
Training UniVI:  48%|████▊     | 191/400 [03:16<03:37,  1.04s/it, beta=1.250, gamma=4.350, train_loss=875.4133, val_loss=895.6769]
Training UniVI:  48%|████▊     | 191/400 [03:17<03:37,  1.04s/it, beta=1.250, gamma=4.350, train_loss=873.5303, val_loss=893.6398]
Training UniVI:  48%|████▊     | 192/400 [03:17<03:35,  1.03s/it, beta=1.250, gamma=4.350, train_loss=873.5303, val_loss=893.6398]
Training UniVI:  48%|████▊     | 192/400 [03:18<03:35,  1.03s/it, beta=1.250, gamma=4.350, train_loss=873.8675, val_loss=893.6744]
Training UniVI:  48%|████▊     | 193/400 [03:18<03:32,  1.03s/it, beta=1.250, gamma=4.350, train_loss=873.8675, val_loss=893.6744]
Training UniVI:  48%|████▊     | 193/400 [03:19<03:32,  1.03s/it, beta=1.250, gamma=4.350, train_loss=875.1566, val_loss=893.4537]
Training UniVI:  48%|████▊     | 194/400 [03:19<03:30,  1.02s/it, beta=1.250, gamma=4.350, train_loss=875.1566, val_loss=893.4537]
Training UniVI:  48%|████▊     | 194/400 [03:20<03:30,  1.02s/it, beta=1.250, gamma=4.350, train_loss=876.1313, val_loss=894.7896]
Training UniVI:  49%|████▉     | 195/400 [03:20<03:37,  1.06s/it, beta=1.250, gamma=4.350, train_loss=876.1313, val_loss=894.7896]
Training UniVI:  49%|████▉     | 195/400 [03:21<03:37,  1.06s/it, beta=1.250, gamma=4.350, train_loss=874.3237, val_loss=894.8013]
Training UniVI:  49%|████▉     | 196/400 [03:21<03:34,  1.05s/it, beta=1.250, gamma=4.350, train_loss=874.3237, val_loss=894.8013]
Training UniVI:  49%|████▉     | 196/400 [03:22<03:34,  1.05s/it, beta=1.250, gamma=4.350, train_loss=874.1411, val_loss=894.1012]
Training UniVI:  49%|████▉     | 197/400 [03:22<03:31,  1.04s/it, beta=1.250, gamma=4.350, train_loss=874.1411, val_loss=894.1012]
Training UniVI:  49%|████▉     | 197/400 [03:23<03:31,  1.04s/it, beta=1.250, gamma=4.350, train_loss=873.4780, val_loss=893.1948]
Training UniVI:  50%|████▉     | 198/400 [03:23<03:29,  1.04s/it, beta=1.250, gamma=4.350, train_loss=873.4780, val_loss=893.1948]
Training UniVI:  50%|████▉     | 198/400 [03:24<03:29,  1.04s/it, beta=1.250, gamma=4.350, train_loss=874.0100, val_loss=895.3771]
Training UniVI:  50%|████▉     | 199/400 [03:24<03:28,  1.04s/it, beta=1.250, gamma=4.350, train_loss=874.0100, val_loss=895.3771]
[2026-09-21 00:48:33,041] [UniVITrainer] [INFO] [Epoch 200] Train loss=873.5079 (beta=1.250, gamma=4.350)
[2026-09-21 00:48:33,072] [UniVITrainer] [INFO] [Epoch 200] Val loss=894.2448 (beta=1.250, gamma=4.350)
Training UniVI:  50%|████▉     | 199/400 [03:25<03:28,  1.04s/it, beta=1.250, gamma=4.350, train_loss=873.5079, val_loss=894.2448]
Training UniVI:  50%|█████     | 200/400 [03:25<03:26,  1.03s/it, beta=1.250, gamma=4.350, train_loss=873.5079, val_loss=894.2448]
Training UniVI:  50%|█████     | 200/400 [03:26<03:26,  1.03s/it, beta=1.250, gamma=4.350, train_loss=872.1524, val_loss=893.6408]
Training UniVI:  50%|█████     | 201/400 [03:26<03:25,  1.03s/it, beta=1.250, gamma=4.350, train_loss=872.1524, val_loss=893.6408]
Training UniVI:  50%|█████     | 201/400 [03:27<03:25,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.1901, val_loss=893.1939]
Training UniVI:  50%|█████     | 202/400 [03:27<03:23,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.1901, val_loss=893.1939]
Training UniVI:  50%|█████     | 202/400 [03:28<03:23,  1.03s/it, beta=1.250, gamma=4.350, train_loss=872.1182, val_loss=894.0600]
Training UniVI:  51%|█████     | 203/400 [03:28<03:22,  1.03s/it, beta=1.250, gamma=4.350, train_loss=872.1182, val_loss=894.0600]
Training UniVI:  51%|█████     | 203/400 [03:29<03:22,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.3705, val_loss=893.8366]
Training UniVI:  51%|█████     | 204/400 [03:29<03:20,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.3705, val_loss=893.8366]
Training UniVI:  51%|█████     | 204/400 [03:30<03:20,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.0989, val_loss=895.5202]
Training UniVI:  51%|█████▏    | 205/400 [03:30<03:20,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.0989, val_loss=895.5202]
Training UniVI:  51%|█████▏    | 205/400 [03:31<03:20,  1.03s/it, beta=1.250, gamma=4.350, train_loss=872.0174, val_loss=893.8470]
Training UniVI:  52%|█████▏    | 206/400 [03:31<03:19,  1.03s/it, beta=1.250, gamma=4.350, train_loss=872.0174, val_loss=893.8470]
Training UniVI:  52%|█████▏    | 206/400 [03:32<03:19,  1.03s/it, beta=1.250, gamma=4.350, train_loss=870.6888, val_loss=894.3695]
Training UniVI:  52%|█████▏    | 207/400 [03:32<03:18,  1.03s/it, beta=1.250, gamma=4.350, train_loss=870.6888, val_loss=894.3695]
Training UniVI:  52%|█████▏    | 207/400 [03:33<03:18,  1.03s/it, beta=1.250, gamma=4.350, train_loss=870.6453, val_loss=893.5016]
Training UniVI:  52%|█████▏    | 208/400 [03:33<03:16,  1.02s/it, beta=1.250, gamma=4.350, train_loss=870.6453, val_loss=893.5016]
Training UniVI:  52%|█████▏    | 208/400 [03:34<03:16,  1.02s/it, beta=1.250, gamma=4.350, train_loss=870.1036, val_loss=895.0386]
Training UniVI:  52%|█████▏    | 209/400 [03:34<03:15,  1.02s/it, beta=1.250, gamma=4.350, train_loss=870.1036, val_loss=895.0386]
Training UniVI:  52%|█████▏    | 209/400 [03:35<03:15,  1.02s/it, beta=1.250, gamma=4.350, train_loss=871.3181, val_loss=893.1917]
[2026-09-21 00:48:43,306] [UniVITrainer] [INFO] Early stopping at epoch 210 (best val loss=892.0657, best epoch=160)
Training UniVI:  52%|█████▏    | 209/400 [03:35<03:17,  1.03s/it, beta=1.250, gamma=4.350, train_loss=871.3181, val_loss=893.1917]

[2026-09-21 00:48:43,338] [UniVITrainer] [INFO] Restored best model from epoch 160 (val loss=892.0657)

Encode labels, hiding most of them#

Heads take integer codes. Unlabeled cells get -1, the default ignore_index, and contribute nothing to the supervised loss.

classes = sorted(rna.obs["cell_type"].astype(str).unique())
code = {c: i for i, c in enumerate(classes)}

def codes(adata):
    return adata.obs["cell_type"].astype(str).map(code).to_numpy()

y_train = codes(train["rna"])
hidden = np.random.default_rng(0).random(len(y_train)) > LABELED_FRACTION
y_train_partial = np.where(hidden, -1, y_train)
print(f"{(y_train_partial >= 0).sum()} of {len(y_train)} training cells labeled")
1604 of 7698 training cells labeled

1. Refine the reference with a head#

add_classification_head attaches a head without touching the trained weights. UniVIRefiner then trains in two stages:

  • warmup: only the head learns; encoders and decoders are frozen

  • fine-tuning: the chosen encoders also update, at a much smaller learning rate

Decoders stay frozen throughout, and two optional terms keep the latent space from drifting: latent_weight penalizes moving cells away from their original positions, and replay_weight keeps optimizing the original unsupervised objective on paired data.

Passing three loaders (paired, RNA-only, ATAC-only) teaches the head to classify from either modality alone, which is what you need for unimodal query data.

model.add_classification_head(
    ClassHeadConfig("cell_type", n_classes=len(classes), hidden_dims=[64, 64, 32],
                    dropout=0.1, batchnorm=False, layernorm=True),
    label_names=classes,
)

labels_train = {"cell_type": y_train_partial}
labels_val = {"cell_type": codes(val["rna"])}
train_loaders = [
    make_loader(train, labels=labels_train, batch_size=BATCH_SIZE, shuffle=True),
    make_loader({"rna": train["rna"]}, labels=labels_train, batch_size=BATCH_SIZE, shuffle=True),
    make_loader({"atac": train["atac"]}, labels=labels_train, batch_size=BATCH_SIZE, shuffle=True),
]
val_loaders = [make_loader({"rna": val["rna"]}, labels=labels_val, batch_size=1024),
               make_loader({"atac": val["atac"]}, labels=labels_val, batch_size=1024)]

refiner = UniVIRefiner(
    model, train_loaders, val_loaders, device=device,
    replay_loader=make_loader(train, batch_size=BATCH_SIZE, shuffle=True, drop_last=True),
    config=RefinementConfig(max_epochs=REFINE_EPOCHS, warmup_epochs=min(50, REFINE_EPOCHS),
                            lr_head=3e-4, lr_encoder=1e-5, latent_weight=1.0, replay_weight=1.0,
                            patience=30, log_every=50),
)
result = refiner.fit()
print("best epoch:", result["best_epoch"])
Refinement 0: heads, validation=1.56666
Refinement 50: encoders+heads, validation=0.23209
best epoch: 62
hist = pd.DataFrame(result["history"])
fig, ax = plt.subplots(figsize=(5, 3))
for stage, part in hist.groupby("stage", sort=False):
    ax.plot(part["epoch"], part["val_supervised_loss"], label=stage)
ax.set(xlabel="epoch", ylabel="validation cross-entropy")
ax.legend(frameon=False)
plt.show()
../_images/bd939b150ccc4a6ceb1822bf62c6b1940588fc3f4ac42bc800b0b6c8744d3f7c.png

Predict labels for test cells from one modality#

predict_heads_adata returns class probabilities per head, in the row order of the input.

y_test = codes(test["rna"])
scores = {}
for mod in ["rna", "atac"]:
    proba = predict_heads_adata(model, test[mod], mod, device=device)["cell_type"]
    scores[f"head, from {mod}"] = (proba.argmax(1) == y_test).mean()
    test[mod].obs["predicted"] = pd.Categorical(np.asarray(classes)[proba.argmax(1)])
    test[mod].obs["confidence"] = proba.max(1)

# Baseline: k-NN label transfer from the same labeled training cells (original, unrefined latent space).
labeled = y_train_partial >= 0
z_lab = encode_adata(refiner.teacher, train["rna"][labeled], modality="rna", device=device, latent="modality_mean")
for mod in ["rna", "atac"]:
    z = encode_adata(refiner.teacher, test[mod], modality=mod, device=device, latent="modality_mean")
    _, acc, _ = label_transfer_knn(z_lab, y_train[labeled], z, y_test, k=15)
    scores[f"k-NN, from {mod}"] = acc
pd.Series(scores, name="test accuracy").round(3)
head, from rna     0.929
head, from atac    0.941
k-NN, from rna     0.918
k-NN, from atac    0.929
Name: test accuracy, dtype: float64

refiner.teacher is an untouched copy of the model from before refinement, handy for comparisons like this one.

atac_test = test["atac"]
atac_test.obsm["X_univi"] = encode_adata(model, atac_test, modality="atac", device=device, latent="modality_mean")
sc.pp.neighbors(atac_test, use_rep="X_univi")
sc.tl.umap(atac_test, random_state=0)
sc.pl.umap(atac_test, color=["cell_type", "predicted", "confidence"], wspace=0.5, legend_fontsize=7)
../_images/9fcd5e1eb345e5018e9fbb874d8ea7ad44e50f4b8925635eef06541901fb3fb5.png

Low-confidence predictions concentrate at boundaries between related cell types, which is where manual review pays off.

The refined model, head, and label vocabulary save together:

save_reference("univi_multiome_celltype_head", model, preprocessors={"rna": rna_prep, "atac": atac_prep},
               metadata={"head": "cell_type", "labeled_fraction": LABELED_FRACTION})

2. Train a head jointly from the start#

Declare heads in UniVIConfig(class_heads=...) and pass labels to the loader. The head loss is added to the VAE objective, so the latent space is shaped by the labels from the beginning. This is simpler but lets labels influence the whole embedding, which is less desirable when you want an unsupervised reference that you annotate afterwards.

joint_cfg = UniVIConfig(
    latent_dim=30, beta=1.25, gamma=4.35, encoder_dropout=0.10, decoder_dropout=0.05,
    kl_anneal_start=50, kl_anneal_end=85, align_anneal_start=75, align_anneal_end=110,
    modalities=cfg.modalities,
    class_heads=[ClassHeadConfig("cell_type", n_classes=len(classes), loss_weight=1.0, hidden_dims=[64, 32])],
)
joint_model = UniVIMultiModalVAE(joint_cfg, loss_mode="v1", v1_recon="avg", normalize_v1_terms=True)
joint_model.set_head_label_names("cell_type", classes)
UniVITrainer(joint_model,
             make_loader(train, labels=labels_train, batch_size=BATCH_SIZE, shuffle=True, drop_last=True),
             make_loader(val, labels=labels_val, batch_size=1024),
             TrainingConfig(n_epochs=N_EPOCHS, batch_size=BATCH_SIZE, lr=1e-3, weight_decay=1e-4, device=device,
                            early_stopping=True, patience=50, best_epoch_warmup=110, log_every=100)).fit();
proba = predict_heads_adata(joint_model, test["atac"], "atac", device=device)["cell_type"]
print(f"jointly trained head, from atac: accuracy {(proba.argmax(1) == y_test).mean():.3f}")
jointly trained head, from atac: accuracy 0.933
[2026-09-21 00:53:30,565] [UniVITrainer] [INFO] TrainingConfig:
[2026-09-21 00:53:30,565] [UniVITrainer] [INFO]   n_epochs: 400
[2026-09-21 00:53:30,566] [UniVITrainer] [INFO]   batch_size: 256
[2026-09-21 00:53:30,566] [UniVITrainer] [INFO]   lr: 0.001
[2026-09-21 00:53:30,566] [UniVITrainer] [INFO]   weight_decay: 0.0001
[2026-09-21 00:53:30,567] [UniVITrainer] [INFO]   device: 'cuda'
[2026-09-21 00:53:30,567] [UniVITrainer] [INFO]   log_every: 100
[2026-09-21 00:53:30,567] [UniVITrainer] [INFO]   grad_clip: None
[2026-09-21 00:53:30,567] [UniVITrainer] [INFO]   num_workers: 0
[2026-09-21 00:53:30,568] [UniVITrainer] [INFO]   seed: 0
[2026-09-21 00:53:30,568] [UniVITrainer] [INFO]   early_stopping: True
[2026-09-21 00:53:30,568] [UniVITrainer] [INFO]   patience: 50
[2026-09-21 00:53:30,568] [UniVITrainer] [INFO]   min_delta: 0.0
[2026-09-21 00:53:30,569] [UniVITrainer] [INFO]   best_epoch_warmup: 110
Training UniVI:   0%|          | 0/400 [00:00<?, ?it/s]
[2026-09-21 00:53:31,853] [UniVITrainer] [INFO] [Epoch 001] Train loss=1031.9708 (beta=0.000, gamma=0.000)
[2026-09-21 00:53:31,901] [UniVITrainer] [INFO] [Epoch 001] Val loss=206222.2500 (beta=1.250, gamma=4.350)
Training UniVI:   0%|          | 0/400 [00:01<?, ?it/s, beta=0.000, gamma=0.000, train_loss=1031.9708, val_loss=206222.2500]
Training UniVI:   0%|          | 1/400 [00:01<08:51,  1.33s/it, beta=0.000, gamma=0.000, train_loss=1031.9708, val_loss=206222.2500]
Training UniVI:   0%|          | 1/400 [00:02<08:51,  1.33s/it, beta=0.000, gamma=0.000, train_loss=972.3639, val_loss=4878.4429]
Training UniVI:   0%|          | 2/400 [00:02<08:45,  1.32s/it, beta=0.000, gamma=0.000, train_loss=972.3639, val_loss=4878.4429]
Training UniVI:   0%|          | 2/400 [00:03<08:45,  1.32s/it, beta=0.000, gamma=0.000, train_loss=945.5154, val_loss=1904.7460]
Training UniVI:   1%|          | 3/400 [00:03<08:43,  1.32s/it, beta=0.000, gamma=0.000, train_loss=945.5154, val_loss=1904.7460]
Training UniVI:   1%|          | 3/400 [00:05<08:43,  1.32s/it, beta=0.000, gamma=0.000, train_loss=939.6994, val_loss=3269.5430]
Training UniVI:   1%|          | 4/400 [00:05<08:40,  1.31s/it, beta=0.000, gamma=0.000, train_loss=939.6994, val_loss=3269.5430]
Training UniVI:   1%|          | 4/400 [00:06<08:40,  1.31s/it, beta=0.000, gamma=0.000, train_loss=931.6063, val_loss=2980.8904]
Training UniVI:   1%|▏         | 5/400 [00:06<08:36,  1.31s/it, beta=0.000, gamma=0.000, train_loss=931.6063, val_loss=2980.8904]
Training UniVI:   1%|▏         | 5/400 [00:07<08:36,  1.31s/it, beta=0.000, gamma=0.000, train_loss=925.2636, val_loss=2486.7881]
Training UniVI:   2%|▏         | 6/400 [00:07<08:35,  1.31s/it, beta=0.000, gamma=0.000, train_loss=925.2636, val_loss=2486.7881]
Training UniVI:   2%|▏         | 6/400 [00:09<08:35,  1.31s/it, beta=0.000, gamma=0.000, train_loss=919.4882, val_loss=3359.1843]
Training UniVI:   2%|▏         | 7/400 [00:09<08:32,  1.30s/it, beta=0.000, gamma=0.000, train_loss=919.4882, val_loss=3359.1843]
Training UniVI:   2%|▏         | 7/400 [00:10<08:32,  1.30s/it, beta=0.000, gamma=0.000, train_loss=914.4779, val_loss=3935.6177]
Training UniVI:   2%|▏         | 8/400 [00:10<08:32,  1.31s/it, beta=0.000, gamma=0.000, train_loss=914.4779, val_loss=3935.6177]
Training UniVI:   2%|▏         | 8/400 [00:11<08:32,  1.31s/it, beta=0.000, gamma=0.000, train_loss=911.6071, val_loss=5687.9883]
Training UniVI:   2%|▏         | 9/400 [00:11<08:28,  1.30s/it, beta=0.000, gamma=0.000, train_loss=911.6071, val_loss=5687.9883]
Training UniVI:   2%|▏         | 9/400 [00:13<08:28,  1.30s/it, beta=0.000, gamma=0.000, train_loss=908.2833, val_loss=6330.2080]
Training UniVI:   2%|▎         | 10/400 [00:13<08:27,  1.30s/it, beta=0.000, gamma=0.000, train_loss=908.2833, val_loss=6330.2080]
Training UniVI:   2%|▎         | 10/400 [00:14<08:27,  1.30s/it, beta=0.000, gamma=0.000, train_loss=905.6593, val_loss=7360.4131]
Training UniVI:   3%|▎         | 11/400 [00:14<08:25,  1.30s/it, beta=0.000, gamma=0.000, train_loss=905.6593, val_loss=7360.4131]
Training UniVI:   3%|▎         | 11/400 [00:15<08:25,  1.30s/it, beta=0.000, gamma=0.000, train_loss=903.6031, val_loss=8594.2041]
Training UniVI:   3%|▎         | 12/400 [00:15<08:24,  1.30s/it, beta=0.000, gamma=0.000, train_loss=903.6031, val_loss=8594.2041]
Training UniVI:   3%|▎         | 12/400 [00:16<08:24,  1.30s/it, beta=0.000, gamma=0.000, train_loss=902.7398, val_loss=13512.0664]
Training UniVI:   3%|▎         | 13/400 [00:16<08:25,  1.31s/it, beta=0.000, gamma=0.000, train_loss=902.7398, val_loss=13512.0664]
Training UniVI:   3%|▎         | 13/400 [00:18<08:25,  1.31s/it, beta=0.000, gamma=0.000, train_loss=901.6689, val_loss=9187.2236]
Training UniVI:   4%|▎         | 14/400 [00:18<08:22,  1.30s/it, beta=0.000, gamma=0.000, train_loss=901.6689, val_loss=9187.2236]
Training UniVI:   4%|▎         | 14/400 [00:19<08:22,  1.30s/it, beta=0.000, gamma=0.000, train_loss=900.5739, val_loss=12676.8926]
Training UniVI:   4%|▍         | 15/400 [00:19<08:20,  1.30s/it, beta=0.000, gamma=0.000, train_loss=900.5739, val_loss=12676.8926]
Training UniVI:   4%|▍         | 15/400 [00:20<08:20,  1.30s/it, beta=0.000, gamma=0.000, train_loss=899.0209, val_loss=13620.5381]
Training UniVI:   4%|▍         | 16/400 [00:20<08:22,  1.31s/it, beta=0.000, gamma=0.000, train_loss=899.0209, val_loss=13620.5381]
Training UniVI:   4%|▍         | 16/400 [00:22<08:22,  1.31s/it, beta=0.000, gamma=0.000, train_loss=896.4331, val_loss=14042.1875]
Training UniVI:   4%|▍         | 17/400 [00:22<08:23,  1.31s/it, beta=0.000, gamma=0.000, train_loss=896.4331, val_loss=14042.1875]
Training UniVI:   4%|▍         | 17/400 [00:23<08:23,  1.31s/it, beta=0.000, gamma=0.000, train_loss=895.2000, val_loss=16108.5557]
Training UniVI:   4%|▍         | 18/400 [00:23<08:25,  1.32s/it, beta=0.000, gamma=0.000, train_loss=895.2000, val_loss=16108.5557]
Training UniVI:   4%|▍         | 18/400 [00:24<08:25,  1.32s/it, beta=0.000, gamma=0.000, train_loss=893.6914, val_loss=20436.3809]
Training UniVI:   5%|▍         | 19/400 [00:24<08:21,  1.32s/it, beta=0.000, gamma=0.000, train_loss=893.6914, val_loss=20436.3809]
Training UniVI:   5%|▍         | 19/400 [00:26<08:21,  1.32s/it, beta=0.000, gamma=0.000, train_loss=892.4452, val_loss=27236.4082]
Training UniVI:   5%|▌         | 20/400 [00:26<08:20,  1.32s/it, beta=0.000, gamma=0.000, train_loss=892.4452, val_loss=27236.4082]
Training UniVI:   5%|▌         | 20/400 [00:27<08:20,  1.32s/it, beta=0.000, gamma=0.000, train_loss=890.9665, val_loss=23283.0176]
Training UniVI:   5%|▌         | 21/400 [00:27<08:19,  1.32s/it, beta=0.000, gamma=0.000, train_loss=890.9665, val_loss=23283.0176]
Training UniVI:   5%|▌         | 21/400 [00:28<08:19,  1.32s/it, beta=0.000, gamma=0.000, train_loss=889.1711, val_loss=28490.2188]
Training UniVI:   6%|▌         | 22/400 [00:28<08:16,  1.31s/it, beta=0.000, gamma=0.000, train_loss=889.1711, val_loss=28490.2188]
Training UniVI:   6%|▌         | 22/400 [00:30<08:16,  1.31s/it, beta=0.000, gamma=0.000, train_loss=887.6562, val_loss=26387.7734]
Training UniVI:   6%|▌         | 23/400 [00:30<08:14,  1.31s/it, beta=0.000, gamma=0.000, train_loss=887.6562, val_loss=26387.7734]
Training UniVI:   6%|▌         | 23/400 [00:31<08:14,  1.31s/it, beta=0.000, gamma=0.000, train_loss=886.7355, val_loss=29020.7148]
Training UniVI:   6%|▌         | 24/400 [00:31<08:12,  1.31s/it, beta=0.000, gamma=0.000, train_loss=886.7355, val_loss=29020.7148]
Training UniVI:   6%|▌         | 24/400 [00:32<08:12,  1.31s/it, beta=0.000, gamma=0.000, train_loss=886.9245, val_loss=37783.7734]
Training UniVI:   6%|▋         | 25/400 [00:32<08:09,  1.31s/it, beta=0.000, gamma=0.000, train_loss=886.9245, val_loss=37783.7734]
Training UniVI:   6%|▋         | 25/400 [00:34<08:09,  1.31s/it, beta=0.000, gamma=0.000, train_loss=886.0238, val_loss=38855.0859]
Training UniVI:   6%|▋         | 26/400 [00:34<08:08,  1.30s/it, beta=0.000, gamma=0.000, train_loss=886.0238, val_loss=38855.0859]
Training UniVI:   6%|▋         | 26/400 [00:35<08:08,  1.30s/it, beta=0.000, gamma=0.000, train_loss=885.3265, val_loss=37729.5352]
Training UniVI:   7%|▋         | 27/400 [00:35<08:05,  1.30s/it, beta=0.000, gamma=0.000, train_loss=885.3265, val_loss=37729.5352]
Training UniVI:   7%|▋         | 27/400 [00:36<08:05,  1.30s/it, beta=0.000, gamma=0.000, train_loss=884.6984, val_loss=39812.9219]
Training UniVI:   7%|▋         | 28/400 [00:36<08:05,  1.30s/it, beta=0.000, gamma=0.000, train_loss=884.6984, val_loss=39812.9219]
Training UniVI:   7%|▋         | 28/400 [00:37<08:05,  1.30s/it, beta=0.000, gamma=0.000, train_loss=882.6303, val_loss=37866.5625]
Training UniVI:   7%|▋         | 29/400 [00:37<08:01,  1.30s/it, beta=0.000, gamma=0.000, train_loss=882.6303, val_loss=37866.5625]
Training UniVI:   7%|▋         | 29/400 [00:39<08:01,  1.30s/it, beta=0.000, gamma=0.000, train_loss=882.2893, val_loss=40033.6719]
Training UniVI:   8%|▊         | 30/400 [00:39<08:01,  1.30s/it, beta=0.000, gamma=0.000, train_loss=882.2893, val_loss=40033.6719]
Training UniVI:   8%|▊         | 30/400 [00:40<08:01,  1.30s/it, beta=0.000, gamma=0.000, train_loss=882.1613, val_loss=44266.3867]
Training UniVI:   8%|▊         | 31/400 [00:40<08:19,  1.35s/it, beta=0.000, gamma=0.000, train_loss=882.1613, val_loss=44266.3867]
Training UniVI:   8%|▊         | 31/400 [00:42<08:19,  1.35s/it, beta=0.000, gamma=0.000, train_loss=881.4359, val_loss=59212.8359]
Training UniVI:   8%|▊         | 32/400 [00:42<08:14,  1.34s/it, beta=0.000, gamma=0.000, train_loss=881.4359, val_loss=59212.8359]
Training UniVI:   8%|▊         | 32/400 [00:43<08:14,  1.34s/it, beta=0.000, gamma=0.000, train_loss=881.2086, val_loss=55778.4414]
Training UniVI:   8%|▊         | 33/400 [00:43<08:09,  1.33s/it, beta=0.000, gamma=0.000, train_loss=881.2086, val_loss=55778.4414]
Training UniVI:   8%|▊         | 33/400 [00:44<08:09,  1.33s/it, beta=0.000, gamma=0.000, train_loss=880.2075, val_loss=73412.3828]
Training UniVI:   8%|▊         | 34/400 [00:44<08:03,  1.32s/it, beta=0.000, gamma=0.000, train_loss=880.2075, val_loss=73412.3828]
Training UniVI:   8%|▊         | 34/400 [00:45<08:03,  1.32s/it, beta=0.000, gamma=0.000, train_loss=879.4966, val_loss=63391.5703]
Training UniVI:   9%|▉         | 35/400 [00:45<08:01,  1.32s/it, beta=0.000, gamma=0.000, train_loss=879.4966, val_loss=63391.5703]
Training UniVI:   9%|▉         | 35/400 [00:47<08:01,  1.32s/it, beta=0.000, gamma=0.000, train_loss=878.9391, val_loss=71374.3594]
Training UniVI:   9%|▉         | 36/400 [00:47<07:58,  1.32s/it, beta=0.000, gamma=0.000, train_loss=878.9391, val_loss=71374.3594]
Training UniVI:   9%|▉         | 36/400 [00:48<07:58,  1.32s/it, beta=0.000, gamma=0.000, train_loss=877.7986, val_loss=79092.3516]
Training UniVI:   9%|▉         | 37/400 [00:48<07:58,  1.32s/it, beta=0.000, gamma=0.000, train_loss=877.7986, val_loss=79092.3516]
Training UniVI:   9%|▉         | 37/400 [00:49<07:58,  1.32s/it, beta=0.000, gamma=0.000, train_loss=877.3461, val_loss=83983.9297]
Training UniVI:  10%|▉         | 38/400 [00:49<07:58,  1.32s/it, beta=0.000, gamma=0.000, train_loss=877.3461, val_loss=83983.9297]
Training UniVI:  10%|▉         | 38/400 [00:51<07:58,  1.32s/it, beta=0.000, gamma=0.000, train_loss=877.3493, val_loss=81920.8828]
Training UniVI:  10%|▉         | 39/400 [00:51<07:58,  1.33s/it, beta=0.000, gamma=0.000, train_loss=877.3493, val_loss=81920.8828]
Training UniVI:  10%|▉         | 39/400 [00:52<07:58,  1.33s/it, beta=0.000, gamma=0.000, train_loss=876.0411, val_loss=95870.8203]
Training UniVI:  10%|█         | 40/400 [00:52<07:53,  1.31s/it, beta=0.000, gamma=0.000, train_loss=876.0411, val_loss=95870.8203]
Training UniVI:  10%|█         | 40/400 [00:53<07:53,  1.31s/it, beta=0.000, gamma=0.000, train_loss=876.6209, val_loss=97891.1406]
Training UniVI:  10%|█         | 41/400 [00:53<07:50,  1.31s/it, beta=0.000, gamma=0.000, train_loss=876.6209, val_loss=97891.1406]
Training UniVI:  10%|█         | 41/400 [00:55<07:50,  1.31s/it, beta=0.000, gamma=0.000, train_loss=876.2625, val_loss=101832.3828]
Training UniVI:  10%|█         | 42/400 [00:55<07:49,  1.31s/it, beta=0.000, gamma=0.000, train_loss=876.2625, val_loss=101832.3828]
Training UniVI:  10%|█         | 42/400 [00:56<07:49,  1.31s/it, beta=0.000, gamma=0.000, train_loss=874.9167, val_loss=98436.1953]
Training UniVI:  11%|█         | 43/400 [00:56<07:46,  1.31s/it, beta=0.000, gamma=0.000, train_loss=874.9167, val_loss=98436.1953]
Training UniVI:  11%|█         | 43/400 [00:57<07:46,  1.31s/it, beta=0.000, gamma=0.000, train_loss=874.1986, val_loss=104611.6562]
Training UniVI:  11%|█         | 44/400 [00:57<07:44,  1.31s/it, beta=0.000, gamma=0.000, train_loss=874.1986, val_loss=104611.6562]
Training UniVI:  11%|█         | 44/400 [00:59<07:44,  1.31s/it, beta=0.000, gamma=0.000, train_loss=873.1019, val_loss=108064.0547]
Training UniVI:  11%|█▏        | 45/400 [00:59<07:44,  1.31s/it, beta=0.000, gamma=0.000, train_loss=873.1019, val_loss=108064.0547]
Training UniVI:  11%|█▏        | 45/400 [01:00<07:44,  1.31s/it, beta=0.000, gamma=0.000, train_loss=870.6529, val_loss=115524.6328]
Training UniVI:  12%|█▏        | 46/400 [01:00<07:42,  1.31s/it, beta=0.000, gamma=0.000, train_loss=870.6529, val_loss=115524.6328]
Training UniVI:  12%|█▏        | 46/400 [01:01<07:42,  1.31s/it, beta=0.000, gamma=0.000, train_loss=871.6482, val_loss=117623.6484]
Training UniVI:  12%|█▏        | 47/400 [01:01<07:40,  1.30s/it, beta=0.000, gamma=0.000, train_loss=871.6482, val_loss=117623.6484]
Training UniVI:  12%|█▏        | 47/400 [01:02<07:40,  1.30s/it, beta=0.000, gamma=0.000, train_loss=870.3667, val_loss=116943.4766]
Training UniVI:  12%|█▏        | 48/400 [01:02<07:41,  1.31s/it, beta=0.000, gamma=0.000, train_loss=870.3667, val_loss=116943.4766]
Training UniVI:  12%|█▏        | 48/400 [01:04<07:41,  1.31s/it, beta=0.000, gamma=0.000, train_loss=869.7605, val_loss=149551.2031]
Training UniVI:  12%|█▏        | 49/400 [01:04<07:40,  1.31s/it, beta=0.000, gamma=0.000, train_loss=869.7605, val_loss=149551.2031]
Training UniVI:  12%|█▏        | 49/400 [01:05<07:40,  1.31s/it, beta=0.000, gamma=0.000, train_loss=869.1559, val_loss=141729.1875]
Training UniVI:  12%|█▎        | 50/400 [01:05<07:38,  1.31s/it, beta=0.000, gamma=0.000, train_loss=869.1559, val_loss=141729.1875]
Training UniVI:  12%|█▎        | 50/400 [01:06<07:38,  1.31s/it, beta=0.036, gamma=0.000, train_loss=872.4746, val_loss=47433.7969]
Training UniVI:  13%|█▎        | 51/400 [01:06<07:35,  1.31s/it, beta=0.036, gamma=0.000, train_loss=872.4746, val_loss=47433.7969]
Training UniVI:  13%|█▎        | 51/400 [01:08<07:35,  1.31s/it, beta=0.071, gamma=0.000, train_loss=876.2551, val_loss=4915.8472]
Training UniVI:  13%|█▎        | 52/400 [01:08<07:33,  1.30s/it, beta=0.071, gamma=0.000, train_loss=876.2551, val_loss=4915.8472]
Training UniVI:  13%|█▎        | 52/400 [01:09<07:33,  1.30s/it, beta=0.107, gamma=0.000, train_loss=875.1478, val_loss=1910.4110]
Training UniVI:  13%|█▎        | 53/400 [01:09<07:32,  1.30s/it, beta=0.107, gamma=0.000, train_loss=875.1478, val_loss=1910.4110]
Training UniVI:  13%|█▎        | 53/400 [01:10<07:32,  1.30s/it, beta=0.143, gamma=0.000, train_loss=875.4527, val_loss=1294.8379]
Training UniVI:  14%|█▎        | 54/400 [01:10<07:31,  1.30s/it, beta=0.143, gamma=0.000, train_loss=875.4527, val_loss=1294.8379]
Training UniVI:  14%|█▎        | 54/400 [01:12<07:31,  1.30s/it, beta=0.179, gamma=0.000, train_loss=876.7886, val_loss=1185.3982]
Training UniVI:  14%|█▍        | 55/400 [01:12<07:30,  1.30s/it, beta=0.179, gamma=0.000, train_loss=876.7886, val_loss=1185.3982]
Training UniVI:  14%|█▍        | 55/400 [01:13<07:30,  1.30s/it, beta=0.214, gamma=0.000, train_loss=877.2231, val_loss=1136.2383]
Training UniVI:  14%|█▍        | 56/400 [01:13<07:27,  1.30s/it, beta=0.214, gamma=0.000, train_loss=877.2231, val_loss=1136.2383]
Training UniVI:  14%|█▍        | 56/400 [01:14<07:27,  1.30s/it, beta=0.250, gamma=0.000, train_loss=879.1593, val_loss=1092.6661]
Training UniVI:  14%|█▍        | 57/400 [01:14<07:28,  1.31s/it, beta=0.250, gamma=0.000, train_loss=879.1593, val_loss=1092.6661]
Training UniVI:  14%|█▍        | 57/400 [01:16<07:28,  1.31s/it, beta=0.286, gamma=0.000, train_loss=879.6367, val_loss=1064.6674]
Training UniVI:  14%|█▍        | 58/400 [01:16<07:33,  1.33s/it, beta=0.286, gamma=0.000, train_loss=879.6367, val_loss=1064.6674]
Training UniVI:  14%|█▍        | 58/400 [01:17<07:33,  1.33s/it, beta=0.321, gamma=0.000, train_loss=879.2760, val_loss=1049.8163]
Training UniVI:  15%|█▍        | 59/400 [01:17<07:50,  1.38s/it, beta=0.321, gamma=0.000, train_loss=879.2760, val_loss=1049.8163]
Training UniVI:  15%|█▍        | 59/400 [01:19<07:50,  1.38s/it, beta=0.357, gamma=0.000, train_loss=880.4059, val_loss=1034.0797]
Training UniVI:  15%|█▌        | 60/400 [01:19<08:13,  1.45s/it, beta=0.357, gamma=0.000, train_loss=880.4059, val_loss=1034.0797]
Training UniVI:  15%|█▌        | 60/400 [01:20<08:13,  1.45s/it, beta=0.393, gamma=0.000, train_loss=881.1561, val_loss=1013.6434]
Training UniVI:  15%|█▌        | 61/400 [01:20<08:13,  1.45s/it, beta=0.393, gamma=0.000, train_loss=881.1561, val_loss=1013.6434]
Training UniVI:  15%|█▌        | 61/400 [01:22<08:13,  1.45s/it, beta=0.429, gamma=0.000, train_loss=880.5919, val_loss=1004.6531]
Training UniVI:  16%|█▌        | 62/400 [01:22<07:58,  1.42s/it, beta=0.429, gamma=0.000, train_loss=880.5919, val_loss=1004.6531]
Training UniVI:  16%|█▌        | 62/400 [01:23<07:58,  1.42s/it, beta=0.464, gamma=0.000, train_loss=881.0717, val_loss=1005.2383]
Training UniVI:  16%|█▌        | 63/400 [01:23<07:46,  1.38s/it, beta=0.464, gamma=0.000, train_loss=881.0717, val_loss=1005.2383]
Training UniVI:  16%|█▌        | 63/400 [01:24<07:46,  1.38s/it, beta=0.500, gamma=0.000, train_loss=882.1731, val_loss=990.6967]
Training UniVI:  16%|█▌        | 64/400 [01:24<07:35,  1.36s/it, beta=0.500, gamma=0.000, train_loss=882.1731, val_loss=990.6967]
Training UniVI:  16%|█▌        | 64/400 [01:25<07:35,  1.36s/it, beta=0.536, gamma=0.000, train_loss=882.4645, val_loss=987.4232]
Training UniVI:  16%|█▋        | 65/400 [01:25<07:31,  1.35s/it, beta=0.536, gamma=0.000, train_loss=882.4645, val_loss=987.4232]
Training UniVI:  16%|█▋        | 65/400 [01:27<07:31,  1.35s/it, beta=0.571, gamma=0.000, train_loss=881.6600, val_loss=979.0443]
Training UniVI:  16%|█▋        | 66/400 [01:27<07:34,  1.36s/it, beta=0.571, gamma=0.000, train_loss=881.6600, val_loss=979.0443]
Training UniVI:  16%|█▋        | 66/400 [01:28<07:34,  1.36s/it, beta=0.607, gamma=0.000, train_loss=882.0244, val_loss=972.5967]
Training UniVI:  17%|█▋        | 67/400 [01:28<07:36,  1.37s/it, beta=0.607, gamma=0.000, train_loss=882.0244, val_loss=972.5967]
Training UniVI:  17%|█▋        | 67/400 [01:30<07:36,  1.37s/it, beta=0.643, gamma=0.000, train_loss=882.0983, val_loss=970.4185]
Training UniVI:  17%|█▋        | 68/400 [01:30<07:36,  1.37s/it, beta=0.643, gamma=0.000, train_loss=882.0983, val_loss=970.4185]
Training UniVI:  17%|█▋        | 68/400 [01:31<07:36,  1.37s/it, beta=0.679, gamma=0.000, train_loss=881.9304, val_loss=966.6199]
Training UniVI:  17%|█▋        | 69/400 [01:31<07:29,  1.36s/it, beta=0.679, gamma=0.000, train_loss=881.9304, val_loss=966.6199]
Training UniVI:  17%|█▋        | 69/400 [01:32<07:29,  1.36s/it, beta=0.714, gamma=0.000, train_loss=882.1431, val_loss=964.5369]
Training UniVI:  18%|█▊        | 70/400 [01:32<07:23,  1.34s/it, beta=0.714, gamma=0.000, train_loss=882.1431, val_loss=964.5369]
Training UniVI:  18%|█▊        | 70/400 [01:34<07:23,  1.34s/it, beta=0.750, gamma=0.000, train_loss=881.9123, val_loss=957.4525]
Training UniVI:  18%|█▊        | 71/400 [01:34<07:18,  1.33s/it, beta=0.750, gamma=0.000, train_loss=881.9123, val_loss=957.4525]
Training UniVI:  18%|█▊        | 71/400 [01:35<07:18,  1.33s/it, beta=0.786, gamma=0.000, train_loss=882.9952, val_loss=959.5797]
Training UniVI:  18%|█▊        | 72/400 [01:35<07:14,  1.33s/it, beta=0.786, gamma=0.000, train_loss=882.9952, val_loss=959.5797]
Training UniVI:  18%|█▊        | 72/400 [01:36<07:14,  1.33s/it, beta=0.821, gamma=0.000, train_loss=883.5202, val_loss=951.3648]
Training UniVI:  18%|█▊        | 73/400 [01:36<07:10,  1.32s/it, beta=0.821, gamma=0.000, train_loss=883.5202, val_loss=951.3648]
Training UniVI:  18%|█▊        | 73/400 [01:37<07:10,  1.32s/it, beta=0.857, gamma=0.000, train_loss=883.9303, val_loss=954.4470]
Training UniVI:  18%|█▊        | 74/400 [01:37<07:07,  1.31s/it, beta=0.857, gamma=0.000, train_loss=883.9303, val_loss=954.4470]
Training UniVI:  18%|█▊        | 74/400 [01:39<07:07,  1.31s/it, beta=0.893, gamma=0.000, train_loss=882.8821, val_loss=949.1486]
Training UniVI:  19%|█▉        | 75/400 [01:39<07:07,  1.32s/it, beta=0.893, gamma=0.000, train_loss=882.8821, val_loss=949.1486]
Training UniVI:  19%|█▉        | 75/400 [01:40<07:07,  1.32s/it, beta=0.929, gamma=0.124, train_loss=886.0208, val_loss=931.3270]
Training UniVI:  19%|█▉        | 76/400 [01:40<07:03,  1.31s/it, beta=0.929, gamma=0.124, train_loss=886.0208, val_loss=931.3270]
Training UniVI:  19%|█▉        | 76/400 [01:41<07:03,  1.31s/it, beta=0.964, gamma=0.249, train_loss=888.1631, val_loss=921.2891]
Training UniVI:  19%|█▉        | 77/400 [01:41<07:02,  1.31s/it, beta=0.964, gamma=0.249, train_loss=888.1631, val_loss=921.2891]
Training UniVI:  19%|█▉        | 77/400 [01:43<07:02,  1.31s/it, beta=1.000, gamma=0.373, train_loss=888.4859, val_loss=915.2441]
Training UniVI:  20%|█▉        | 78/400 [01:43<07:00,  1.31s/it, beta=1.000, gamma=0.373, train_loss=888.4859, val_loss=915.2441]
Training UniVI:  20%|█▉        | 78/400 [01:44<07:00,  1.31s/it, beta=1.036, gamma=0.497, train_loss=890.3138, val_loss=912.2964]
Training UniVI:  20%|█▉        | 79/400 [01:44<06:58,  1.31s/it, beta=1.036, gamma=0.497, train_loss=890.3138, val_loss=912.2964]
Training UniVI:  20%|█▉        | 79/400 [01:45<06:58,  1.31s/it, beta=1.071, gamma=0.621, train_loss=890.3930, val_loss=910.4033]
Training UniVI:  20%|██        | 80/400 [01:45<06:57,  1.31s/it, beta=1.071, gamma=0.621, train_loss=890.3930, val_loss=910.4033]
Training UniVI:  20%|██        | 80/400 [01:47<06:57,  1.31s/it, beta=1.107, gamma=0.746, train_loss=891.6994, val_loss=907.6895]
Training UniVI:  20%|██        | 81/400 [01:47<06:55,  1.30s/it, beta=1.107, gamma=0.746, train_loss=891.6994, val_loss=907.6895]
Training UniVI:  20%|██        | 81/400 [01:48<06:55,  1.30s/it, beta=1.143, gamma=0.870, train_loss=892.2728, val_loss=906.3209]
Training UniVI:  20%|██        | 82/400 [01:48<06:54,  1.30s/it, beta=1.143, gamma=0.870, train_loss=892.2728, val_loss=906.3209]
Training UniVI:  20%|██        | 82/400 [01:49<06:54,  1.30s/it, beta=1.179, gamma=0.994, train_loss=893.3483, val_loss=905.5233]
Training UniVI:  21%|██        | 83/400 [01:49<06:54,  1.31s/it, beta=1.179, gamma=0.994, train_loss=893.3483, val_loss=905.5233]
Training UniVI:  21%|██        | 83/400 [01:51<06:54,  1.31s/it, beta=1.214, gamma=1.119, train_loss=893.8456, val_loss=904.2041]
Training UniVI:  21%|██        | 84/400 [01:51<07:00,  1.33s/it, beta=1.214, gamma=1.119, train_loss=893.8456, val_loss=904.2041]
Training UniVI:  21%|██        | 84/400 [01:52<07:00,  1.33s/it, beta=1.250, gamma=1.243, train_loss=893.4950, val_loss=902.2581]
Training UniVI:  21%|██▏       | 85/400 [01:52<06:56,  1.32s/it, beta=1.250, gamma=1.243, train_loss=893.4950, val_loss=902.2581]
Training UniVI:  21%|██▏       | 85/400 [01:53<06:56,  1.32s/it, beta=1.250, gamma=1.367, train_loss=894.1933, val_loss=902.2184]
Training UniVI:  22%|██▏       | 86/400 [01:53<07:09,  1.37s/it, beta=1.250, gamma=1.367, train_loss=894.1933, val_loss=902.2184]
Training UniVI:  22%|██▏       | 86/400 [01:55<07:09,  1.37s/it, beta=1.250, gamma=1.491, train_loss=893.9496, val_loss=901.6905]
Training UniVI:  22%|██▏       | 87/400 [01:55<07:01,  1.35s/it, beta=1.250, gamma=1.491, train_loss=893.9496, val_loss=901.6905]
Training UniVI:  22%|██▏       | 87/400 [01:56<07:01,  1.35s/it, beta=1.250, gamma=1.616, train_loss=894.7121, val_loss=900.4180]
Training UniVI:  22%|██▏       | 88/400 [01:56<06:55,  1.33s/it, beta=1.250, gamma=1.616, train_loss=894.7121, val_loss=900.4180]
Training UniVI:  22%|██▏       | 88/400 [01:57<06:55,  1.33s/it, beta=1.250, gamma=1.740, train_loss=893.5291, val_loss=899.8057]
Training UniVI:  22%|██▏       | 89/400 [01:57<06:52,  1.33s/it, beta=1.250, gamma=1.740, train_loss=893.5291, val_loss=899.8057]
Training UniVI:  22%|██▏       | 89/400 [01:59<06:52,  1.33s/it, beta=1.250, gamma=1.864, train_loss=892.0800, val_loss=899.3456]
Training UniVI:  22%|██▎       | 90/400 [01:59<06:50,  1.32s/it, beta=1.250, gamma=1.864, train_loss=892.0800, val_loss=899.3456]
Training UniVI:  22%|██▎       | 90/400 [02:00<06:50,  1.32s/it, beta=1.250, gamma=1.989, train_loss=892.8524, val_loss=899.0703]
Training UniVI:  23%|██▎       | 91/400 [02:00<06:46,  1.32s/it, beta=1.250, gamma=1.989, train_loss=892.8524, val_loss=899.0703]
Training UniVI:  23%|██▎       | 91/400 [02:01<06:46,  1.32s/it, beta=1.250, gamma=2.113, train_loss=893.6132, val_loss=898.1828]
Training UniVI:  23%|██▎       | 92/400 [02:01<06:44,  1.31s/it, beta=1.250, gamma=2.113, train_loss=893.6132, val_loss=898.1828]
Training UniVI:  23%|██▎       | 92/400 [02:03<06:44,  1.31s/it, beta=1.250, gamma=2.237, train_loss=893.8746, val_loss=897.5981]
Training UniVI:  23%|██▎       | 93/400 [02:03<06:42,  1.31s/it, beta=1.250, gamma=2.237, train_loss=893.8746, val_loss=897.5981]
Training UniVI:  23%|██▎       | 93/400 [02:04<06:42,  1.31s/it, beta=1.250, gamma=2.361, train_loss=893.6612, val_loss=898.1747]
Training UniVI:  24%|██▎       | 94/400 [02:04<06:41,  1.31s/it, beta=1.250, gamma=2.361, train_loss=893.6612, val_loss=898.1747]
Training UniVI:  24%|██▎       | 94/400 [02:05<06:41,  1.31s/it, beta=1.250, gamma=2.486, train_loss=893.6263, val_loss=897.5123]
Training UniVI:  24%|██▍       | 95/400 [02:05<06:39,  1.31s/it, beta=1.250, gamma=2.486, train_loss=893.6263, val_loss=897.5123]
Training UniVI:  24%|██▍       | 95/400 [02:06<06:39,  1.31s/it, beta=1.250, gamma=2.610, train_loss=893.5289, val_loss=897.6176]
Training UniVI:  24%|██▍       | 96/400 [02:06<06:36,  1.30s/it, beta=1.250, gamma=2.610, train_loss=893.5289, val_loss=897.6176]
Training UniVI:  24%|██▍       | 96/400 [02:08<06:36,  1.30s/it, beta=1.250, gamma=2.734, train_loss=894.8737, val_loss=896.6684]
Training UniVI:  24%|██▍       | 97/400 [02:08<06:36,  1.31s/it, beta=1.250, gamma=2.734, train_loss=894.8737, val_loss=896.6684]
Training UniVI:  24%|██▍       | 97/400 [02:09<06:36,  1.31s/it, beta=1.250, gamma=2.859, train_loss=892.9712, val_loss=896.7894]
Training UniVI:  24%|██▍       | 98/400 [02:09<06:33,  1.30s/it, beta=1.250, gamma=2.859, train_loss=892.9712, val_loss=896.7894]
Training UniVI:  24%|██▍       | 98/400 [02:10<06:33,  1.30s/it, beta=1.250, gamma=2.983, train_loss=894.6446, val_loss=896.1434]
Training UniVI:  25%|██▍       | 99/400 [02:10<06:32,  1.31s/it, beta=1.250, gamma=2.983, train_loss=894.6446, val_loss=896.1434]
[2026-09-21 00:55:42,650] [UniVITrainer] [INFO] [Epoch 100] Train loss=893.3747 (beta=1.250, gamma=3.107)
[2026-09-21 00:55:42,705] [UniVITrainer] [INFO] [Epoch 100] Val loss=895.6791 (beta=1.250, gamma=4.350)
Training UniVI:  25%|██▍       | 99/400 [02:12<06:32,  1.31s/it, beta=1.250, gamma=3.107, train_loss=893.3747, val_loss=895.6791]
Training UniVI:  25%|██▌       | 100/400 [02:12<06:31,  1.31s/it, beta=1.250, gamma=3.107, train_loss=893.3747, val_loss=895.6791]
Training UniVI:  25%|██▌       | 100/400 [02:13<06:31,  1.31s/it, beta=1.250, gamma=3.231, train_loss=893.5004, val_loss=895.8552]
Training UniVI:  25%|██▌       | 101/400 [02:13<06:29,  1.30s/it, beta=1.250, gamma=3.231, train_loss=893.5004, val_loss=895.8552]
Training UniVI:  25%|██▌       | 101/400 [02:14<06:29,  1.30s/it, beta=1.250, gamma=3.356, train_loss=894.6238, val_loss=896.6016]
Training UniVI:  26%|██▌       | 102/400 [02:14<06:29,  1.31s/it, beta=1.250, gamma=3.356, train_loss=894.6238, val_loss=896.6016]
Training UniVI:  26%|██▌       | 102/400 [02:16<06:29,  1.31s/it, beta=1.250, gamma=3.480, train_loss=894.3195, val_loss=895.4702]
Training UniVI:  26%|██▌       | 103/400 [02:16<06:29,  1.31s/it, beta=1.250, gamma=3.480, train_loss=894.3195, val_loss=895.4702]
Training UniVI:  26%|██▌       | 103/400 [02:17<06:29,  1.31s/it, beta=1.250, gamma=3.604, train_loss=892.8974, val_loss=895.7076]
Training UniVI:  26%|██▌       | 104/400 [02:17<06:27,  1.31s/it, beta=1.250, gamma=3.604, train_loss=892.8974, val_loss=895.7076]
Training UniVI:  26%|██▌       | 104/400 [02:18<06:27,  1.31s/it, beta=1.250, gamma=3.729, train_loss=892.4982, val_loss=895.0185]
Training UniVI:  26%|██▋       | 105/400 [02:18<06:24,  1.31s/it, beta=1.250, gamma=3.729, train_loss=892.4982, val_loss=895.0185]
Training UniVI:  26%|██▋       | 105/400 [02:19<06:24,  1.31s/it, beta=1.250, gamma=3.853, train_loss=893.4591, val_loss=895.8871]
Training UniVI:  26%|██▋       | 106/400 [02:19<06:23,  1.30s/it, beta=1.250, gamma=3.853, train_loss=893.4591, val_loss=895.8871]
Training UniVI:  26%|██▋       | 106/400 [02:21<06:23,  1.30s/it, beta=1.250, gamma=3.977, train_loss=892.0024, val_loss=893.9588]
Training UniVI:  27%|██▋       | 107/400 [02:21<06:23,  1.31s/it, beta=1.250, gamma=3.977, train_loss=892.0024, val_loss=893.9588]
Training UniVI:  27%|██▋       | 107/400 [02:22<06:23,  1.31s/it, beta=1.250, gamma=4.101, train_loss=891.7569, val_loss=894.5523]
Training UniVI:  27%|██▋       | 108/400 [02:22<06:20,  1.30s/it, beta=1.250, gamma=4.101, train_loss=891.7569, val_loss=894.5523]
Training UniVI:  27%|██▋       | 108/400 [02:23<06:20,  1.30s/it, beta=1.250, gamma=4.226, train_loss=892.2922, val_loss=894.7073]
[2026-09-21 00:55:54,459] [UniVITrainer] [INFO] [Epoch 109] Best tracking warmup ends next epoch (best_epoch_warmup=110).
Training UniVI:  27%|██▋       | 109/400 [02:23<06:19,  1.30s/it, beta=1.250, gamma=4.226, train_loss=892.2922, val_loss=894.7073]
Training UniVI:  27%|██▋       | 109/400 [02:25<06:19,  1.30s/it, beta=1.250, gamma=4.350, train_loss=891.7149, val_loss=893.2392]
[2026-09-21 00:55:55,755] [UniVITrainer] [INFO] [Epoch 110] New best val loss: 893.2392
Training UniVI:  28%|██▊       | 110/400 [02:25<06:17,  1.30s/it, beta=1.250, gamma=4.350, train_loss=891.7149, val_loss=893.2392]
Training UniVI:  28%|██▊       | 110/400 [02:26<06:17,  1.30s/it, beta=1.250, gamma=4.350, train_loss=892.3430, val_loss=893.7301]
Training UniVI:  28%|██▊       | 111/400 [02:26<06:18,  1.31s/it, beta=1.250, gamma=4.350, train_loss=892.3430, val_loss=893.7301]
Training UniVI:  28%|██▊       | 111/400 [02:27<06:18,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.6508, val_loss=893.9443]
Training UniVI:  28%|██▊       | 112/400 [02:27<06:16,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.6508, val_loss=893.9443]
Training UniVI:  28%|██▊       | 112/400 [02:29<06:16,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.9650, val_loss=895.3705]
Training UniVI:  28%|██▊       | 113/400 [02:29<06:15,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.9650, val_loss=895.3705]
Training UniVI:  28%|██▊       | 113/400 [02:30<06:15,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.6873, val_loss=893.5095]
Training UniVI:  28%|██▊       | 114/400 [02:30<06:14,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.6873, val_loss=893.5095]
Training UniVI:  28%|██▊       | 114/400 [02:31<06:14,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.7007, val_loss=894.1829]
Training UniVI:  29%|██▉       | 115/400 [02:31<06:13,  1.31s/it, beta=1.250, gamma=4.350, train_loss=890.7007, val_loss=894.1829]
Training UniVI:  29%|██▉       | 115/400 [02:33<06:13,  1.31s/it, beta=1.250, gamma=4.350, train_loss=891.0192, val_loss=893.6349]
Training UniVI:  29%|██▉       | 116/400 [02:33<06:16,  1.32s/it, beta=1.250, gamma=4.350, train_loss=891.0192, val_loss=893.6349]
Training UniVI:  29%|██▉       | 116/400 [02:34<06:16,  1.32s/it, beta=1.250, gamma=4.350, train_loss=889.6611, val_loss=893.9216]
Training UniVI:  29%|██▉       | 117/400 [02:34<06:13,  1.32s/it, beta=1.250, gamma=4.350, train_loss=889.6611, val_loss=893.9216]
Training UniVI:  29%|██▉       | 117/400 [02:35<06:13,  1.32s/it, beta=1.250, gamma=4.350, train_loss=889.2119, val_loss=892.7612]
[2026-09-21 00:56:06,289] [UniVITrainer] [INFO] [Epoch 118] New best val loss: 892.7612
Training UniVI:  30%|██▉       | 118/400 [02:35<06:10,  1.31s/it, beta=1.250, gamma=4.350, train_loss=889.2119, val_loss=892.7612]
Training UniVI:  30%|██▉       | 118/400 [02:37<06:10,  1.31s/it, beta=1.250, gamma=4.350, train_loss=888.6497, val_loss=893.5408]
Training UniVI:  30%|██▉       | 119/400 [02:37<06:08,  1.31s/it, beta=1.250, gamma=4.350, train_loss=888.6497, val_loss=893.5408]
Training UniVI:  30%|██▉       | 119/400 [02:38<06:08,  1.31s/it, beta=1.250, gamma=4.350, train_loss=889.1266, val_loss=894.0277]
Training UniVI:  30%|███       | 120/400 [02:38<06:04,  1.30s/it, beta=1.250, gamma=4.350, train_loss=889.1266, val_loss=894.0277]
Training UniVI:  30%|███       | 120/400 [02:39<06:04,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.6893, val_loss=893.8646]
Training UniVI:  30%|███       | 121/400 [02:39<06:05,  1.31s/it, beta=1.250, gamma=4.350, train_loss=887.6893, val_loss=893.8646]
Training UniVI:  30%|███       | 121/400 [02:40<06:05,  1.31s/it, beta=1.250, gamma=4.350, train_loss=888.4789, val_loss=894.4305]
Training UniVI:  30%|███       | 122/400 [02:40<06:03,  1.31s/it, beta=1.250, gamma=4.350, train_loss=888.4789, val_loss=894.4305]
Training UniVI:  30%|███       | 122/400 [02:42<06:03,  1.31s/it, beta=1.250, gamma=4.350, train_loss=888.5218, val_loss=893.5369]
Training UniVI:  31%|███       | 123/400 [02:42<06:01,  1.30s/it, beta=1.250, gamma=4.350, train_loss=888.5218, val_loss=893.5369]
Training UniVI:  31%|███       | 123/400 [02:43<06:01,  1.30s/it, beta=1.250, gamma=4.350, train_loss=888.1497, val_loss=893.1956]
Training UniVI:  31%|███       | 124/400 [02:43<06:00,  1.31s/it, beta=1.250, gamma=4.350, train_loss=888.1497, val_loss=893.1956]
Training UniVI:  31%|███       | 124/400 [02:44<06:00,  1.31s/it, beta=1.250, gamma=4.350, train_loss=887.6015, val_loss=893.6418]
Training UniVI:  31%|███▏      | 125/400 [02:44<05:57,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.6015, val_loss=893.6418]
Training UniVI:  31%|███▏      | 125/400 [02:46<05:57,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.3810, val_loss=894.2465]
Training UniVI:  32%|███▏      | 126/400 [02:46<05:57,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.3810, val_loss=894.2465]
Training UniVI:  32%|███▏      | 126/400 [02:47<05:57,  1.30s/it, beta=1.250, gamma=4.350, train_loss=886.5137, val_loss=893.3755]
Training UniVI:  32%|███▏      | 127/400 [02:47<05:54,  1.30s/it, beta=1.250, gamma=4.350, train_loss=886.5137, val_loss=893.3755]
Training UniVI:  32%|███▏      | 127/400 [02:48<05:54,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.0283, val_loss=893.8312]
Training UniVI:  32%|███▏      | 128/400 [02:48<05:54,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.0283, val_loss=893.8312]
Training UniVI:  32%|███▏      | 128/400 [02:50<05:54,  1.30s/it, beta=1.250, gamma=4.350, train_loss=887.7174, val_loss=894.1687]
Training UniVI:  32%|███▏      | 129/400 [02:50<05:55,  1.31s/it, beta=1.250, gamma=4.350, train_loss=887.7174, val_loss=894.1687]
Training UniVI:  32%|███▏      | 129/400 [02:51<05:55,  1.31s/it, beta=1.250, gamma=4.350, train_loss=884.9930, val_loss=893.3649]
Training UniVI:  32%|███▎      | 130/400 [02:51<05:54,  1.31s/it, beta=1.250, gamma=4.350, train_loss=884.9930, val_loss=893.3649]
Training UniVI:  32%|███▎      | 130/400 [02:52<05:54,  1.31s/it, beta=1.250, gamma=4.350, train_loss=885.4306, val_loss=892.6403]
[2026-09-21 00:56:23,271] [UniVITrainer] [INFO] [Epoch 131] New best val loss: 892.6403
Training UniVI:  33%|███▎      | 131/400 [02:52<05:53,  1.31s/it, beta=1.250, gamma=4.350, train_loss=885.4306, val_loss=892.6403]
Training UniVI:  33%|███▎      | 131/400 [02:54<05:53,  1.31s/it, beta=1.250, gamma=4.350, train_loss=885.7847, val_loss=892.8924]
Training UniVI:  33%|███▎      | 132/400 [02:54<05:51,  1.31s/it, beta=1.250, gamma=4.350, train_loss=885.7847, val_loss=892.8924]
Training UniVI:  33%|███▎      | 132/400 [02:55<05:51,  1.31s/it, beta=1.250, gamma=4.350, train_loss=884.2723, val_loss=893.9018]
Training UniVI:  33%|███▎      | 133/400 [02:55<05:49,  1.31s/it, beta=1.250, gamma=4.350, train_loss=884.2723, val_loss=893.9018]
Training UniVI:  33%|███▎      | 133/400 [02:56<05:49,  1.31s/it, beta=1.250, gamma=4.350, train_loss=883.9107, val_loss=893.9096]
Training UniVI:  34%|███▎      | 134/400 [02:56<05:45,  1.30s/it, beta=1.250, gamma=4.350, train_loss=883.9107, val_loss=893.9096]
Training UniVI:  34%|███▎      | 134/400 [02:57<05:45,  1.30s/it, beta=1.250, gamma=4.350, train_loss=885.7976, val_loss=893.9891]
Training UniVI:  34%|███▍      | 135/400 [02:57<05:43,  1.30s/it, beta=1.250, gamma=4.350, train_loss=885.7976, val_loss=893.9891]
Training UniVI:  34%|███▍      | 135/400 [02:59<05:43,  1.30s/it, beta=1.250, gamma=4.350, train_loss=883.3557, val_loss=893.6075]
Training UniVI:  34%|███▍      | 136/400 [02:59<05:44,  1.30s/it, beta=1.250, gamma=4.350, train_loss=883.3557, val_loss=893.6075]
Training UniVI:  34%|███▍      | 136/400 [03:00<05:44,  1.30s/it, beta=1.250, gamma=4.350, train_loss=882.2224, val_loss=895.0337]
Training UniVI:  34%|███▍      | 137/400 [03:00<05:41,  1.30s/it, beta=1.250, gamma=4.350, train_loss=882.2224, val_loss=895.0337]
Training UniVI:  34%|███▍      | 137/400 [03:01<05:41,  1.30s/it, beta=1.250, gamma=4.350, train_loss=882.5617, val_loss=893.8984]
Training UniVI:  34%|███▍      | 138/400 [03:01<05:39,  1.30s/it, beta=1.250, gamma=4.350, train_loss=882.5617, val_loss=893.8984]
Training UniVI:  34%|███▍      | 138/400 [03:03<05:39,  1.30s/it, beta=1.250, gamma=4.350, train_loss=883.2406, val_loss=894.1898]
Training UniVI:  35%|███▍      | 139/400 [03:03<05:39,  1.30s/it, beta=1.250, gamma=4.350, train_loss=883.2406, val_loss=894.1898]
Training UniVI:  35%|███▍      | 139/400 [03:04<05:39,  1.30s/it, beta=1.250, gamma=4.350, train_loss=883.8521, val_loss=893.9205]
Training UniVI:  35%|███▌      | 140/400 [03:04<05:40,  1.31s/it, beta=1.250, gamma=4.350, train_loss=883.8521, val_loss=893.9205]
Training UniVI:  35%|███▌      | 140/400 [03:05<05:40,  1.31s/it, beta=1.250, gamma=4.350, train_loss=883.8428, val_loss=894.1098]
Training UniVI:  35%|███▌      | 141/400 [03:05<05:54,  1.37s/it, beta=1.250, gamma=4.350, train_loss=883.8428, val_loss=894.1098]
Training UniVI:  35%|███▌      | 141/400 [03:07<05:54,  1.37s/it, beta=1.250, gamma=4.350, train_loss=884.7216, val_loss=894.2065]
Training UniVI:  36%|███▌      | 142/400 [03:07<05:47,  1.35s/it, beta=1.250, gamma=4.350, train_loss=884.7216, val_loss=894.2065]
Training UniVI:  36%|███▌      | 142/400 [03:08<05:47,  1.35s/it, beta=1.250, gamma=4.350, train_loss=882.5343, val_loss=893.9901]
Training UniVI:  36%|███▌      | 143/400 [03:08<05:42,  1.33s/it, beta=1.250, gamma=4.350, train_loss=882.5343, val_loss=893.9901]
Training UniVI:  36%|███▌      | 143/400 [03:09<05:42,  1.33s/it, beta=1.250, gamma=4.350, train_loss=883.1109, val_loss=894.6270]
Training UniVI:  36%|███▌      | 144/400 [03:09<05:38,  1.32s/it, beta=1.250, gamma=4.350, train_loss=883.1109, val_loss=894.6270]
Training UniVI:  36%|███▌      | 144/400 [03:11<05:38,  1.32s/it, beta=1.250, gamma=4.350, train_loss=881.7816, val_loss=893.5960]
Training UniVI:  36%|███▋      | 145/400 [03:11<05:35,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.7816, val_loss=893.5960]
Training UniVI:  36%|███▋      | 145/400 [03:12<05:35,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.0030, val_loss=894.5520]
Training UniVI:  36%|███▋      | 146/400 [03:12<05:32,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.0030, val_loss=894.5520]
Training UniVI:  36%|███▋      | 146/400 [03:13<05:32,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.1061, val_loss=895.0433]
Training UniVI:  37%|███▋      | 147/400 [03:13<05:30,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.1061, val_loss=895.0433]
Training UniVI:  37%|███▋      | 147/400 [03:15<05:30,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.8418, val_loss=894.6436]
Training UniVI:  37%|███▋      | 148/400 [03:15<05:29,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.8418, val_loss=894.6436]
Training UniVI:  37%|███▋      | 148/400 [03:16<05:29,  1.31s/it, beta=1.250, gamma=4.350, train_loss=880.8161, val_loss=893.5967]
Training UniVI:  37%|███▋      | 149/400 [03:16<05:26,  1.30s/it, beta=1.250, gamma=4.350, train_loss=880.8161, val_loss=893.5967]
Training UniVI:  37%|███▋      | 149/400 [03:17<05:26,  1.30s/it, beta=1.250, gamma=4.350, train_loss=881.7392, val_loss=894.2807]
Training UniVI:  38%|███▊      | 150/400 [03:17<05:25,  1.30s/it, beta=1.250, gamma=4.350, train_loss=881.7392, val_loss=894.2807]
Training UniVI:  38%|███▊      | 150/400 [03:18<05:25,  1.30s/it, beta=1.250, gamma=4.350, train_loss=879.7528, val_loss=893.9270]
Training UniVI:  38%|███▊      | 151/400 [03:18<05:25,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.7528, val_loss=893.9270]
Training UniVI:  38%|███▊      | 151/400 [03:20<05:25,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.9194, val_loss=894.5831]
Training UniVI:  38%|███▊      | 152/400 [03:20<05:23,  1.31s/it, beta=1.250, gamma=4.350, train_loss=881.9194, val_loss=894.5831]
Training UniVI:  38%|███▊      | 152/400 [03:21<05:23,  1.31s/it, beta=1.250, gamma=4.350, train_loss=880.8978, val_loss=894.9809]
Training UniVI:  38%|███▊      | 153/400 [03:21<05:25,  1.32s/it, beta=1.250, gamma=4.350, train_loss=880.8978, val_loss=894.9809]
Training UniVI:  38%|███▊      | 153/400 [03:22<05:25,  1.32s/it, beta=1.250, gamma=4.350, train_loss=879.7531, val_loss=894.3506]
Training UniVI:  38%|███▊      | 154/400 [03:22<05:23,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.7531, val_loss=894.3506]
Training UniVI:  38%|███▊      | 154/400 [03:24<05:23,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.7771, val_loss=893.7322]
Training UniVI:  39%|███▉      | 155/400 [03:24<05:20,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.7771, val_loss=893.7322]
Training UniVI:  39%|███▉      | 155/400 [03:25<05:20,  1.31s/it, beta=1.250, gamma=4.350, train_loss=880.2800, val_loss=894.3120]
Training UniVI:  39%|███▉      | 156/400 [03:25<05:18,  1.31s/it, beta=1.250, gamma=4.350, train_loss=880.2800, val_loss=894.3120]
Training UniVI:  39%|███▉      | 156/400 [03:26<05:18,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.5849, val_loss=894.0483]
Training UniVI:  39%|███▉      | 157/400 [03:26<05:18,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.5849, val_loss=894.0483]
Training UniVI:  39%|███▉      | 157/400 [03:28<05:18,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.9055, val_loss=894.1971]
Training UniVI:  40%|███▉      | 158/400 [03:28<05:17,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.9055, val_loss=894.1971]
Training UniVI:  40%|███▉      | 158/400 [03:29<05:17,  1.31s/it, beta=1.250, gamma=4.350, train_loss=878.6271, val_loss=893.2212]
Training UniVI:  40%|███▉      | 159/400 [03:29<05:15,  1.31s/it, beta=1.250, gamma=4.350, train_loss=878.6271, val_loss=893.2212]
Training UniVI:  40%|███▉      | 159/400 [03:30<05:15,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.4604, val_loss=894.3416]
Training UniVI:  40%|████      | 160/400 [03:30<05:14,  1.31s/it, beta=1.250, gamma=4.350, train_loss=879.4604, val_loss=894.3416]
Training UniVI:  40%|████      | 160/400 [03:32<05:14,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.4277, val_loss=893.9827]
Training UniVI:  40%|████      | 161/400 [03:32<05:12,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.4277, val_loss=893.9827]
Training UniVI:  40%|████      | 161/400 [03:33<05:12,  1.31s/it, beta=1.250, gamma=4.350, train_loss=878.3225, val_loss=895.1733]
Training UniVI:  40%|████      | 162/400 [03:33<05:11,  1.31s/it, beta=1.250, gamma=4.350, train_loss=878.3225, val_loss=895.1733]
Training UniVI:  40%|████      | 162/400 [03:34<05:11,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.8047, val_loss=894.3898]
Training UniVI:  41%|████      | 163/400 [03:34<05:10,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.8047, val_loss=894.3898]
Training UniVI:  41%|████      | 163/400 [03:35<05:10,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.6089, val_loss=894.9142]
Training UniVI:  41%|████      | 164/400 [03:35<05:08,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.6089, val_loss=894.9142]
Training UniVI:  41%|████      | 164/400 [03:37<05:08,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.2346, val_loss=893.5012]
Training UniVI:  41%|████▏     | 165/400 [03:37<05:06,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.2346, val_loss=893.5012]
Training UniVI:  41%|████▏     | 165/400 [03:38<05:06,  1.31s/it, beta=1.250, gamma=4.350, train_loss=877.6366, val_loss=895.1628]
Training UniVI:  42%|████▏     | 166/400 [03:38<05:04,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.6366, val_loss=895.1628]
Training UniVI:  42%|████▏     | 166/400 [03:39<05:04,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.4302, val_loss=894.5645]
Training UniVI:  42%|████▏     | 167/400 [03:39<05:03,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.4302, val_loss=894.5645]
Training UniVI:  42%|████▏     | 167/400 [03:41<05:03,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.4277, val_loss=894.4997]
Training UniVI:  42%|████▏     | 168/400 [03:41<05:01,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.4277, val_loss=894.4997]
Training UniVI:  42%|████▏     | 168/400 [03:42<05:01,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.7872, val_loss=893.7811]
Training UniVI:  42%|████▏     | 169/400 [03:42<04:59,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.7872, val_loss=893.7811]
Training UniVI:  42%|████▏     | 169/400 [03:43<04:59,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.7862, val_loss=894.7204]
Training UniVI:  42%|████▎     | 170/400 [03:43<04:58,  1.30s/it, beta=1.250, gamma=4.350, train_loss=877.7862, val_loss=894.7204]
Training UniVI:  42%|████▎     | 170/400 [03:45<04:58,  1.30s/it, beta=1.250, gamma=4.350, train_loss=876.8833, val_loss=894.4056]
Training UniVI:  43%|████▎     | 171/400 [03:45<04:57,  1.30s/it, beta=1.250, gamma=4.350, train_loss=876.8833, val_loss=894.4056]
Training UniVI:  43%|████▎     | 171/400 [03:46<04:57,  1.30s/it, beta=1.250, gamma=4.350, train_loss=876.1201, val_loss=893.9072]
Training UniVI:  43%|████▎     | 172/400 [03:46<04:57,  1.31s/it, beta=1.250, gamma=4.350, train_loss=876.1201, val_loss=893.9072]
Training UniVI:  43%|████▎     | 172/400 [03:47<04:57,  1.31s/it, beta=1.250, gamma=4.350, train_loss=875.0199, val_loss=895.1596]
Training UniVI:  43%|████▎     | 173/400 [03:47<04:56,  1.31s/it, beta=1.250, gamma=4.350, train_loss=875.0199, val_loss=895.1596]
Training UniVI:  43%|████▎     | 173/400 [03:48<04:56,  1.31s/it, beta=1.250, gamma=4.350, train_loss=876.5528, val_loss=895.3430]
Training UniVI:  44%|████▎     | 174/400 [03:48<04:54,  1.30s/it, beta=1.250, gamma=4.350, train_loss=876.5528, val_loss=895.3430]
Training UniVI:  44%|████▎     | 174/400 [03:50<04:54,  1.30s/it, beta=1.250, gamma=4.350, train_loss=875.0589, val_loss=893.7687]
Training UniVI:  44%|████▍     | 175/400 [03:50<04:59,  1.33s/it, beta=1.250, gamma=4.350, train_loss=875.0589, val_loss=893.7687]
Training UniVI:  44%|████▍     | 175/400 [03:51<04:59,  1.33s/it, beta=1.250, gamma=4.350, train_loss=876.0989, val_loss=893.8423]
Training UniVI:  44%|████▍     | 176/400 [03:51<04:56,  1.32s/it, beta=1.250, gamma=4.350, train_loss=876.0989, val_loss=893.8423]
Training UniVI:  44%|████▍     | 176/400 [03:52<04:56,  1.32s/it, beta=1.250, gamma=4.350, train_loss=874.5538, val_loss=894.2210]
Training UniVI:  44%|████▍     | 177/400 [03:52<04:53,  1.31s/it, beta=1.250, gamma=4.350, train_loss=874.5538, val_loss=894.2210]
Training UniVI:  44%|████▍     | 177/400 [03:54<04:53,  1.31s/it, beta=1.250, gamma=4.350, train_loss=874.2381, val_loss=894.8322]
Training UniVI:  44%|████▍     | 178/400 [03:54<04:50,  1.31s/it, beta=1.250, gamma=4.350, train_loss=874.2381, val_loss=894.8322]
Training UniVI:  44%|████▍     | 178/400 [03:55<04:50,  1.31s/it, beta=1.250, gamma=4.350, train_loss=873.8736, val_loss=894.8101]
Training UniVI:  45%|████▍     | 179/400 [03:55<04:48,  1.31s/it, beta=1.250, gamma=4.350, train_loss=873.8736, val_loss=894.8101]
Training UniVI:  45%|████▍     | 179/400 [03:56<04:48,  1.31s/it, beta=1.250, gamma=4.350, train_loss=874.8688, val_loss=895.9680]
Training UniVI:  45%|████▌     | 180/400 [03:56<04:47,  1.30s/it, beta=1.250, gamma=4.350, train_loss=874.8688, val_loss=895.9680]
Training UniVI:  45%|████▌     | 180/400 [03:58<04:47,  1.30s/it, beta=1.250, gamma=4.350, train_loss=874.8190, val_loss=895.2806]
[2026-09-21 00:57:28,724] [UniVITrainer] [INFO] Early stopping at epoch 181 (best val loss=892.6403, best epoch=131)
Training UniVI:  45%|████▌     | 180/400 [03:58<04:51,  1.32s/it, beta=1.250, gamma=4.350, train_loss=874.8190, val_loss=895.2806]

[2026-09-21 00:57:28,760] [UniVITrainer] [INFO] Restored best model from epoch 131 (val loss=892.6403)

Other head options in ClassHeadConfig:

  • head_type="binary" with n_classes=2 for yes/no targets such as a mutation call (pos_weight rebalances rare positives)

  • adversarial=True with adv_lambda for a gradient-reversal head that pushes a nuisance variable (for example batch) out of the latent space during joint training

  • several heads at once: pass a dict of label arrays keyed by head name, with -1 wherever a label is unknown