Spatial niche discovery of multi-modality data

Here we will use spatial ATAC-RNA-seq mouse brain dataset as an example to illustrate how Garfield performs spatial multi-omics integration analysis. Data access: https://www.nature.com/articles/s41586-023-05795-1.

[1]:
import os
import pandas as pd
import numpy as np

os.chdir('/data2/zhouwg_data/project/Garfield')
os.getcwd()
[1]:
'/data2/zhouwg_data/project/Garfield'
[2]:
# load packages
import os
import warnings
import Garfield as gf
import scanpy as sc
from mudata import MuData
warnings.simplefilter(action="ignore", category=FutureWarning)
warnings.simplefilter(action='ignore', category=UserWarning)

gf.__version__
[2]:
'1.0.0'

Load data

[3]:
dataset='spatial_atac_rna_seq_mouse_brain'
root_dir = '/pri_exthome/zhouwg/project/spatial_data/spatial_multi-omics'
file_fold = os.path.join(root_dir, str(dataset))
adata_rna = sc.read_h5ad(file_fold + '/spatial_atac_rna_seq_mouse_brain_batch2.h5ad')
adata_rna.var_names_make_unique()
adata_rna
[3]:
AnnData object with n_obs × n_vars = 9215 × 22914
    obs: 'RNA_clusters', 'ATAC_clusters', 'batch'
    obsm: 'spatial'
    layers: 'counts'
[4]:
adata_rna.obs = adata_rna.obs.drop(['ATAC_clusters'],axis=1)
adata_rna
[4]:
AnnData object with n_obs × n_vars = 9215 × 22914
    obs: 'RNA_clusters', 'batch'
    obsm: 'spatial'
    layers: 'counts'
[5]:
adata_atac = sc.read_h5ad(file_fold + '/spatial_atac_rna_seq_mouse_brain_batch2_atac.h5ad')
adata_atac.var_names_make_unique()
adata_atac
[5]:
AnnData object with n_obs × n_vars = 9215 × 121068
    obs: 'RNA_clusters', 'ATAC_clusters', 'batch'
    obsm: 'spatial'
    layers: 'counts'
[6]:
adata_atac.var_names
[6]:
Index(['chr1:3094734-3095650', 'chr1:3119757-3120179', 'chr1:3120267-3120653',
       'chr1:3121314-3122051', 'chr1:3264998-3265766', 'chr1:3292462-3293293',
       'chr1:3294044-3295081', 'chr1:3300717-3301474', 'chr1:3301682-3302319',
       'chr1:3309769-3310662',
       ...
       'JH584304.1:106380-107258', 'JH584304.1:112856-113752',
       'GL456216.1:13410-14374', 'GL456216.1:16007-16700',
       'GL456216.1:16825-17441', 'GL456216.1:31908-32576',
       'GL456216.1:43983-44510', 'GL456216.1:48771-49683',
       'JH584292.1:12571-13497', 'JH584295.1:1163-1976'],
      dtype='object', length=121068)
[8]:
# load meta data
meta = pd.read_csv(file_fold + '/spatial_atac_rna_seq_mouse_brain_batch2_cell_type_annotations.csv', index_col=0)

# add meta data
adata_rna.obs = adata_rna.obs.join(meta)
adata_rna
[8]:
AnnData object with n_obs × n_vars = 9215 × 22914
    obs: 'RNA_clusters', 'batch', 'ATAC_clusters', 'predicted.celltype'
    obsm: 'spatial'
    layers: 'counts'
[9]:
# 假设 atac_var_name 是 adata 的一个属性,已经是一个 pandas Series
atac_var_name = adata_atac.var_names  # 假设 var_names 中存储了你需要处理的数据

# 分割每个元素
split_data = atac_var_name.str.split(':|-', expand=True).to_frame(index=False)
split_data.index = atac_var_name
# 将分割后的数据转换为 DataFrame 并命名列
split_data.columns = ['chr', 'start', 'end']

# 将处理后的 DataFrame 存储到 adata.var 中
adata_atac.var[['chr', 'start', 'end']] = split_data

mdata = MuData({"rna": adata_rna, "atac": adata_atac})
mdata
[9]:
MuData object with n_obs × n_vars = 9215 × 143982
  2 modalities
    rna:    9215 x 22914
      obs:  'RNA_clusters', 'batch', 'ATAC_clusters', 'predicted.celltype'
      obsm: 'spatial'
      layers:       'counts'
    atac:   9215 x 121068
      obs:  'RNA_clusters', 'ATAC_clusters', 'batch'
      var:  'chr', 'start', 'end'
      obsm: 'spatial'
      layers:       'counts'

Integrating spatially resolved transcriptomics data using Garfield

[10]:
# set workdir #
workdir = '/pri_exthome/zhouwg/project/Garfield_benchmark/results/sp_multimodal/mouse_brain'
gf.settings.set_workdir(workdir)

### modify parameter
user_config = dict(
    ## Input options
    adata_list=mdata,
    profile='spatial',
    data_type='multi-modal',
    sub_data_type=['rna', 'atac'],
    sample_col=None,
    weight=0.8,
    ## Preprocessing options
    graph_const_method='Squidpy', # mu_std, Radius, KNN, Squidpy
    genome='mm10',
    used_hvg=True,
    min_cells=3,
    min_features=0,
    keep_mt=False,
    target_sum=1e4,
    rna_n_top_features=3000,
    atac_n_top_features=10000,
    n_components=50,
    n_neighbors=5,
    metric='euclidean',
    svd_solver='arpack',
    # datasets
    used_pca_feat=True,
    adj_key='connectivities',
    # data split parameters
    edge_val_ratio=0.1,
    edge_test_ratio=0.,
    node_val_ratio=0.1,
    node_test_ratio=0.,
    ## Model options
    augment_type='svd', # svd
    svd_q=5,
    use_FCencoder=False,
    conv_type='GATv2Conv', # GAT or GATv2Conv or GCN
    gnn_layer=2,
    hidden_dims=[128, 128],
    bottle_neck_neurons=20,
    cluster_num=20,
    drop_feature_rate=0.2,
    drop_edge_rate=0.2,
    num_heads=3,
    dropout=0.2,
    concat=True,
    used_edge_weight=False,
    used_DSBN=False,
    used_mmd=False,
    # data loader parameters
    num_neighbors=5,
    loaders_n_hops=2,
    edge_batch_size=4096,
    node_batch_size=256, # None
    # loss parameters
    include_edge_recon_loss=True,
    include_gene_expr_recon_loss=True,
    lambda_latent_contrastive_instanceloss=1.0,
    lambda_latent_contrastive_clusterloss=0.5,
    lambda_gene_expr_recon=1.0, #
    lambda_edge_recon=50., #
    lambda_latent_adj_recon_loss=200.,
    lambda_omics_recon_mmd_loss=0.2,
    # train parameters
    n_epochs_no_edge_recon=0,
    learning_rate=0.001,
    weight_decay=1e-05,
    gradient_clipping=5,
    # other parameters
    latent_key='garfield_latent',
    reload_best_model=True,
    use_early_stopping=True,
    early_stopping_kwargs=None,
    monitor=True,
    device_id=0,
    seed=2024,
    verbose=True
)
dict_config = gf.settings.set_gf_params(user_config)
Saving results in: /pri_exthome/zhouwg/project/Garfield_benchmark/results/sp_multimodal/mouse_brain
[11]:
from Garfield.model import Garfield

# Initialize model
model = Garfield(dict_config)
--- DATA LOADING AND PREPROCESSING ---
Gene activity matrix has been calculated, loading cached adata_CG_atac object...
There are 15628 common genes in RNA and ATAC datasets
To start performing cell matching for adjacency matrix of the graph, please wait...
Finding initial pivots...
Init_matching done!
Refining pivots...
Refined_matching done!
Filter_bad_matches on pivots matching...
Begin filtering...
6450/9215 pairs of matched cells remain after the filtering.
Fitting CCA on pivots...
Scoring matched pairs...
Propagating matching...
Done!
Filter_bad_matches on propagated matching...
Begin filtering...
5530/5530 pairs of matched cells remain after the filtering.
Fitting CCA on pivots...
Scoring matched pairs...
/home/zhouwg/anaconda3/envs/env_gf/lib/python3.9/site-packages/numba/core/decorators.py:246: RuntimeWarning: nopython is set for njit and is ignored
  warnings.warn('nopython is set for njit and is ignored', RuntimeWarning)
COSINE SIM GRAPH DECODER -> dropout_rate: 0.2
[12]:
# Train model
model.train()

--- INITIALIZING TRAINER ---
Using GPU: device-0
Number of training nodes: 8293
Number of validation nodes: 922
Number of training edges: 25989
Number of validation edges: 2887
Edge batch size: 4096
Node batch size: 256

