Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
186 commits
Select commit Hold shift + click to select a range
4073022
memorymapping
magana272 Apr 14, 2026
6b7a427
n_trials smaller
magana272 Apr 14, 2026
51e05cf
batchsize: smaller
magana272 Apr 14, 2026
af8d5b2
batchsize: smaller
magana272 Apr 14, 2026
02fa957
batchsize: smaller
magana272 Apr 14, 2026
e7b7b3a
loader: dont move entire dataset to gpu
magana272 Apr 14, 2026
b04d81f
optimizer
magana272 Apr 14, 2026
b8e2690
optimizer
magana272 Apr 14, 2026
4a4bf82
optimizer
magana272 Apr 14, 2026
0024fe9
thread, and faster dataloader
magana272 Apr 14, 2026
32dff48
thread: or not to thread
magana272 Apr 14, 2026
4446c9b
thread: remove on copy
magana272 Apr 14, 2026
b1b250a
numworkers reduced
magana272 Apr 14, 2026
770b2f7
fix: load
magana272 Apr 14, 2026
3d6bc39
fix: train builder
magana272 Apr 14, 2026
e681d66
fix: train builder
magana272 Apr 14, 2026
d7d8d77
fix: train builder
magana272 Apr 14, 2026
ef53e49
RUN IN GOOGLE COLAB
magana272 Apr 14, 2026
5228e61
update batch and epock
magana272 Apr 14, 2026
19a87cb
Merge branch 'experiment' of https://github.com/magana272/CellTypeCla…
magana272 Apr 14, 2026
85f0508
Requirements
magana272 Apr 14, 2026
b79424b
fix
magana272 Apr 15, 2026
0364ee1
preload all on GPU
magana272 Apr 15, 2026
7809eff
preload all on GPU
magana272 Apr 15, 2026
5090f33
preload all on GPU
magana272 Apr 15, 2026
11694ef
increase batch size
magana272 Apr 15, 2026
6df9b62
back to cpu bound
magana272 Apr 15, 2026
8c8795b
remove double to
magana272 Apr 15, 2026
ec8a717
simplify CNN
magana272 Apr 15, 2026
b35c154
estimate size
magana272 Apr 15, 2026
fb6be66
samll batch
magana272 Apr 15, 2026
08cbd53
one trail
magana272 Apr 15, 2026
d8bdd9a
SGD
magana272 Apr 15, 2026
921abbb
larger batch size
magana272 Apr 15, 2026
c6eb4db
larger batch and more trials
magana272 Apr 15, 2026
4d6741d
shrick model
magana272 Apr 15, 2026
77c971f
increase model size
magana272 Apr 15, 2026
2d8efeb
integratepreprocessing
magana272 Apr 15, 2026
180381d
transformer gets all genes
magana272 Apr 15, 2026
1cf08b4
update batch size and hps
magana272 Apr 15, 2026
4f0cb23
cell search hyperparameter
magana272 Apr 15, 2026
a86eec8
cell search hyperparameter
magana272 Apr 15, 2026
0fcb169
hyperparamter tuning and cross dataset eval
magana272 Apr 15, 2026
b90ba44
update epoch
magana272 Apr 15, 2026
1ec1271
modelstate change
magana272 Apr 15, 2026
b121499
Merge branch 'experiment' of https://github.com/magana272/Cell-Type-C…
magana272 Apr 15, 2026
718190c
Run_the_models
magana272 Apr 15, 2026
03217fc
cuda failing in some env
magana272 Apr 15, 2026
17cb3dc
Merge branch 'experiment' of https://github.com/magana272/Cell-Type-C…
magana272 Apr 15, 2026
06c8af6
log epoch and fix cuda error
magana272 Apr 15, 2026
09e4d5b
remove prgress bar
magana272 Apr 15, 2026
80b741f
faiss: can't see to get to work with cuda13
magana272 Apr 15, 2026
762ae10
knn work around
magana272 Apr 15, 2026
a2f81c4
knn work around
magana272 Apr 15, 2026
2b44cde
fix defualting
magana272 Apr 15, 2026
4106bf8
torch knn
magana272 Apr 15, 2026
2aec8a7
torch knn
magana272 Apr 15, 2026
526167c
tensor knn
magana272 Apr 15, 2026
b14423e
tensor knn
magana272 Apr 15, 2026
eaf41b9
bottleneck
magana272 Apr 15, 2026
eab19be
hidden dim
magana272 Apr 15, 2026
7f2c799
hps graph
magana272 Apr 15, 2026
a4314a7
more trials
magana272 Apr 15, 2026
f4596d4
gnn model state fix
magana272 Apr 16, 2026
e811adc
saveing results, comparison, and interpert ability
magana272 Apr 16, 2026
c393895
visualize of 10x dataset
magana272 Apr 16, 2026
1a828b0
larger batch size
magana272 Apr 16, 2026
00599ef
visulization updates, rich requirement, gpu preprocessing
magana272 Apr 16, 2026
9878aaf
git normalization is a hyper parameter, also remove print.
magana272 Apr 16, 2026
190d652
must be float
magana272 Apr 16, 2026
18f7f90
Final workflow
magana272 Apr 16, 2026
4221af1
increase trails
magana272 Apr 16, 2026
0c08bd3
Merge branch 'experiment' of https://github.com/magana272/Cell-Type-C…
magana272 Apr 16, 2026
c9735cd
increase transformer batch
magana272 Apr 16, 2026
a5f9a61
increase epoch and trail
magana272 Apr 16, 2026
1879eca
lower the patience
magana272 Apr 16, 2026
899e373
smaller epoch and lower the patience
magana272 Apr 16, 2026
6523bd4
move to gpu and fix epoch size
magana272 Apr 16, 2026
8cd055d
hyper search fix
magana272 Apr 16, 2026
12542f1
batch size
magana272 Apr 16, 2026
caa477b
fix batch
magana272 Apr 16, 2026
7ea4e77
smaller search
magana272 Apr 16, 2026
cee947d
opt tran
magana272 Apr 16, 2026
2846b85
narrow search space
magana272 Apr 16, 2026
7cffcff
narrow search space
magana272 Apr 16, 2026
9afb1ed
tune epoch
magana272 Apr 16, 2026
e87f54c
fix transformer hyper paramter
magana272 Apr 16, 2026
327212e
increase batch
magana272 Apr 16, 2026
4180d30
decrease trial
magana272 Apr 16, 2026
532b6f8
increase batch
magana272 Apr 16, 2026
d2ce2f8
trans
magana272 Apr 16, 2026
adfb2e5
norm error
magana272 Apr 16, 2026
9b098da
workers
magana272 Apr 16, 2026
438ec93
figures
magana272 Apr 16, 2026
ecfa9b4
threads
magana272 Apr 16, 2026
4de85f0
mlp fix
magana272 Apr 16, 2026
a62e38c
results
magana272 Apr 16, 2026
aeaa9db
unkown cell
magana272 Apr 16, 2026
f3c1cb6
unkown cell
magana272 Apr 16, 2026
bcbbfb2
unkown pipeline
magana272 Apr 16, 2026
b614c48
umap embedding result
magana272 Apr 16, 2026
58e254b
Created using Colab
magana272 Apr 16, 2026
30f8cfd
no norm
magana272 Apr 16, 2026
1d090ec
Merge branch 'experiment' of https://github.com/magana272/Cell-Type-C…
magana272 Apr 16, 2026
3912fbe
experiment
magana272 Apr 16, 2026
4d8a388
test test
magana272 Apr 16, 2026
4c881db
tos
magana272 Apr 16, 2026
02d58d2
Created using Colab
magana272 Apr 18, 2026
1df25dd
Default model comparison
magana272 Apr 18, 2026
0274dc9
Merge branch 'experiment' of https://github.com/magana272/Cell-Type-C…
magana272 Apr 18, 2026
757549d
import error
magana272 Apr 18, 2026
58dbe6e
imports
magana272 Apr 18, 2026
9b3a54f
im
magana272 Apr 18, 2026
5cb9b41
import
magana272 Apr 18, 2026
0845e4c
TOSICA: models integrated
magana272 Apr 18, 2026
c446cd4
TOSICA: models integrated
magana272 Apr 18, 2026
1822de0
ana data
magana272 Apr 18, 2026
02e41cd
dense
magana272 Apr 18, 2026
d56fc65
adata:load and add meta data
magana272 Apr 18, 2026
ca142c4
h5ad file
magana272 Apr 18, 2026
f080aec
print
magana272 Apr 18, 2026
700077e
split kills ram
magana272 Apr 18, 2026
4e1a44b
split
magana272 Apr 18, 2026
0aeeeec
oom err
magana272 Apr 18, 2026
5f55af5
oom: error
magana272 Apr 18, 2026
f3fe5fe
sample
magana272 Apr 18, 2026
f0f2431
path
magana272 Apr 18, 2026
a6c848c
path
magana272 Apr 18, 2026
ca338c8
gene
magana272 Apr 18, 2026
77a1484
batch
magana272 Apr 18, 2026
809a338
batch size
magana272 Apr 18, 2026
2905acc
batch size
magana272 Apr 18, 2026
e8e54e6
batch size
magana272 Apr 18, 2026
fcf41ba
batch size
magana272 Apr 18, 2026
e6b93f4
batch size
magana272 Apr 18, 2026
2c8dad4
batch size
magana272 Apr 18, 2026
41e691c
batch size
magana272 Apr 18, 2026
58fe188
batch size
magana272 Apr 18, 2026
0e9aaf0
batch size
magana272 Apr 18, 2026
6e00b8f
originalmodel
magana272 Apr 18, 2026
078b7c0
cuda error
magana272 Apr 18, 2026
b167002
Merge branch 'experiment' of https://github.com/magana272/Cell-Type-C…
magana272 Apr 18, 2026
bf7f683
model comp
magana272 Apr 18, 2026
82174a2
model comp
magana272 Apr 18, 2026
bdb0a19
refactor
magana272 Apr 18, 2026
e0ebd47
label
magana272 Apr 18, 2026
de385c4
refactored
magana272 Apr 18, 2026
3cd6a62
done
magana272 Apr 18, 2026
ba2fbf1
done
magana272 Apr 18, 2026
8f466c8
refactor
magana272 Apr 19, 2026
3141cda
validate
magana272 Apr 19, 2026
f57d584
data
magana272 Apr 19, 2026
f146024
datasets
magana272 Apr 19, 2026
b2533db
update
magana272 Apr 19, 2026
1d9de6a
fixed link
magana272 Apr 19, 2026
0c5dc97
mbrain
magana272 Apr 19, 2026
895def3
mbrain
magana272 Apr 19, 2026
a3afaed
fixed
magana272 Apr 19, 2026
766956d
brain
magana272 Apr 19, 2026
8745af0
brain
magana272 Apr 19, 2026
431c820
brain
magana272 Apr 19, 2026
b86f331
pickle error
magana272 Apr 19, 2026
c66f77c
download
magana272 Apr 19, 2026
4f71790
sparse
magana272 Apr 19, 2026
49f1162
sparse error
magana272 Apr 19, 2026
baf9029
sparse error
magana272 Apr 19, 2026
328506a
m
magana272 Apr 19, 2026
f23dfbf
test
magana272 Apr 19, 2026
6bec188
nvg
magana272 Apr 19, 2026
8f5355c
HVG
magana272 Apr 19, 2026
de69fad
equal learning rates
magana272 Apr 19, 2026
05b7df0
error fix
magana272 Apr 20, 2026
7824e8c
error import
magana272 Apr 20, 2026
6116428
fixed
magana272 Apr 20, 2026
8d2d108
atten error
magana272 Apr 20, 2026
5fa4049
balanced population
magana272 Apr 20, 2026
709fd76
hvg
magana272 Apr 20, 2026
2d5b2f7
batch size
magana272 Apr 20, 2026
bdf901d
don't need pos encoding
magana272 Apr 20, 2026
5b49f87
reactome
magana272 Apr 20, 2026
4af2f37
mouse
magana272 Apr 20, 2026
ac795a7
save results
magana272 Apr 20, 2026
e3ad2e9
run all
magana272 Apr 20, 2026
775708f
reorder script
magana272 Apr 20, 2026
815deca
increase batch size
magana272 Apr 20, 2026
8da9c6b
Created using Colab
magana272 Apr 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,5 @@ __pycache__
*.pt
/data/*
/logs/*
**/figures/*
**/runs/*
.DS_Store
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "TOSICA"]
path = TOSICA
url = https://github.com/JackieHanLab/TOSICA.git
23 changes: 21 additions & 2 deletions 1_download.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,26 @@
"""Download all datasets and process into train/val/test .npy splits."""

from allen_brain.TOSICA.train import set_seed
from allen_brain.cell_data.cell_download import download_data
from allen_brain.cell_data.cell_load import load_10x, load_smartseq
from allen_brain.data_sets import TOSICA_DATASETS


def main():
# Download raw files (CSVs + h5ad)
download_data()


load_10x()
load_smartseq()

# TOSICA benchmark datasets (hPancreas, mPancreas, mAtlas)
set_seed(1)
for name, mod in TOSICA_DATASETS.items():
try:
mod.setup()
except Exception as e:
print(f'[WARN] {name}: {e}')


if __name__ == '__main__':
main()
main()
9 changes: 0 additions & 9 deletions 2_10x_create_npyfile.py

This file was deleted.

9 changes: 0 additions & 9 deletions 2_smartseq_create_npyfile.py

This file was deleted.

91 changes: 91 additions & 0 deletions 2_visualize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
"""
3_visualize.py
Visualize both 10x and SmartSeq datasets.
Generates: class distribution, PCA, UMAP, heatmap, violin, and CV^2 plots.
All figures are saved under figures/*.png.
"""
import os

from rich.console import Console
from rich.panel import Panel

from allen_brain.TOSICA.train import set_seed
from allen_brain.cell_data.cell_dataset import make_dataset
from allen_brain.cell_data.cell_load import ALL_DATASETS
from allen_brain.cell_data.cell_vis import DatasetVisualizer

SEED = 1
console = Console()

DATASETS = [(info['dir'], name) for name, info in ALL_DATASETS.items()]


def run_visualizations(data_dir: str, tag: str):
set_seed(SEED)
"""Run the full visualization suite for one dataset."""
if not (os.path.exists(os.path.join(data_dir, 'X_train.npy'))
or os.path.exists(os.path.join(data_dir, 'X_train.npz'))):
console.print(f" [yellow]No data for {tag}, skipping[/yellow]")
return

console.print(Panel(
f"[bold]{tag.upper()}[/bold] · {data_dir}",
title="Dataset", border_style="cyan", expand=False,
))

train_ds = make_dataset(data_dir, split="train")
if train_ds is None:
console.print(f" [yellow]No train split found for {tag}[/yellow], loading full matrix ...")
train_ds = make_dataset(data_dir)
if train_ds is None:
console.print(f" [bold red]\\[SKIP][/bold red] No data found in {data_dir}")
return

gene_names = train_ds.gene_names
fig_dir = "figures"
vis = DatasetVisualizer(train_ds, fig_dir=fig_dir, seed=SEED)

vis.plot_class_distribution(
save_path=os.path.join(fig_dir, f"{tag}_class_distribution.png"),
)

pca, X_pca = vis.plot_pca(
n_components=20,
save_path=fig_dir,
file_name=f"{tag}_pca.png",
)

vis.plot_umap(
X_pca,
max_cells=6000,
save_path=os.path.join(fig_dir, f"{tag}_umap.png"),
)

vis.plot_heatmap(
gene_names=gene_names,
n_genes=20,
save_path=os.path.join(fig_dir, f"{tag}_heatmap.png"),
)

vis.plot_violin(
gene_names=gene_names,
top_n=6,
save_path=os.path.join(fig_dir, f"{tag}_violin.png"),
)

vis.plot_cv2(
gene_names=gene_names,
n_top=1000,
save_path=os.path.join(fig_dir, f"{tag}_cv2.png"),
)


def main():
set_seed(SEED)
for data_dir, tag in DATASETS:
run_visualizations(data_dir, tag)
console.print("\nAll visualizations complete.")


if __name__ == "__main__":
main()
68 changes: 68 additions & 0 deletions 3_CNN.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import math
import os
import pickle

import numpy as np
import torch
import torch.optim as optim
import torch.optim.lr_scheduler as lr_scheduler

from allen_brain.TOSICA.train import set_seed
from allen_brain.models import train as T
from allen_brain.models.config import ExperimentConfig

DATA_DIR = 'data/mPancreas'
SEED = 1
BATCH_SIZE = 16384
N_HVG = 10000
EPOCHS = 20
LR = 0.001
LRF = 0.01
NORMALIZE = 'None'

cfg = ExperimentConfig(
model='CellTypeCNN',
seed=SEED,
batch_size=BATCH_SIZE,
n_hvg=N_HVG,
epochs=EPOCHS,
normalize=NORMALIZE,
)


def main() -> None:
set_seed(SEED)
trainer = T.Trainer(cfg)
train_loader, val_loader, hvg_idx, scaler = trainer.make_dataloaders(
DATA_DIR, n_hvg=N_HVG, normalize=NORMALIZE)
ds = train_loader.dataset

model = T.build_model('CellTypeCNN', len(ds.gene_names), ds.n_classes)

criterion = torch.nn.CrossEntropyLoss()
pg = [p for p in model.parameters() if p.requires_grad]
optimizer = optim.SGD(pg, lr=LR, momentum=0.9, weight_decay=5E-5)
lf = lambda x: ((1 + math.cos(x * math.pi / EPOCHS)) / 2) * (1 - LRF) + LRF
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)

writer, ckpt = T.make_writer_and_ckpt(cfg, len(ds.gene_names))
ckpt_dir = os.path.dirname(ckpt)
T._save_model_kwargs(ckpt_dir, {})
if hvg_idx is not None:
np.save(os.path.join(ckpt_dir, 'hvg_indices.npy'), hvg_idx)
if scaler is not None:
with open(os.path.join(ckpt_dir, 'scaler.pkl'), 'wb') as f:
pickle.dump(scaler, f)
with open(os.path.join(ckpt_dir, 'normalize.txt'), 'w') as f:
f.write(NORMALIZE)

T.print_header()
T.train(model, (train_loader, val_loader), criterion, optimizer, scheduler,
EPOCHS, writer, ckpt, squeeze_channel=False)

metrics = trainer.evaluate(DATA_DIR, ckpt, squeeze_channel=False)
T.append_results_csv('CNN', metrics)


if __name__ == '__main__':
main()
66 changes: 66 additions & 0 deletions 3_GNN.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import math
import os

import numpy as np
import torch
import torch.optim as optim
import torch.optim.lr_scheduler as lr_scheduler

from allen_brain.TOSICA.train import set_seed
from allen_brain.models import train as T
from allen_brain.models.config import ExperimentConfig
from allen_brain.models.gnn_train import GraphTrainer, train_graph
from allen_brain.models.CellTypeGNN import GraphBuilder

DATA_DIR = 'data/mPancreas'
SEED = 42
BATCH_SIZE = 256
K_NEIGHBORS = 10
EPOCHS = 20
LR = 0.001
LRF = 0.01
N_HVG = 10000
NORMALIZE = 'None'

cfg = ExperimentConfig(
model='CellTypeGNN',
seed=SEED,
batch_size=BATCH_SIZE,
n_hvg=0,
epochs=EPOCHS,
k_neighbors=K_NEIGHBORS,
normalize=NORMALIZE,
)


def main() -> None:
set_seed(SEED)
gb = GraphBuilder(k_neighbors=K_NEIGHBORS, normalize=NORMALIZE)
data = gb.build_graph_data(DATA_DIR, n_hvg=N_HVG).to(T.DEVICE)
n_classes: int = int(data.y.max().item()) + 1
class_names: list[str] = list(np.load(f'{DATA_DIR}/class_names.npy', allow_pickle=True))
n_features: int = data.x.shape[1]

model = T.build_model('CellTypeGNN', n_features, n_classes)

criterion = torch.nn.CrossEntropyLoss()
pg = [p for p in model.parameters() if p.requires_grad]
optimizer = optim.SGD(pg, lr=LR, momentum=0.9, weight_decay=5E-5)
lf = lambda x: ((1 + math.cos(x * math.pi / EPOCHS)) / 2) * (1 - LRF) + LRF
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)

writer, ckpt = T.make_writer_and_ckpt(cfg, n_features)
T._save_model_kwargs(os.path.dirname(ckpt), {})

T.print_header()
train_graph(model, data, criterion, optimizer, scheduler,
EPOCHS, writer, ckpt)

trainer = GraphTrainer(cfg)
metrics = trainer.evaluate(data, ckpt, n_features, n_classes,
class_names=class_names)
T.append_results_csv('GNN', metrics)


if __name__ == '__main__':
main()
69 changes: 69 additions & 0 deletions 3_MLP.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import math
import os
import pickle

import numpy as np
import torch
import torch.optim as optim
import torch.optim.lr_scheduler as lr_scheduler

from allen_brain.TOSICA.train import set_seed
from allen_brain.models import train as T
from allen_brain.models.config import ExperimentConfig

DATA_DIR = 'data/mPancreas'
SEED = 1
BATCH_SIZE = 8192
EPOCHS = 20
LR = 0.01
LRF = 0.01
N_HVG = 10000
NORMALIZE = 'None'

cfg = ExperimentConfig(
model='CellTypeMLP',
seed=SEED,
batch_size=BATCH_SIZE,
epochs=EPOCHS,
normalize=NORMALIZE,
lr=LR,

)


def main() -> None:
set_seed(SEED)
trainer = T.Trainer(cfg)
train_loader, val_loader, hvg_idx, scaler = trainer.make_dataloaders(
DATA_DIR, n_hvg=N_HVG, normalize=NORMALIZE)
ds = train_loader.dataset

model = T.build_model('CellTypeMLP', len(ds.gene_names), ds.n_classes)

criterion = torch.nn.CrossEntropyLoss()
pg = [p for p in model.parameters() if p.requires_grad]
optimizer = optim.SGD(pg, lr=LR, momentum=0.9, weight_decay=5E-5)
lf = lambda x: ((1 + math.cos(x * math.pi / EPOCHS)) / 2) * (1 - LRF) + LRF
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)

writer, ckpt = T.make_writer_and_ckpt(cfg, len(ds.gene_names))
ckpt_dir = os.path.dirname(ckpt)
T._save_model_kwargs(ckpt_dir, {})
if hvg_idx is not None:
np.save(os.path.join(ckpt_dir, 'hvg_indices.npy'), hvg_idx)
if scaler is not None:
with open(os.path.join(ckpt_dir, 'scaler.pkl'), 'wb') as f:
pickle.dump(scaler, f)
with open(os.path.join(ckpt_dir, 'normalize.txt'), 'w') as f:
f.write(NORMALIZE)

T.print_header()
T.train(model, (train_loader, val_loader), criterion, optimizer, scheduler,
EPOCHS, writer, ckpt, squeeze_channel=True)

metrics = trainer.evaluate(DATA_DIR, ckpt, squeeze_channel=True)
T.append_results_csv('MLP', metrics)


if __name__ == '__main__':
main()
Loading