import numpy as np import scanpy as sc import scvi import torch torch.set_float32_matmul_precision("high") adata = sc.read_h5ad("/home/ubuntu/data/merged.h5ad") scvi.model.LinearSCVI.setup_anndata( adata, layer=None, batch_key="batch" ) model = scvi.model.LinearSCVI( adata, n_latent=50, latent_distribution="ln", use_batch_norm=True, ) model.train( max_epochs=200, early_stopping=True, early_stopping_patience=2, batch_size=16_834, load_sparse_tensor=True, plan_kwargs={ "lr": 1e-3, "n_epochs_kl_warmup": 2, }, datasplitter_kwargs={ "pin_memory": False, }, accelerator="gpu", ) train_elbo = model.history["elbo_train"][1:] test_elbo = model.history["elbo_validation"] np.save('train_elbo.npy', np.array(train_elbo)) np.save('test_elbo.npy', np.array(test_elbo)) z_hat = model.get_latent_representation() np.save('latent_representation.npy', z_hat.cpu().numpy() if isinstance(z_hat, torch.Tensor) else np.array(z_hat)) loadings = model.get_loadings() loadings.to_csv("loadings.tsv", sep='\t')