--- MODEL TRAINING ---
Epoch 1/100 |--------------------| 1.0% val_auroc_score: 0.6237; val_auprc_score: 0.6360; val_best_acc_score: 0.5914; val_best_f1_score: 0.6688; train_kl_reg_loss: 1569127.6935; train_edge_recon_loss: 52219.2274; train_gene_expr_recon_loss: 710909.2946; train_lambda_latent_adj_recon_loss: 372631.1518; train_lambda_latent_contrastive_instanceloss: 7.8368; train_lambda_latent_contrastive_clusterloss: 3.7058; train_global_loss: 2704898.9196; train_optim_loss: 2704898.9196; val_kl_reg_loss: 41.7703; val_edge_recon_loss: 41093.1367; val_gene_expr_recon_loss: 312072.8750; val_lambda_latent_adj_recon_loss: 126713.9062; val_lambda_latent_contrastive_instanceloss: 7.5319; val_lambda_latent_contrastive_clusterloss: 3.6890; val_global_loss: 479932.9062; val_optim_loss: 479932.9062
Epoch 2/100 |--------------------| 2.0% val_auroc_score: 0.6436; val_auprc_score: 0.6451; val_best_acc_score: 0.6058; val_best_f1_score: 0.6696; train_kl_reg_loss: 67.2343; train_edge_recon_loss: 51803.5257; train_gene_expr_recon_loss: 318353.0982; train_lambda_latent_adj_recon_loss: 203032.5692; train_lambda_latent_contrastive_instanceloss: 7.8200; train_lambda_latent_contrastive_clusterloss: 3.6793; train_global_loss: 573267.9420; train_optim_loss: 573267.9420; val_kl_reg_loss: 15.2886; val_edge_recon_loss: 38969.7500; val_gene_expr_recon_loss: 312572.2812; val_lambda_latent_adj_recon_loss: 32299.4746; val_lambda_latent_contrastive_instanceloss: 7.4374; val_lambda_latent_contrastive_clusterloss: 3.5715; val_global_loss: 383867.7812; val_optim_loss: 383867.7812
Epoch 3/100 |--------------------| 3.0% val_auroc_score: 0.6622; val_auprc_score: 0.6554; val_best_acc_score: 0.6160; val_best_f1_score: 0.6795; train_kl_reg_loss: 50.4866; train_edge_recon_loss: 51747.9166; train_gene_expr_recon_loss: 318737.3616; train_lambda_latent_adj_recon_loss: 130451.7656; train_lambda_latent_contrastive_instanceloss: 7.8204; train_lambda_latent_contrastive_clusterloss: 3.6649; train_global_loss: 500998.9955; train_optim_loss: 500998.9955; val_kl_reg_loss: 11.4368; val_edge_recon_loss: 39155.6211; val_gene_expr_recon_loss: 310744.4688; val_lambda_latent_adj_recon_loss: 37132.4727; val_lambda_latent_contrastive_instanceloss: 7.4869; val_lambda_latent_contrastive_clusterloss: 3.5934; val_global_loss: 387055.0938; val_optim_loss: 387055.0938
Epoch 4/100 |--------------------| 4.0% val_auroc_score: 0.7167; val_auprc_score: 0.6989; val_best_acc_score: 0.6588; val_best_f1_score: 0.7100; train_kl_reg_loss: 17.1193; train_edge_recon_loss: 51598.5552; train_gene_expr_recon_loss: 309743.4911; train_lambda_latent_adj_recon_loss: 96714.0871; train_lambda_latent_contrastive_instanceloss: 7.8100; train_lambda_latent_contrastive_clusterloss: 3.6544; train_global_loss: 458084.7143; train_optim_loss: 458084.7143; val_kl_reg_loss: 9.8490; val_edge_recon_loss: 38330.4766; val_gene_expr_recon_loss: 301777.3438; val_lambda_latent_adj_recon_loss: 33031.3906; val_lambda_latent_contrastive_instanceloss: 7.4261; val_lambda_latent_contrastive_clusterloss: 3.5867; val_global_loss: 373160.0938; val_optim_loss: 373160.0938
Epoch 5/100 |█-------------------| 5.0% val_auroc_score: 0.7666; val_auprc_score: 0.7454; val_best_acc_score: 0.6961; val_best_f1_score: 0.7367; train_kl_reg_loss: 14.4579; train_edge_recon_loss: 51203.0477; train_gene_expr_recon_loss: 298842.5759; train_lambda_latent_adj_recon_loss: 82113.9632; train_lambda_latent_contrastive_instanceloss: 7.7960; train_lambda_latent_contrastive_clusterloss: 3.6501; train_global_loss: 432185.4911; train_optim_loss: 432185.4911; val_kl_reg_loss: 10.4569; val_edge_recon_loss: 37154.9961; val_gene_expr_recon_loss: 279744.1562; val_lambda_latent_adj_recon_loss: 34895.2227; val_lambda_latent_contrastive_instanceloss: 7.3471; val_lambda_latent_contrastive_clusterloss: 3.5444; val_global_loss: 351815.7188; val_optim_loss: 351815.7188
Epoch 6/100 |█-------------------| 6.0% val_auroc_score: 0.7746; val_auprc_score: 0.7497; val_best_acc_score: 0.7051; val_best_f1_score: 0.7453; train_kl_reg_loss: 14.9872; train_edge_recon_loss: 50816.0089; train_gene_expr_recon_loss: 287060.0402; train_lambda_latent_adj_recon_loss: 78478.4364; train_lambda_latent_contrastive_instanceloss: 7.7275; train_lambda_latent_contrastive_clusterloss: 3.6349; train_global_loss: 416380.8304; train_optim_loss: 416380.8304; val_kl_reg_loss: 10.2115; val_edge_recon_loss: 36575.6328; val_gene_expr_recon_loss: 265089.4688; val_lambda_latent_adj_recon_loss: 31490.4453; val_lambda_latent_contrastive_instanceloss: 7.2192; val_lambda_latent_contrastive_clusterloss: 3.4995; val_global_loss: 333176.4688; val_optim_loss: 333176.4688
Epoch 7/100 |█-------------------| 7.0% val_auroc_score: 0.7719; val_auprc_score: 0.7514; val_best_acc_score: 0.7018; val_best_f1_score: 0.7367; train_kl_reg_loss: 14.3262; train_edge_recon_loss: 50706.2335; train_gene_expr_recon_loss: 275303.2723; train_lambda_latent_adj_recon_loss: 72279.4632; train_lambda_latent_contrastive_instanceloss: 7.7149; train_lambda_latent_contrastive_clusterloss: 3.6263; train_global_loss: 398314.6339; train_optim_loss: 398314.6339; val_kl_reg_loss: 9.7335; val_edge_recon_loss: 36828.0742; val_gene_expr_recon_loss: 257928.8750; val_lambda_latent_adj_recon_loss: 30785.5156; val_lambda_latent_contrastive_instanceloss: 7.1561; val_lambda_latent_contrastive_clusterloss: 3.4647; val_global_loss: 325562.8125; val_optim_loss: 325562.8125
Epoch 8/100 |█-------------------| 8.0% val_auroc_score: 0.7999; val_auprc_score: 0.7817; val_best_acc_score: 0.7231; val_best_f1_score: 0.7567; train_kl_reg_loss: 12.8377; train_edge_recon_loss: 50626.2765; train_gene_expr_recon_loss: 273842.8438; train_lambda_latent_adj_recon_loss: 66272.0977; train_lambda_latent_contrastive_instanceloss: 7.6430; train_lambda_latent_contrastive_clusterloss: 3.6112; train_global_loss: 390765.3036; train_optim_loss: 390765.3036; val_kl_reg_loss: 8.3389; val_edge_recon_loss: 36288.6094; val_gene_expr_recon_loss: 258451.1719; val_lambda_latent_adj_recon_loss: 29079.1055; val_lambda_latent_contrastive_instanceloss: 7.2342; val_lambda_latent_contrastive_clusterloss: 3.4545; val_global_loss: 323837.9062; val_optim_loss: 323837.9062
Epoch 9/100 |█-------------------| 9.0% val_auroc_score: 0.7938; val_auprc_score: 0.7666; val_best_acc_score: 0.7246; val_best_f1_score: 0.7549; train_kl_reg_loss: 12.3200; train_edge_recon_loss: 50527.5552; train_gene_expr_recon_loss: 271417.3929; train_lambda_latent_adj_recon_loss: 60238.1970; train_lambda_latent_contrastive_instanceloss: 7.6596; train_lambda_latent_contrastive_clusterloss: 3.6078; train_global_loss: 382206.7232; train_optim_loss: 382206.7232; val_kl_reg_loss: 8.6181; val_edge_recon_loss: 36595.2266; val_gene_expr_recon_loss: 256006.2812; val_lambda_latent_adj_recon_loss: 28635.8164; val_lambda_latent_contrastive_instanceloss: 7.1064; val_lambda_latent_contrastive_clusterloss: 3.4009; val_global_loss: 321256.4375; val_optim_loss: 321256.4375
Epoch 10/100 |██------------------| 10.0% val_auroc_score: 0.7963; val_auprc_score: 0.7788; val_best_acc_score: 0.7194; val_best_f1_score: 0.7533; train_kl_reg_loss: 12.0005; train_edge_recon_loss: 50473.2475; train_gene_expr_recon_loss: 267791.2411; train_lambda_latent_adj_recon_loss: 56695.0776; train_lambda_latent_contrastive_instanceloss: 7.6021; train_lambda_latent_contrastive_clusterloss: 3.5818; train_global_loss: 374982.7545; train_optim_loss: 374982.7545; val_kl_reg_loss: 8.9636; val_edge_recon_loss: 36326.9180; val_gene_expr_recon_loss: 253061.1406; val_lambda_latent_adj_recon_loss: 29814.7734; val_lambda_latent_contrastive_instanceloss: 7.1210; val_lambda_latent_contrastive_clusterloss: 3.3755; val_global_loss: 319222.3125; val_optim_loss: 319222.3125
Epoch 11/100 |██------------------| 11.0% val_auroc_score: 0.8000; val_auprc_score: 0.7818; val_best_acc_score: 0.7271; val_best_f1_score: 0.7602; train_kl_reg_loss: 13.0994; train_edge_recon_loss: 50316.2402; train_gene_expr_recon_loss: 265921.1830; train_lambda_latent_adj_recon_loss: 55273.7796; train_lambda_latent_contrastive_instanceloss: 7.5448; train_lambda_latent_contrastive_clusterloss: 3.5444; train_global_loss: 371535.3884; train_optim_loss: 371535.3884; val_kl_reg_loss: 9.5927; val_edge_recon_loss: 36430.3320; val_gene_expr_recon_loss: 257062.1875; val_lambda_latent_adj_recon_loss: 29775.1680; val_lambda_latent_contrastive_instanceloss: 7.1049; val_lambda_latent_contrastive_clusterloss: 3.3183; val_global_loss: 323287.6875; val_optim_loss: 323287.6875
Epoch 12/100 |██------------------| 12.0% val_auroc_score: 0.8078; val_auprc_score: 0.7798; val_best_acc_score: 0.7364; val_best_f1_score: 0.7624; train_kl_reg_loss: 13.4720; train_edge_recon_loss: 50262.3970; train_gene_expr_recon_loss: 265815.2768; train_lambda_latent_adj_recon_loss: 52665.1289; train_lambda_latent_contrastive_instanceloss: 7.5593; train_lambda_latent_contrastive_clusterloss: 3.5263; train_global_loss: 368767.3527; train_optim_loss: 368767.3527; val_kl_reg_loss: 9.1919; val_edge_recon_loss: 36221.4297; val_gene_expr_recon_loss: 257411.0156; val_lambda_latent_adj_recon_loss: 27671.9395; val_lambda_latent_contrastive_instanceloss: 7.0805; val_lambda_latent_contrastive_clusterloss: 3.2435; val_global_loss: 321323.9062; val_optim_loss: 321323.9062
Epoch 13/100 |██------------------| 13.0% val_auroc_score: 0.8171; val_auprc_score: 0.7952; val_best_acc_score: 0.7428; val_best_f1_score: 0.7693; train_kl_reg_loss: 13.8554; train_edge_recon_loss: 50105.3915; train_gene_expr_recon_loss: 264453.5938; train_lambda_latent_adj_recon_loss: 51126.8153; train_lambda_latent_contrastive_instanceloss: 7.5264; train_lambda_latent_contrastive_clusterloss: 3.4935; train_global_loss: 365710.6696; train_optim_loss: 365710.6696; val_kl_reg_loss: 10.8875; val_edge_recon_loss: 35890.1211; val_gene_expr_recon_loss: 248307.0781; val_lambda_latent_adj_recon_loss: 28665.7969; val_lambda_latent_contrastive_instanceloss: 7.0710; val_lambda_latent_contrastive_clusterloss: 3.2013; val_global_loss: 312884.1250; val_optim_loss: 312884.1250
Epoch 14/100 |██------------------| 14.0% val_auroc_score: 0.8225; val_auprc_score: 0.8062; val_best_acc_score: 0.7485; val_best_f1_score: 0.7695; train_kl_reg_loss: 15.0510; train_edge_recon_loss: 49991.2559; train_gene_expr_recon_loss: 256902.5848; train_lambda_latent_adj_recon_loss: 50438.3164; train_lambda_latent_contrastive_instanceloss: 7.5366; train_lambda_latent_contrastive_clusterloss: 3.4773; train_global_loss: 357358.2188; train_optim_loss: 357358.2188; val_kl_reg_loss: 10.8255; val_edge_recon_loss: 36057.2812; val_gene_expr_recon_loss: 252064.2969; val_lambda_latent_adj_recon_loss: 27226.0977; val_lambda_latent_contrastive_instanceloss: 7.0903; val_lambda_latent_contrastive_clusterloss: 3.1704; val_global_loss: 315368.7500; val_optim_loss: 315368.7500
Epoch 15/100 |███-----------------| 15.0% val_auroc_score: 0.8343; val_auprc_score: 0.8161; val_best_acc_score: 0.7643; val_best_f1_score: 0.7788; train_kl_reg_loss: 16.3579; train_edge_recon_loss: 49906.1376; train_gene_expr_recon_loss: 256165.4487; train_lambda_latent_adj_recon_loss: 49679.9330; train_lambda_latent_contrastive_instanceloss: 7.4469; train_lambda_latent_contrastive_clusterloss: 3.4053; train_global_loss: 355778.7188; train_optim_loss: 355778.7188; val_kl_reg_loss: 11.6757; val_edge_recon_loss: 35695.2891; val_gene_expr_recon_loss: 243632.6719; val_lambda_latent_adj_recon_loss: 27677.7285; val_lambda_latent_contrastive_instanceloss: 7.0896; val_lambda_latent_contrastive_clusterloss: 3.1187; val_global_loss: 307027.5625; val_optim_loss: 307027.5625
Epoch 16/100 |███-----------------| 16.0% val_auroc_score: 0.8304; val_auprc_score: 0.8117; val_best_acc_score: 0.7586; val_best_f1_score: 0.7793; train_kl_reg_loss: 16.6458; train_edge_recon_loss: 49758.4132; train_gene_expr_recon_loss: 257821.5201; train_lambda_latent_adj_recon_loss: 48110.3343; train_lambda_latent_contrastive_instanceloss: 7.4630; train_lambda_latent_contrastive_clusterloss: 3.3849; train_global_loss: 355717.7545; train_optim_loss: 355717.7545; val_kl_reg_loss: 12.9761; val_edge_recon_loss: 35881.7344; val_gene_expr_recon_loss: 243575.4844; val_lambda_latent_adj_recon_loss: 28613.1562; val_lambda_latent_contrastive_instanceloss: 7.1073; val_lambda_latent_contrastive_clusterloss: 3.0954; val_global_loss: 308093.5312; val_optim_loss: 308093.5312
Epoch 17/100 |███-----------------| 17.0% val_auroc_score: 0.8349; val_auprc_score: 0.8160; val_best_acc_score: 0.7600; val_best_f1_score: 0.7767; train_kl_reg_loss: 18.2306; train_edge_recon_loss: 49611.6130; train_gene_expr_recon_loss: 254770.9420; train_lambda_latent_adj_recon_loss: 47563.5195; train_lambda_latent_contrastive_instanceloss: 7.4600; train_lambda_latent_contrastive_clusterloss: 3.3549; train_global_loss: 351975.1161; train_optim_loss: 351975.1161; val_kl_reg_loss: 12.4633; val_edge_recon_loss: 35763.1680; val_gene_expr_recon_loss: 241275.7188; val_lambda_latent_adj_recon_loss: 26380.9805; val_lambda_latent_contrastive_instanceloss: 7.1125; val_lambda_latent_contrastive_clusterloss: 3.0604; val_global_loss: 303442.5000; val_optim_loss: 303442.5000
Epoch 18/100 |███-----------------| 18.0% val_auroc_score: 0.8224; val_auprc_score: 0.8118; val_best_acc_score: 0.7480; val_best_f1_score: 0.7678; train_kl_reg_loss: 18.7225; train_edge_recon_loss: 49726.0092; train_gene_expr_recon_loss: 255570.2455; train_lambda_latent_adj_recon_loss: 45825.6228; train_lambda_latent_contrastive_instanceloss: 7.4383; train_lambda_latent_contrastive_clusterloss: 3.3021; train_global_loss: 351151.3259; train_optim_loss: 351151.3259; val_kl_reg_loss: 13.9599; val_edge_recon_loss: 36196.1406; val_gene_expr_recon_loss: 242876.6094; val_lambda_latent_adj_recon_loss: 27077.8652; val_lambda_latent_contrastive_instanceloss: 7.0891; val_lambda_latent_contrastive_clusterloss: 3.0041; val_global_loss: 306174.6875; val_optim_loss: 306174.6875
Epoch 19/100 |███-----------------| 19.0% val_auroc_score: 0.8307; val_auprc_score: 0.8132; val_best_acc_score: 0.7567; val_best_f1_score: 0.7775; train_kl_reg_loss: 19.6074; train_edge_recon_loss: 49578.8931; train_gene_expr_recon_loss: 249373.6920; train_lambda_latent_adj_recon_loss: 45192.3901; train_lambda_latent_contrastive_instanceloss: 7.4548; train_lambda_latent_contrastive_clusterloss: 3.2994; train_global_loss: 344175.3348; train_optim_loss: 344175.3348; val_kl_reg_loss: 14.7899; val_edge_recon_loss: 35906.4414; val_gene_expr_recon_loss: 246066.9062; val_lambda_latent_adj_recon_loss: 27859.2246; val_lambda_latent_contrastive_instanceloss: 7.0739; val_lambda_latent_contrastive_clusterloss: 2.9541; val_global_loss: 309857.3750; val_optim_loss: 309857.3750
Epoch 20/100 |████----------------| 20.0% val_auroc_score: 0.8390; val_auprc_score: 0.8233; val_best_acc_score: 0.7698; val_best_f1_score: 0.7846; train_kl_reg_loss: 20.5687; train_edge_recon_loss: 49452.5578; train_gene_expr_recon_loss: 251567.3013; train_lambda_latent_adj_recon_loss: 44122.1049; train_lambda_latent_contrastive_instanceloss: 7.4254; train_lambda_latent_contrastive_clusterloss: 3.2539; train_global_loss: 345173.2098; train_optim_loss: 345173.2098; val_kl_reg_loss: 15.4739; val_edge_recon_loss: 35667.8906; val_gene_expr_recon_loss: 237279.0469; val_lambda_latent_adj_recon_loss: 27049.2402; val_lambda_latent_contrastive_instanceloss: 7.0819; val_lambda_latent_contrastive_clusterloss: 2.9349; val_global_loss: 300021.6875; val_optim_loss: 300021.6875
Epoch 21/100 |████----------------| 21.0% val_auroc_score: 0.8357; val_auprc_score: 0.8214; val_best_acc_score: 0.7596; val_best_f1_score: 0.7803; train_kl_reg_loss: 21.3078; train_edge_recon_loss: 49434.8047; train_gene_expr_recon_loss: 250092.5357; train_lambda_latent_adj_recon_loss: 43311.2321; train_lambda_latent_contrastive_instanceloss: 7.4003; train_lambda_latent_contrastive_clusterloss: 3.2104; train_global_loss: 342870.4911; train_optim_loss: 342870.4911; val_kl_reg_loss: 16.2140; val_edge_recon_loss: 35891.2852; val_gene_expr_recon_loss: 245799.1250; val_lambda_latent_adj_recon_loss: 27533.2207; val_lambda_latent_contrastive_instanceloss: 7.0653; val_lambda_latent_contrastive_clusterloss: 2.8772; val_global_loss: 309249.7812; val_optim_loss: 309249.7812
Epoch 22/100 |████----------------| 22.0% val_auroc_score: 0.8233; val_auprc_score: 0.8106; val_best_acc_score: 0.7490; val_best_f1_score: 0.7691; train_kl_reg_loss: 22.4102; train_edge_recon_loss: 49262.8982; train_gene_expr_recon_loss: 248803.3080; train_lambda_latent_adj_recon_loss: 42446.8415; train_lambda_latent_contrastive_instanceloss: 7.3517; train_lambda_latent_contrastive_clusterloss: 3.1511; train_global_loss: 340545.9509; train_optim_loss: 340545.9509; val_kl_reg_loss: 16.2883; val_edge_recon_loss: 35927.8516; val_gene_expr_recon_loss: 240383.4531; val_lambda_latent_adj_recon_loss: 27202.6543; val_lambda_latent_contrastive_instanceloss: 7.0424; val_lambda_latent_contrastive_clusterloss: 2.8642; val_global_loss: 303540.1562; val_optim_loss: 303540.1562
Epoch 23/100 |████----------------| 23.0% val_auroc_score: 0.8336; val_auprc_score: 0.8218; val_best_acc_score: 0.7601; val_best_f1_score: 0.7772; train_kl_reg_loss: 23.3908; train_edge_recon_loss: 49225.4607; train_gene_expr_recon_loss: 249101.4799; train_lambda_latent_adj_recon_loss: 41615.5251; train_lambda_latent_contrastive_instanceloss: 7.3496; train_lambda_latent_contrastive_clusterloss: 3.1286; train_global_loss: 339976.3259; train_optim_loss: 339976.3259; val_kl_reg_loss: 17.6997; val_edge_recon_loss: 35762.9180; val_gene_expr_recon_loss: 242476.8281; val_lambda_latent_adj_recon_loss: 27199.9414; val_lambda_latent_contrastive_instanceloss: 7.0386; val_lambda_latent_contrastive_clusterloss: 2.8420; val_global_loss: 305467.2500; val_optim_loss: 305467.2500
Epoch 24/100 |████----------------| 24.0% val_auroc_score: 0.8316; val_auprc_score: 0.8184; val_best_acc_score: 0.7607; val_best_f1_score: 0.7779; train_kl_reg_loss: 24.0581; train_edge_recon_loss: 49038.5561; train_gene_expr_recon_loss: 248926.9866; train_lambda_latent_adj_recon_loss: 41335.6155; train_lambda_latent_contrastive_instanceloss: 7.3526; train_lambda_latent_contrastive_clusterloss: 3.1236; train_global_loss: 339335.6920; train_optim_loss: 339335.6920; val_kl_reg_loss: 18.1324; val_edge_recon_loss: 35721.1055; val_gene_expr_recon_loss: 236734.1094; val_lambda_latent_adj_recon_loss: 26796.3984; val_lambda_latent_contrastive_instanceloss: 7.0451; val_lambda_latent_contrastive_clusterloss: 2.8233; val_global_loss: 299279.5938; val_optim_loss: 299279.5938
Epoch 25/100 |█████---------------| 25.0% val_auroc_score: 0.8340; val_auprc_score: 0.8141; val_best_acc_score: 0.7608; val_best_f1_score: 0.7781; train_kl_reg_loss: 25.1229; train_edge_recon_loss: 49108.4562; train_gene_expr_recon_loss: 242640.5558; train_lambda_latent_adj_recon_loss: 40271.2500; train_lambda_latent_contrastive_instanceloss: 7.3396; train_lambda_latent_contrastive_clusterloss: 3.0886; train_global_loss: 332055.8080; train_optim_loss: 332055.8080; val_kl_reg_loss: 19.3074; val_edge_recon_loss: 35583.5117; val_gene_expr_recon_loss: 235619.5469; val_lambda_latent_adj_recon_loss: 28335.7812; val_lambda_latent_contrastive_instanceloss: 7.0549; val_lambda_latent_contrastive_clusterloss: 2.8141; val_global_loss: 299568.0312; val_optim_loss: 299568.0312
Epoch 26/100 |█████---------------| 26.0% val_auroc_score: 0.8224; val_auprc_score: 0.8055; val_best_acc_score: 0.7490; val_best_f1_score: 0.7707; train_kl_reg_loss: 26.3224; train_edge_recon_loss: 48958.6775; train_gene_expr_recon_loss: 244681.3192; train_lambda_latent_adj_recon_loss: 40524.0363; train_lambda_latent_contrastive_instanceloss: 7.3036; train_lambda_latent_contrastive_clusterloss: 3.0539; train_global_loss: 334200.7143; train_optim_loss: 334200.7143; val_kl_reg_loss: 19.8234; val_edge_recon_loss: 35989.4492; val_gene_expr_recon_loss: 230969.7500; val_lambda_latent_adj_recon_loss: 26762.9219; val_lambda_latent_contrastive_instanceloss: 7.0213; val_lambda_latent_contrastive_clusterloss: 2.7569; val_global_loss: 293751.7188; val_optim_loss: 293751.7188
Epoch 27/100 |█████---------------| 27.0% val_auroc_score: 0.8266; val_auprc_score: 0.8117; val_best_acc_score: 0.7560; val_best_f1_score: 0.7737; train_kl_reg_loss: 27.2543; train_edge_recon_loss: 48947.4593; train_gene_expr_recon_loss: 239165.9174; train_lambda_latent_adj_recon_loss: 39799.7059; train_lambda_latent_contrastive_instanceloss: 7.3141; train_lambda_latent_contrastive_clusterloss: 3.0504; train_global_loss: 327950.7054; train_optim_loss: 327950.7054; val_kl_reg_loss: 20.4669; val_edge_recon_loss: 35820.6406; val_gene_expr_recon_loss: 233166.9844; val_lambda_latent_adj_recon_loss: 26771.2773; val_lambda_latent_contrastive_instanceloss: 7.0163; val_lambda_latent_contrastive_clusterloss: 2.7413; val_global_loss: 295789.1562; val_optim_loss: 295789.1562
Epoch 28/100 |█████---------------| 28.0% val_auroc_score: 0.8326; val_auprc_score: 0.8244; val_best_acc_score: 0.7615; val_best_f1_score: 0.7762; train_kl_reg_loss: 28.0647; train_edge_recon_loss: 48917.3376; train_gene_expr_recon_loss: 240293.4397; train_lambda_latent_adj_recon_loss: 39243.8220; train_lambda_latent_contrastive_instanceloss: 7.3091; train_lambda_latent_contrastive_clusterloss: 3.0235; train_global_loss: 328492.9911; train_optim_loss: 328492.9911; val_kl_reg_loss: 21.0575; val_edge_recon_loss: 35792.8477; val_gene_expr_recon_loss: 233758.1250; val_lambda_latent_adj_recon_loss: 27259.6035; val_lambda_latent_contrastive_instanceloss: 7.2871; val_lambda_latent_contrastive_clusterloss: 3.0989; val_global_loss: 296842.0000; val_optim_loss: 296842.0000
Epoch 29/100 |█████---------------| 29.0% val_auroc_score: 0.8381; val_auprc_score: 0.8268; val_best_acc_score: 0.7626; val_best_f1_score: 0.7776; train_kl_reg_loss: 29.7148; train_edge_recon_loss: 48836.2517; train_gene_expr_recon_loss: 239810.0491; train_lambda_latent_adj_recon_loss: 39117.4286; train_lambda_latent_contrastive_instanceloss: 7.2977; train_lambda_latent_contrastive_clusterloss: 2.9969; train_global_loss: 327803.7321; train_optim_loss: 327803.7321; val_kl_reg_loss: 22.8019; val_edge_recon_loss: 35480.8672; val_gene_expr_recon_loss: 229267.1719; val_lambda_latent_adj_recon_loss: 27305.0664; val_lambda_latent_contrastive_instanceloss: 6.9975; val_lambda_latent_contrastive_clusterloss: 2.6952; val_global_loss: 292085.5938; val_optim_loss: 292085.5938
Epoch 30/100 |██████--------------| 30.0% val_auroc_score: 0.8305; val_auprc_score: 0.8200; val_best_acc_score: 0.7567; val_best_f1_score: 0.7743; train_kl_reg_loss: 29.7881; train_edge_recon_loss: 48821.9601; train_gene_expr_recon_loss: 237568.0246; train_lambda_latent_adj_recon_loss: 38585.3594; train_lambda_latent_contrastive_instanceloss: 7.2871; train_lambda_latent_contrastive_clusterloss: 2.9766; train_global_loss: 325015.3884; train_optim_loss: 325015.3884; val_kl_reg_loss: 22.6903; val_edge_recon_loss: 35769.9844; val_gene_expr_recon_loss: 231302.0312; val_lambda_latent_adj_recon_loss: 26539.8047; val_lambda_latent_contrastive_instanceloss: 7.0339; val_lambda_latent_contrastive_clusterloss: 2.7055; val_global_loss: 293644.2812; val_optim_loss: 293644.2812
Epoch 31/100 |██████--------------| 31.0% val_auroc_score: 0.8265; val_auprc_score: 0.8189; val_best_acc_score: 0.7510; val_best_f1_score: 0.7725; train_kl_reg_loss: 31.2990; train_edge_recon_loss: 48785.3178; train_gene_expr_recon_loss: 236627.6964; train_lambda_latent_adj_recon_loss: 38001.9442; train_lambda_latent_contrastive_instanceloss: 7.2480; train_lambda_latent_contrastive_clusterloss: 2.9301; train_global_loss: 323456.4196; train_optim_loss: 323456.4196; val_kl_reg_loss: 23.9559; val_edge_recon_loss: 36005.1484; val_gene_expr_recon_loss: 227814.1250; val_lambda_latent_adj_recon_loss: 26781.3535; val_lambda_latent_contrastive_instanceloss: 7.0341; val_lambda_latent_contrastive_clusterloss: 2.7068; val_global_loss: 290634.3125; val_optim_loss: 290634.3125
Epoch 32/100 |██████--------------| 32.0% val_auroc_score: 0.8378; val_auprc_score: 0.8257; val_best_acc_score: 0.7645; val_best_f1_score: 0.7823; train_kl_reg_loss: 32.1650; train_edge_recon_loss: 48738.1920; train_gene_expr_recon_loss: 237641.4152; train_lambda_latent_adj_recon_loss: 37476.0592; train_lambda_latent_contrastive_instanceloss: 7.2447; train_lambda_latent_contrastive_clusterloss: 2.9248; train_global_loss: 323898.0045; train_optim_loss: 323898.0045; val_kl_reg_loss: 24.6776; val_edge_recon_loss: 35571.7891; val_gene_expr_recon_loss: 230676.7031; val_lambda_latent_adj_recon_loss: 26722.3730; val_lambda_latent_contrastive_instanceloss: 7.0092; val_lambda_latent_contrastive_clusterloss: 2.6557; val_global_loss: 293005.1875; val_optim_loss: 293005.1875
Epoch 33/100 |██████--------------| 33.0% val_auroc_score: 0.8281; val_auprc_score: 0.8191; val_best_acc_score: 0.7523; val_best_f1_score: 0.7708; train_kl_reg_loss: 32.6670; train_edge_recon_loss: 48653.4838; train_gene_expr_recon_loss: 234451.0045; train_lambda_latent_adj_recon_loss: 37326.6998; train_lambda_latent_contrastive_instanceloss: 7.2458; train_lambda_latent_contrastive_clusterloss: 2.9131; train_global_loss: 320474.0089; train_optim_loss: 320474.0089; val_kl_reg_loss: 24.8846; val_edge_recon_loss: 35736.6523; val_gene_expr_recon_loss: 233679.3906; val_lambda_latent_adj_recon_loss: 27125.1348; val_lambda_latent_contrastive_instanceloss: 6.9979; val_lambda_latent_contrastive_clusterloss: 2.6381; val_global_loss: 296575.6875; val_optim_loss: 296575.6875
Epoch 34/100 |██████--------------| 34.0% val_auroc_score: 0.8335; val_auprc_score: 0.8234; val_best_acc_score: 0.7603; val_best_f1_score: 0.7795; train_kl_reg_loss: 33.8280; train_edge_recon_loss: 48636.9166; train_gene_expr_recon_loss: 234862.6607; train_lambda_latent_adj_recon_loss: 36786.1004; train_lambda_latent_contrastive_instanceloss: 7.2440; train_lambda_latent_contrastive_clusterloss: 2.9070; train_global_loss: 320329.6518; train_optim_loss: 320329.6518; val_kl_reg_loss: 26.6428; val_edge_recon_loss: 35715.6758; val_gene_expr_recon_loss: 225483.0781; val_lambda_latent_adj_recon_loss: 26935.6230; val_lambda_latent_contrastive_instanceloss: 7.0304; val_lambda_latent_contrastive_clusterloss: 2.6622; val_global_loss: 288170.7188; val_optim_loss: 288170.7188
Epoch 35/100 |███████-------------| 35.0% val_auroc_score: 0.8276; val_auprc_score: 0.8148; val_best_acc_score: 0.7561; val_best_f1_score: 0.7733; train_kl_reg_loss: 35.3382; train_edge_recon_loss: 48522.1914; train_gene_expr_recon_loss: 231898.4018; train_lambda_latent_adj_recon_loss: 36675.6551; train_lambda_latent_contrastive_instanceloss: 7.2281; train_lambda_latent_contrastive_clusterloss: 2.8871; train_global_loss: 317141.7054; train_optim_loss: 317141.7054; val_kl_reg_loss: 27.2061; val_edge_recon_loss: 35826.3477; val_gene_expr_recon_loss: 223829.0000; val_lambda_latent_adj_recon_loss: 26735.0762; val_lambda_latent_contrastive_instanceloss: 7.0059; val_lambda_latent_contrastive_clusterloss: 2.6254; val_global_loss: 286427.2500; val_optim_loss: 286427.2500
Epoch 36/100 |███████-------------| 36.0% val_auroc_score: 0.8330; val_auprc_score: 0.8243; val_best_acc_score: 0.7584; val_best_f1_score: 0.7770; train_kl_reg_loss: 35.9078; train_edge_recon_loss: 48519.3301; train_gene_expr_recon_loss: 233238.9129; train_lambda_latent_adj_recon_loss: 36136.9448; train_lambda_latent_contrastive_instanceloss: 7.2458; train_lambda_latent_contrastive_clusterloss: 2.8953; train_global_loss: 317941.2277; train_optim_loss: 317941.2277; val_kl_reg_loss: 29.0560; val_edge_recon_loss: 35774.4727; val_gene_expr_recon_loss: 217141.8594; val_lambda_latent_adj_recon_loss: 26309.1855; val_lambda_latent_contrastive_instanceloss: 7.0151; val_lambda_latent_contrastive_clusterloss: 2.6089; val_global_loss: 279264.1562; val_optim_loss: 279264.1562
Epoch 37/100 |███████-------------| 37.0% val_auroc_score: 0.8307; val_auprc_score: 0.8227; val_best_acc_score: 0.7567; val_best_f1_score: 0.7710; train_kl_reg_loss: 37.3873; train_edge_recon_loss: 48466.0310; train_gene_expr_recon_loss: 229784.1473; train_lambda_latent_adj_recon_loss: 36209.5469; train_lambda_latent_contrastive_instanceloss: 7.2093; train_lambda_latent_contrastive_clusterloss: 2.8305; train_global_loss: 314507.1562; train_optim_loss: 314507.1562; val_kl_reg_loss: 29.0684; val_edge_recon_loss: 35742.7188; val_gene_expr_recon_loss: 216162.2656; val_lambda_latent_adj_recon_loss: 27104.6113; val_lambda_latent_contrastive_instanceloss: 7.0208; val_lambda_latent_contrastive_clusterloss: 2.6021; val_global_loss: 279048.3125; val_optim_loss: 279048.3125
Epoch 38/100 |███████-------------| 38.0% val_auroc_score: 0.8273; val_auprc_score: 0.8181; val_best_acc_score: 0.7499; val_best_f1_score: 0.7678; train_kl_reg_loss: 37.7997; train_edge_recon_loss: 48457.5011; train_gene_expr_recon_loss: 229822.8594; train_lambda_latent_adj_recon_loss: 35845.4587; train_lambda_latent_contrastive_instanceloss: 7.2180; train_lambda_latent_contrastive_clusterloss: 2.8440; train_global_loss: 314173.6741; train_optim_loss: 314173.6741; val_kl_reg_loss: 29.2878; val_edge_recon_loss: 35860.1016; val_gene_expr_recon_loss: 219510.9062; val_lambda_latent_adj_recon_loss: 26434.2344; val_lambda_latent_contrastive_instanceloss: 6.9984; val_lambda_latent_contrastive_clusterloss: 2.5672; val_global_loss: 281844.0938; val_optim_loss: 281844.0938
Epoch 39/100 |███████-------------| 39.0% val_auroc_score: 0.8366; val_auprc_score: 0.8246; val_best_acc_score: 0.7610; val_best_f1_score: 0.7750; train_kl_reg_loss: 38.9237; train_edge_recon_loss: 48396.8267; train_gene_expr_recon_loss: 228577.6362; train_lambda_latent_adj_recon_loss: 35323.4107; train_lambda_latent_contrastive_instanceloss: 7.1905; train_lambda_latent_contrastive_clusterloss: 2.7950; train_global_loss: 312346.7812; train_optim_loss: 312346.7812; val_kl_reg_loss: 31.2189; val_edge_recon_loss: 35677.3008; val_gene_expr_recon_loss: 219880.1562; val_lambda_latent_adj_recon_loss: 26246.0547; val_lambda_latent_contrastive_instanceloss: 7.0077; val_lambda_latent_contrastive_clusterloss: 2.5732; val_global_loss: 281844.2812; val_optim_loss: 281844.2812
Epoch 40/100 |████████------------| 40.0% val_auroc_score: 0.8283; val_auprc_score: 0.8145; val_best_acc_score: 0.7549; val_best_f1_score: 0.7718; train_kl_reg_loss: 39.7635; train_edge_recon_loss: 48272.4897; train_gene_expr_recon_loss: 227708.0402; train_lambda_latent_adj_recon_loss: 34686.6256; train_lambda_latent_contrastive_instanceloss: 7.1907; train_lambda_latent_contrastive_clusterloss: 2.7858; train_global_loss: 310716.8929; train_optim_loss: 310716.8929; val_kl_reg_loss: 32.0669; val_edge_recon_loss: 35801.6172; val_gene_expr_recon_loss: 221476.5000; val_lambda_latent_adj_recon_loss: 26926.9844; val_lambda_latent_contrastive_instanceloss: 7.0158; val_lambda_latent_contrastive_clusterloss: 2.5616; val_global_loss: 284246.7812; val_optim_loss: 284246.7812
Epoch 41/100 |████████------------| 41.0% val_auroc_score: 0.8329; val_auprc_score: 0.8244; val_best_acc_score: 0.7577; val_best_f1_score: 0.7680; train_kl_reg_loss: 40.7047; train_edge_recon_loss: 48384.0703; train_gene_expr_recon_loss: 228062.6808; train_lambda_latent_adj_recon_loss: 34828.5195; train_lambda_latent_contrastive_instanceloss: 7.2070; train_lambda_latent_contrastive_clusterloss: 2.8054; train_global_loss: 311325.9911; train_optim_loss: 311325.9911; val_kl_reg_loss: 33.3101; val_edge_recon_loss: 35720.1406; val_gene_expr_recon_loss: 220087.0312; val_lambda_latent_adj_recon_loss: 27444.2148; val_lambda_latent_contrastive_instanceloss: 6.9955; val_lambda_latent_contrastive_clusterloss: 2.5281; val_global_loss: 283294.2188; val_optim_loss: 283294.2188

Reducing learning rate: metric has not improved more than 0.0 in the last 4 epochs.
New learning rate is 0.0001.

Epoch 42/100 |████████------------| 42.0% val_auroc_score: 0.8313; val_auprc_score: 0.8230; val_best_acc_score: 0.7539; val_best_f1_score: 0.7706; train_kl_reg_loss: 42.3430; train_edge_recon_loss: 48235.5912; train_gene_expr_recon_loss: 222837.7009; train_lambda_latent_adj_recon_loss: 36025.6992; train_lambda_latent_contrastive_instanceloss: 7.1716; train_lambda_latent_contrastive_clusterloss: 2.7500; train_global_loss: 307151.2634; train_optim_loss: 307151.2634; val_kl_reg_loss: 33.4195; val_edge_recon_loss: 35740.7305; val_gene_expr_recon_loss: 216079.8906; val_lambda_latent_adj_recon_loss: 26823.6152; val_lambda_latent_contrastive_instanceloss: 6.9913; val_lambda_latent_contrastive_clusterloss: 2.5346; val_global_loss: 278687.1875; val_optim_loss: 278687.1875
Epoch 43/100 |████████------------| 43.0% val_auroc_score: 0.8328; val_auprc_score: 0.8240; val_best_acc_score: 0.7584; val_best_f1_score: 0.7735; train_kl_reg_loss: 41.7540; train_edge_recon_loss: 48236.4863; train_gene_expr_recon_loss: 225663.8705; train_lambda_latent_adj_recon_loss: 35176.8292; train_lambda_latent_contrastive_instanceloss: 7.1544; train_lambda_latent_contrastive_clusterloss: 2.7197; train_global_loss: 309128.8170; train_optim_loss: 309128.8170; val_kl_reg_loss: 32.8874; val_edge_recon_loss: 35724.1523; val_gene_expr_recon_loss: 214238.3438; val_lambda_latent_adj_recon_loss: 26183.9102; val_lambda_latent_contrastive_instanceloss: 7.0215; val_lambda_latent_contrastive_clusterloss: 2.5352; val_global_loss: 276188.8438; val_optim_loss: 276188.8438
Epoch 44/100 |████████------------| 44.0% val_auroc_score: 0.8423; val_auprc_score: 0.8356; val_best_acc_score: 0.7662; val_best_f1_score: 0.7781; train_kl_reg_loss: 41.3645; train_edge_recon_loss: 48229.4590; train_gene_expr_recon_loss: 223325.6920; train_lambda_latent_adj_recon_loss: 34102.4604; train_lambda_latent_contrastive_instanceloss: 7.1795; train_lambda_latent_contrastive_clusterloss: 2.7512; train_global_loss: 305708.9062; train_optim_loss: 305708.9062; val_kl_reg_loss: 33.2847; val_edge_recon_loss: 35524.0898; val_gene_expr_recon_loss: 218615.9375; val_lambda_latent_adj_recon_loss: 25900.8203; val_lambda_latent_contrastive_instanceloss: 6.9688; val_lambda_latent_contrastive_clusterloss: 2.4959; val_global_loss: 280083.5938; val_optim_loss: 280083.5938
Epoch 45/100 |█████████-----------| 45.0% val_auroc_score: 0.8297; val_auprc_score: 0.8165; val_best_acc_score: 0.7553; val_best_f1_score: 0.7733; train_kl_reg_loss: 41.9255; train_edge_recon_loss: 48221.7999; train_gene_expr_recon_loss: 222167.1808; train_lambda_latent_adj_recon_loss: 34920.8901; train_lambda_latent_contrastive_instanceloss: 7.1863; train_lambda_latent_contrastive_clusterloss: 2.7469; train_global_loss: 305361.7188; train_optim_loss: 305361.7188; val_kl_reg_loss: 33.3315; val_edge_recon_loss: 35758.2852; val_gene_expr_recon_loss: 212782.6719; val_lambda_latent_adj_recon_loss: 26532.6133; val_lambda_latent_contrastive_instanceloss: 7.0000; val_lambda_latent_contrastive_clusterloss: 2.5212; val_global_loss: 275116.4375; val_optim_loss: 275116.4375
Epoch 46/100 |█████████-----------| 46.0% val_auroc_score: 0.8327; val_auprc_score: 0.8185; val_best_acc_score: 0.7582; val_best_f1_score: 0.7729; train_kl_reg_loss: 42.0787; train_edge_recon_loss: 48198.1080; train_gene_expr_recon_loss: 224483.4621; train_lambda_latent_adj_recon_loss: 34942.0117; train_lambda_latent_contrastive_instanceloss: 7.1571; train_lambda_latent_contrastive_clusterloss: 2.7150; train_global_loss: 307675.5357; train_optim_loss: 307675.5357; val_kl_reg_loss: 33.4048; val_edge_recon_loss: 35678.7148; val_gene_expr_recon_loss: 216511.3438; val_lambda_latent_adj_recon_loss: 26768.5020; val_lambda_latent_contrastive_instanceloss: 6.9806; val_lambda_latent_contrastive_clusterloss: 2.4930; val_global_loss: 279001.4375; val_optim_loss: 279001.4375
Epoch 47/100 |█████████-----------| 47.0% val_auroc_score: 0.8363; val_auprc_score: 0.8289; val_best_acc_score: 0.7622; val_best_f1_score: 0.7783; train_kl_reg_loss: 42.1133; train_edge_recon_loss: 48148.4213; train_gene_expr_recon_loss: 224687.8013; train_lambda_latent_adj_recon_loss: 34437.3499; train_lambda_latent_contrastive_instanceloss: 7.1776; train_lambda_latent_contrastive_clusterloss: 2.7423; train_global_loss: 307325.5982; train_optim_loss: 307325.5982; val_kl_reg_loss: 33.8298; val_edge_recon_loss: 35654.2617; val_gene_expr_recon_loss: 216448.3594; val_lambda_latent_adj_recon_loss: 26952.4238; val_lambda_latent_contrastive_instanceloss: 7.0091; val_lambda_latent_contrastive_clusterloss: 2.5199; val_global_loss: 279098.4062; val_optim_loss: 279098.4062
Epoch 48/100 |█████████-----------| 48.0% val_auroc_score: 0.8324; val_auprc_score: 0.8209; val_best_acc_score: 0.7574; val_best_f1_score: 0.7748; train_kl_reg_loss: 42.4010; train_edge_recon_loss: 48161.5335; train_gene_expr_recon_loss: 224099.0424; train_lambda_latent_adj_recon_loss: 34927.5212; train_lambda_latent_contrastive_instanceloss: 7.2659; train_lambda_latent_contrastive_clusterloss: 2.8790; train_global_loss: 307240.6473; train_optim_loss: 307240.6473; val_kl_reg_loss: 34.1367; val_edge_recon_loss: 35726.4648; val_gene_expr_recon_loss: 215737.1719; val_lambda_latent_adj_recon_loss: 26361.4473; val_lambda_latent_contrastive_instanceloss: 6.9834; val_lambda_latent_contrastive_clusterloss: 2.4972; val_global_loss: 277868.6875; val_optim_loss: 277868.6875
Epoch 49/100 |█████████-----------| 49.0% val_auroc_score: 0.8316; val_auprc_score: 0.8170; val_best_acc_score: 0.7530; val_best_f1_score: 0.7739; train_kl_reg_loss: 42.5292; train_edge_recon_loss: 48181.4562; train_gene_expr_recon_loss: 220549.0112; train_lambda_latent_adj_recon_loss: 34482.2863; train_lambda_latent_contrastive_instanceloss: 7.1990; train_lambda_latent_contrastive_clusterloss: 2.7865; train_global_loss: 303265.2812; train_optim_loss: 303265.2812; val_kl_reg_loss: 33.8053; val_edge_recon_loss: 35752.4219; val_gene_expr_recon_loss: 209747.6406; val_lambda_latent_adj_recon_loss: 26144.9492; val_lambda_latent_contrastive_instanceloss: 7.0994; val_lambda_latent_contrastive_clusterloss: 2.7336; val_global_loss: 271688.6250; val_optim_loss: 271688.6250
Epoch 50/100 |██████████----------| 50.0% val_auroc_score: 0.8292; val_auprc_score: 0.8185; val_best_acc_score: 0.7544; val_best_f1_score: 0.7710; train_kl_reg_loss: 42.4363; train_edge_recon_loss: 48173.6007; train_gene_expr_recon_loss: 223278.7321; train_lambda_latent_adj_recon_loss: 34915.9330; train_lambda_latent_contrastive_instanceloss: 7.1845; train_lambda_latent_contrastive_clusterloss: 2.7394; train_global_loss: 306420.6250; train_optim_loss: 306420.6250; val_kl_reg_loss: 34.0256; val_edge_recon_loss: 35803.1133; val_gene_expr_recon_loss: 216178.5625; val_lambda_latent_adj_recon_loss: 26026.6016; val_lambda_latent_contrastive_instanceloss: 7.0110; val_lambda_latent_contrastive_clusterloss: 2.5090; val_global_loss: 278051.8125; val_optim_loss: 278051.8125
Epoch 51/100 |██████████----------| 51.0% val_auroc_score: 0.8396; val_auprc_score: 0.8332; val_best_acc_score: 0.7608; val_best_f1_score: 0.7760; train_kl_reg_loss: 42.5042; train_edge_recon_loss: 48115.7079; train_gene_expr_recon_loss: 224592.6451; train_lambda_latent_adj_recon_loss: 34346.3627; train_lambda_latent_contrastive_instanceloss: 7.1892; train_lambda_latent_contrastive_clusterloss: 2.7551; train_global_loss: 307107.1741; train_optim_loss: 307107.1741; val_kl_reg_loss: 33.8693; val_edge_recon_loss: 35590.0156; val_gene_expr_recon_loss: 217071.5156; val_lambda_latent_adj_recon_loss: 25694.0957; val_lambda_latent_contrastive_instanceloss: 7.0180; val_lambda_latent_contrastive_clusterloss: 2.5135; val_global_loss: 278399.0312; val_optim_loss: 278399.0312
Epoch 52/100 |██████████----------| 52.0% val_auroc_score: 0.8280; val_auprc_score: 0.8148; val_best_acc_score: 0.7579; val_best_f1_score: 0.7712; train_kl_reg_loss: 42.2072; train_edge_recon_loss: 48256.7408; train_gene_expr_recon_loss: 223189.6696; train_lambda_latent_adj_recon_loss: 34477.8583; train_lambda_latent_contrastive_instanceloss: 7.1807; train_lambda_latent_contrastive_clusterloss: 2.7453; train_global_loss: 305976.4107; train_optim_loss: 305976.4107; val_kl_reg_loss: 33.8252; val_edge_recon_loss: 35844.7617; val_gene_expr_recon_loss: 221579.4062; val_lambda_latent_adj_recon_loss: 26159.5527; val_lambda_latent_contrastive_instanceloss: 7.0031; val_lambda_latent_contrastive_clusterloss: 2.5222; val_global_loss: 283627.0938; val_optim_loss: 283627.0938
Epoch 53/100 |██████████----------| 53.0% val_auroc_score: 0.8335; val_auprc_score: 0.8279; val_best_acc_score: 0.7561; val_best_f1_score: 0.7730; train_kl_reg_loss: 42.6481; train_edge_recon_loss: 48155.0812; train_gene_expr_recon_loss: 224254.3661; train_lambda_latent_adj_recon_loss: 34375.5000; train_lambda_latent_contrastive_instanceloss: 7.2231; train_lambda_latent_contrastive_clusterloss: 2.8181; train_global_loss: 306837.6429; train_optim_loss: 306837.6429; val_kl_reg_loss: 34.3486; val_edge_recon_loss: 35724.4492; val_gene_expr_recon_loss: 218936.2500; val_lambda_latent_adj_recon_loss: 25803.7168; val_lambda_latent_contrastive_instanceloss: 6.9774; val_lambda_latent_contrastive_clusterloss: 2.4903; val_global_loss: 280508.2188; val_optim_loss: 280508.2188

Reducing learning rate: metric has not improved more than 0.0 in the last 4 epochs.
New learning rate is 1e-05.

Epoch 54/100 |██████████----------| 54.0% val_auroc_score: 0.8309; val_auprc_score: 0.8185; val_best_acc_score: 0.7549; val_best_f1_score: 0.7725; train_kl_reg_loss: 42.6963; train_edge_recon_loss: 48215.6004; train_gene_expr_recon_loss: 222866.0402; train_lambda_latent_adj_recon_loss: 34587.4905; train_lambda_latent_contrastive_instanceloss: 7.1754; train_lambda_latent_contrastive_clusterloss: 2.7418; train_global_loss: 305721.7411; train_optim_loss: 305721.7411; val_kl_reg_loss: 34.1116; val_edge_recon_loss: 35768.9844; val_gene_expr_recon_loss: 214880.7656; val_lambda_latent_adj_recon_loss: 26521.8750; val_lambda_latent_contrastive_instanceloss: 7.0128; val_lambda_latent_contrastive_clusterloss: 2.5140; val_global_loss: 277215.2500; val_optim_loss: 277215.2500
Epoch 55/100 |███████████---------| 55.0% val_auroc_score: 0.8361; val_auprc_score: 0.8207; val_best_acc_score: 0.7605; val_best_f1_score: 0.7754; train_kl_reg_loss: 42.5389; train_edge_recon_loss: 48152.0843; train_gene_expr_recon_loss: 224281.1875; train_lambda_latent_adj_recon_loss: 33911.9604; train_lambda_latent_contrastive_instanceloss: 7.1751; train_lambda_latent_contrastive_clusterloss: 2.7414; train_global_loss: 306397.6786; train_optim_loss: 306397.6786; val_kl_reg_loss: 34.0354; val_edge_recon_loss: 35639.7148; val_gene_expr_recon_loss: 215308.0312; val_lambda_latent_adj_recon_loss: 26181.4180; val_lambda_latent_contrastive_instanceloss: 7.0157; val_lambda_latent_contrastive_clusterloss: 2.5165; val_global_loss: 277172.7500; val_optim_loss: 277172.7500
Epoch 56/100 |███████████---------| 56.0% val_auroc_score: 0.8369; val_auprc_score: 0.8191; val_best_acc_score: 0.7622; val_best_f1_score: 0.7798; train_kl_reg_loss: 42.4803; train_edge_recon_loss: 48171.3451; train_gene_expr_recon_loss: 224646.1496; train_lambda_latent_adj_recon_loss: 34517.1094; train_lambda_latent_contrastive_instanceloss: 7.1710; train_lambda_latent_contrastive_clusterloss: 2.7345; train_global_loss: 307386.9955; train_optim_loss: 307386.9955; val_kl_reg_loss: 34.1000; val_edge_recon_loss: 35606.4688; val_gene_expr_recon_loss: 207708.4688; val_lambda_latent_adj_recon_loss: 25995.2207; val_lambda_latent_contrastive_instanceloss: 7.0082; val_lambda_latent_contrastive_clusterloss: 2.5175; val_global_loss: 269353.7812; val_optim_loss: 269353.7812
Epoch 57/100 |███████████---------| 57.0% val_auroc_score: 0.8369; val_auprc_score: 0.8260; val_best_acc_score: 0.7622; val_best_f1_score: 0.7782; train_kl_reg_loss: 42.7228; train_edge_recon_loss: 48181.4375; train_gene_expr_recon_loss: 224026.3661; train_lambda_latent_adj_recon_loss: 33982.4883; train_lambda_latent_contrastive_instanceloss: 7.1715; train_lambda_latent_contrastive_clusterloss: 2.7457; train_global_loss: 306242.9286; train_optim_loss: 306242.9286; val_kl_reg_loss: 34.2269; val_edge_recon_loss: 35639.0273; val_gene_expr_recon_loss: 219711.1875; val_lambda_latent_adj_recon_loss: 26027.3926; val_lambda_latent_contrastive_instanceloss: 6.9949; val_lambda_latent_contrastive_clusterloss: 2.5047; val_global_loss: 281421.3438; val_optim_loss: 281421.3438
Epoch 58/100 |███████████---------| 58.0% val_auroc_score: 0.8330; val_auprc_score: 0.8211; val_best_acc_score: 0.7581; val_best_f1_score: 0.7746; train_kl_reg_loss: 42.8373; train_edge_recon_loss: 48137.0290; train_gene_expr_recon_loss: 222621.7723; train_lambda_latent_adj_recon_loss: 34723.0787; train_lambda_latent_contrastive_instanceloss: 7.1693; train_lambda_latent_contrastive_clusterloss: 2.7285; train_global_loss: 305534.6116; train_optim_loss: 305534.6116; val_kl_reg_loss: 34.3101; val_edge_recon_loss: 35782.0859; val_gene_expr_recon_loss: 214601.4531; val_lambda_latent_adj_recon_loss: 26059.0703; val_lambda_latent_contrastive_instanceloss: 6.9788; val_lambda_latent_contrastive_clusterloss: 2.4923; val_global_loss: 276486.3750; val_optim_loss: 276486.3750
Epoch 59/100 |███████████---------| 59.0% val_auroc_score: 0.8380; val_auprc_score: 0.8276; val_best_acc_score: 0.7613; val_best_f1_score: 0.7783; train_kl_reg_loss: 42.7237; train_edge_recon_loss: 48208.9378; train_gene_expr_recon_loss: 222037.3103; train_lambda_latent_adj_recon_loss: 34672.7143; train_lambda_latent_contrastive_instanceloss: 7.2054; train_lambda_latent_contrastive_clusterloss: 2.7951; train_global_loss: 304971.6920; train_optim_loss: 304971.6920; val_kl_reg_loss: 33.7647; val_edge_recon_loss: 35606.7578; val_gene_expr_recon_loss: 213213.0938; val_lambda_latent_adj_recon_loss: 25795.8945; val_lambda_latent_contrastive_instanceloss: 6.9955; val_lambda_latent_contrastive_clusterloss: 2.5112; val_global_loss: 274659.0312; val_optim_loss: 274659.0312
Epoch 60/100 |████████████--------| 60.0% val_auroc_score: 0.8338; val_auprc_score: 0.8257; val_best_acc_score: 0.7596; val_best_f1_score: 0.7747; train_kl_reg_loss: 42.9046; train_edge_recon_loss: 48189.8432; train_gene_expr_recon_loss: 221218.0201; train_lambda_latent_adj_recon_loss: 34772.9671; train_lambda_latent_contrastive_instanceloss: 7.1738; train_lambda_latent_contrastive_clusterloss: 2.7334; train_global_loss: 304233.6384; train_optim_loss: 304233.6384; val_kl_reg_loss: 34.1113; val_edge_recon_loss: 35722.2734; val_gene_expr_recon_loss: 212676.4375; val_lambda_latent_adj_recon_loss: 26888.1465; val_lambda_latent_contrastive_instanceloss: 6.9869; val_lambda_latent_contrastive_clusterloss: 2.4974; val_global_loss: 275330.4688; val_optim_loss: 275330.4688

Reducing learning rate: metric has not improved more than 0.0 in the last 4 epochs.
New learning rate is 1.0000000000000002e-06.

Epoch 61/100 |████████████--------| 61.0% val_auroc_score: 0.8329; val_auprc_score: 0.8244; val_best_acc_score: 0.7586; val_best_f1_score: 0.7761; train_kl_reg_loss: 42.3760; train_edge_recon_loss: 48184.2134; train_gene_expr_recon_loss: 223340.9576; train_lambda_latent_adj_recon_loss: 33759.9838; train_lambda_latent_contrastive_instanceloss: 7.1911; train_lambda_latent_contrastive_clusterloss: 2.7720; train_global_loss: 305337.5089; train_optim_loss: 305337.5089; val_kl_reg_loss: 34.0697; val_edge_recon_loss: 35748.6211; val_gene_expr_recon_loss: 217970.9844; val_lambda_latent_adj_recon_loss: 26775.2988; val_lambda_latent_contrastive_instanceloss: 7.0021; val_lambda_latent_contrastive_clusterloss: 2.4993; val_global_loss: 280538.4688; val_optim_loss: 280538.4688
Epoch 62/100 |████████████--------| 62.0% val_auroc_score: 0.8309; val_auprc_score: 0.8209; val_best_acc_score: 0.7560; val_best_f1_score: 0.7747; train_kl_reg_loss: 42.7414; train_edge_recon_loss: 48170.2681; train_gene_expr_recon_loss: 223712.7076; train_lambda_latent_adj_recon_loss: 34574.0792; train_lambda_latent_contrastive_instanceloss: 7.1705; train_lambda_latent_contrastive_clusterloss: 2.7326; train_global_loss: 306509.7098; train_optim_loss: 306509.7098; val_kl_reg_loss: 34.1674; val_edge_recon_loss: 35765.9414; val_gene_expr_recon_loss: 215290.8906; val_lambda_latent_adj_recon_loss: 25904.3828; val_lambda_latent_contrastive_instanceloss: 6.9824; val_lambda_latent_contrastive_clusterloss: 2.4866; val_global_loss: 277004.8438; val_optim_loss: 277004.8438
Epoch 63/100 |████████████--------| 63.0% val_auroc_score: 0.8342; val_auprc_score: 0.8229; val_best_acc_score: 0.7582; val_best_f1_score: 0.7753; train_kl_reg_loss: 42.6247; train_edge_recon_loss: 48088.6984; train_gene_expr_recon_loss: 223727.2812; train_lambda_latent_adj_recon_loss: 34476.7595; train_lambda_latent_contrastive_instanceloss: 7.1786; train_lambda_latent_contrastive_clusterloss: 2.7360; train_global_loss: 306345.2723; train_optim_loss: 306345.2723; val_kl_reg_loss: 34.2974; val_edge_recon_loss: 35710.5469; val_gene_expr_recon_loss: 214646.3906; val_lambda_latent_adj_recon_loss: 26040.3711; val_lambda_latent_contrastive_instanceloss: 7.1091; val_lambda_latent_contrastive_clusterloss: 2.6502; val_global_loss: 276441.3438; val_optim_loss: 276441.3438
Epoch 64/100 |████████████--------| 64.0% val_auroc_score: 0.8306; val_auprc_score: 0.8215; val_best_acc_score: 0.7548; val_best_f1_score: 0.7706; train_kl_reg_loss: 42.8256; train_edge_recon_loss: 48144.0265; train_gene_expr_recon_loss: 220126.0826; train_lambda_latent_adj_recon_loss: 34296.0251; train_lambda_latent_contrastive_instanceloss: 7.1476; train_lambda_latent_contrastive_clusterloss: 2.6904; train_global_loss: 302618.7946; train_optim_loss: 302618.7946; val_kl_reg_loss: 34.0631; val_edge_recon_loss: 35817.1523; val_gene_expr_recon_loss: 211612.9062; val_lambda_latent_adj_recon_loss: 26128.9062; val_lambda_latent_contrastive_instanceloss: 6.9961; val_lambda_latent_contrastive_clusterloss: 2.4868; val_global_loss: 273602.5312; val_optim_loss: 273602.5312

Stopping early: metric has not improved more than 0.0 in the last 8 epochs.
If the early stopping criterion is too strong, please instantiate it with different parameters in the train method.
Model training finished after 1 min 40 sec.
Using best model state, which was in epoch 56.

--- MODEL EVALUATION ---
val AUROC score: 0.8331
val AUPRC score: 0.8242
val best accuracy score: 0.7534
val best F1 score: 0.7722
val MSE score: 10.7047
[13]:
# Compute latent neighbor graph
latent_key = 'garfield_latent'
sc.pp.neighbors(model.adata,
                use_rep=latent_key,
                key_added=latent_key)
# Compute UMAP embedding
sc.tl.umap(model.adata,
           neighbors_key=latent_key)
[14]:
# Compute latent Leiden clustering
latent_leiden_resolution = 0.5
latent_cluster_key = f"latent_leiden_{str(latent_leiden_resolution)}"
latent_key = "garfield_latent"

sc.tl.leiden(adata=model.adata,
             resolution=latent_leiden_resolution,
             key_added=latent_cluster_key,
             neighbors_key=latent_key)
len(model.adata.obs[latent_cluster_key].unique())
[14]:
14
[15]:
import squidpy as sq
sc.settings.set_figure_params(dpi=100, facecolor='white')

sq.pl.spatial_scatter(model.adata, color=latent_cluster_key, shape=None, figsize=(6, 6))
WARNING: Please specify a valid `library_id` or set it permanently in `adata.uns['spatial']`
../_images/tutorial_06.Garfield_spMulti_mouse_brain_17_1.png

Visualize Garfield Latent Space

[16]:
model.adata.obsm['spatial'][:, 0] *= -1  # 翻转 x 坐标
model.adata.obsm['spatial'][:, 1] *= -1  # 翻转 y 坐标
[19]:
sc.settings.set_figure_params(dpi=100, facecolor='white')

sc.pl.embedding(model.adata, basis='spatial', color=latent_cluster_key,
                title='Garfield Niches', s=10, show=False)
[19]:
<Axes: title={'center': 'Garfield Niches'}, xlabel='spatial1', ylabel='spatial2'>
../_images/tutorial_06.Garfield_spMulti_mouse_brain_20_1.png

Save trained model

[48]:
model_folder_path = f"{workdir}/model"
os.makedirs(model_folder_path, exist_ok=True)

del model.adata.obsm['feat']
model.save(dir_path=model_folder_path,
           overwrite=True,
           save_adata=True,
           adata_file_name="adata_ref.h5ad")
Pickle failed with error: Can't pickle local object 'WeakSet.__init__.<locals>._remove', switching to dill...
Model saved successfully using dill at /pri_exthome/zhouwg/project/Garfield_benchmark/results/sp_multimodal/mouse_brain/model/attr.pkl
[5]:
from Garfield.model import Garfield

workdir = '/pri_exthome/zhouwg/project/Garfield_benchmark/results/sp_multimodal/mouse_brain'
gf.settings.set_workdir(workdir)
model_folder_path = f"{workdir}/model"

model = Garfield.load(dir_path=model_folder_path,
              adata_file_name="adata_ref.h5ad")
Saving results in: /pri_exthome/zhouwg/project/Garfield_benchmark/results/sp_unimodal/spRNA_slideseqv2
Model loaded successfully using pickle from /pri_exthome/zhouwg/project/Garfield_benchmark/results/sp_unimodal/spRNA_slideseqv2/model/attr.pkl
AnnData object with n_obs × n_vars = 41786 × 3000
    obs: 'cell_type', 'n_genes', 'latent_leiden_0.5', 'latent_leiden_0.8'
    var: 'n_cells', 'highly_variable', 'means', 'dispersions', 'dispersions_norm', 'mean', 'std'
    uns: 'cell_type_colors', 'garfield_latent', 'hvg', 'latent_leiden_0.5', 'latent_leiden_0.5_colors', 'latent_leiden_0.8', 'latent_leiden_0.8_colors', 'log1p', 'neighbors', 'pca', 'umap'
    obsm: 'X_pca', 'X_umap', 'feat', 'garfield_latent', 'spatial'
    varm: 'PCs'
    layers: 'counts', 'norm_data'
    obsp: 'connectivities', 'distances', 'garfield_latent_connectivities', 'garfield_latent_distances', 'spatial_connectivities'
--- DATA LOADING AND PREPROCESSING ---
COSINE SIM GRAPH DECODER -> dropout_rate: 0.2
[ ]: