diff --git a/.gitignore b/.gitignore index 7cba4c5..308b463 100644 --- a/.gitignore +++ b/.gitignore @@ -199,3 +199,6 @@ models/abl/ models/qwen2.5-7b-instruct/ models/**/*.sqlite3tests/ models/**/*.sqlite3 + +models/biot5-plus-base/ +data/processed/*.npz diff --git a/chemeleon_fingerprint.py b/chemeleon_fingerprint.py new file mode 100644 index 0000000..f7a9cc7 --- /dev/null +++ b/chemeleon_fingerprint.py @@ -0,0 +1,63 @@ +# chemeleon_fingerprint.py +# +# this file contains the class CheMeleonFingerprint which can be instantiated +# and called to generate the CheMeleon learned embeddings for a list of SMILES +# strings and/or RDKit Mols. you may wish to simply copy or download this file directly for use, +# or adapt the code for your own purposes. No other files are required for it +# to work, though you must `pip install 'chemprop>=2.2.0'` for this to run. +# +# run `python chemeleon_fingerprint.py` for a quick usage demo, otherwise you +# should `import` the CheMeleonFingerprint class into your other code and use +# it there (following the example at the bottom of this file) to generate +# your learned fingerprints +from pathlib import Path +from urllib.request import urlretrieve + +import numpy as np +import torch +from chemprop import featurizers, nn +from chemprop.data import BatchMolGraph +from chemprop.models import MPNN +from chemprop.nn import RegressionFFN +from rdkit.Chem import Mol, MolFromSmiles + + +class CheMeleonFingerprint: + def __init__(self, device: str | torch.device | None = None): + self.featurizer = featurizers.SimpleMoleculeMolGraphFeaturizer() + agg = nn.MeanAggregation() + ckpt_dir = Path().home() / ".chemprop" + ckpt_dir.mkdir(exist_ok=True) + mp_path = ckpt_dir / "chemeleon_mp.pt" + if not mp_path.exists(): + urlretrieve( + r"https://zenodo.org/records/15460715/files/chemeleon_mp.pt", + mp_path, + ) + chemeleon_mp = torch.load(mp_path, weights_only=True) + mp = nn.BondMessagePassing(**chemeleon_mp["hyper_parameters"]) + mp.load_state_dict(chemeleon_mp["state_dict"]) + self.model = MPNN( + message_passing=mp, + agg=agg, + predictor=RegressionFFN(input_dim=mp.output_dim), # not actually used + ) + self.model.eval() + if device is not None: + self.model.to(device=device) + + def __call__(self, molecules: list[str | Mol]) -> np.ndarray: + bmg = BatchMolGraph( + [ + self.featurizer(MolFromSmiles(m) if isinstance(m, str) else m) + for m in molecules + ] + ) + bmg.to(device=self.model.device) + with torch.no_grad(): + return self.model.fingerprint(bmg).numpy(force=True) + + +if __name__ == "__main__": + chemeleon_fingerprint = CheMeleonFingerprint() + chemeleon_fingerprint(["C", "CC", MolFromSmiles("CCC")]) diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py index ee0d1d8..605a19b 100644 --- a/lnp_ml/interpretability/token_importance.py +++ b/lnp_ml/interpretability/token_importance.py @@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: - if model.use_mpnn: - names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] - else: - names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] + names = list(model.token_order) if getattr(model, "moe", None) is not None: names.append("moe") return names @@ -300,7 +297,8 @@ def plot_token_importance( vals_sorted = normed[order] n_tokens = len(token_names) - split_idx = 4 if "mpnn" in token_names else 3 + _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} + split_idx = sum(1 for n in token_names if n in _mol_tokens) channel_a_set = set(token_names[:split_idx]) colors = [color_a if n in channel_a_set else color_b for n in names_sorted] diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py index 6ac6b20..af9cba0 100644 --- a/lnp_ml/modeling/benchmark.py +++ b/lnp_ml/modeling/benchmark.py @@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN - +from lnp_ml.utils.seed import set_global_seed app = typer.Typer() @@ -172,6 +172,8 @@ def train_fold( early_stopping = EarlyStopping(patience=patience) best_val_loss = float("inf") + best_val_rmse = 0.0 + best_val_r2 = 0.0 best_state = None history = [] @@ -202,6 +204,8 @@ def train_fold( if val_metrics["loss"] < best_val_loss: best_val_loss = val_metrics["loss"] + best_val_rmse = val_metrics.get("rmse", 0) + best_val_r2 = val_metrics.get("r2", 0) best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} logger.info(f" -> New best val_loss: {best_val_loss:.4f}") @@ -239,8 +243,8 @@ def train_fold( return { "fold_idx": fold_idx, "best_val_loss": best_val_loss, - "best_val_rmse": history[-1]["val_rmse"] if history else 0, - "best_val_r2": history[-1]["val_r2"] if history else 0, + "best_val_rmse": best_val_rmse, + "best_val_r2": best_val_r2, "epochs_trained": len(history), } @@ -255,6 +259,8 @@ def create_model( use_mpnn: bool = False, mpnn_ensemble_paths: Optional[List[str]] = None, mpnn_device: str = "cpu", + chemeleon_cache: Optional[str] = None, + unimol_cache: Optional[str] = None, ) -> nn.Module: """创建模型实例""" if use_mpnn: @@ -267,6 +273,8 @@ def create_model( dropout=dropout, mpnn_ensemble_paths=mpnn_ensemble_paths, mpnn_device=mpnn_device, + chemeleon_cache_path=chemeleon_cache, + unimol_cache_path=unimol_cache, ) else: return LNPModelWithoutMPNN( @@ -276,6 +284,8 @@ def create_model( fusion_strategy=fusion_strategy, head_hidden_dim=head_hidden_dim, dropout=dropout, + chemeleon_cache_path=chemeleon_cache, + unimol_cache_path=unimol_cache, ) @@ -295,12 +305,18 @@ def main( mpnn_checkpoint: Optional[str] = None, mpnn_ensemble_paths: Optional[str] = None, mpnn_device: str = "cpu", + use_chemeleon: bool = False, + chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", + use_unimol: bool = False, + unimol_cache: str = "data/processed/unimol_embeddings.npz", # 训练参数 batch_size: int = 64, lr: float = 1e-4, weight_decay: float = 1e-5, epochs: int = 50, patience: int = 10, + # 随机种子 + seed: int = 42, # 设备 device: str = "cuda" if torch.cuda.is_available() else "cpu", ): @@ -311,6 +327,8 @@ def main( 使用 --use-mpnn 启用 MPNN encoder。 """ logger.info(f"Using device: {device}") + set_global_seed(seed) + logger.info(f"Global seed set to {seed}") device = torch.device(device) # 解析 MPNN 参数 @@ -349,6 +367,11 @@ def main( "dropout": dropout, "use_mpnn": use_mpnn, "mpnn_ensemble_paths": mpnn_paths, + "use_chemeleon": use_chemeleon, + "chemeleon_cache": chemeleon_cache if use_chemeleon else None, + "use_unimol": use_unimol, + "unimol_cache": unimol_cache if use_unimol else None, + "seed": seed, "lr": lr, "weight_decay": weight_decay, "batch_size": batch_size, @@ -405,6 +428,8 @@ def main( use_mpnn=use_mpnn, mpnn_ensemble_paths=mpnn_paths, mpnn_device=device.type, + chemeleon_cache=(chemeleon_cache if use_chemeleon else None), + unimol_cache=(unimol_cache if use_unimol else None), ) model = model.to(device) diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py index 2ab762a..eb78d5c 100644 --- a/lnp_ml/modeling/encoders/__init__.py +++ b/lnp_ml/modeling/encoders/__init__.py @@ -1,5 +1,11 @@ from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder +from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder +from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder -__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] - +__all__ = [ + "CachedRDKitEncoder", + "CachedMPNNEncoder", + "CheMeleonEmbeddingEncoder", + "UniMolEmbeddingEncoder", +] \ No newline at end of file diff --git a/lnp_ml/modeling/encoders/chemeleon_encoder.py b/lnp_ml/modeling/encoders/chemeleon_encoder.py new file mode 100644 index 0000000..f07f6a5 --- /dev/null +++ b/lnp_ml/modeling/encoders/chemeleon_encoder.py @@ -0,0 +1,48 @@ +"""CheMeleon 预计算指纹的查表编码器""" +from pathlib import Path +from typing import Dict, List + +import numpy as np +import torch +import torch.nn as nn + + +class CheMeleonEmbeddingEncoder(nn.Module): + """从预计算 .npz 缓存按 SMILES 查 CheMeleon 指纹,返回 {"chemeleon": [B, D]}。""" + + def __init__(self, cache_path: str) -> None: + super().__init__() + self.cache_path = str(cache_path) + self._table: Dict[str, np.ndarray] = {} + self._embed_dim: int = 0 + self._load() + + def _load(self) -> None: + path = Path(self.cache_path) + if not path.exists(): + raise FileNotFoundError( + f"CheMeleon 缓存不存在: {path}。请先运行 scripts/precompute_chemeleon.py。" + ) + data = np.load(path, allow_pickle=True) + embeddings = np.asarray(data["embeddings"], dtype=np.float32) + if embeddings.ndim != 2: + raise ValueError(f"embeddings 应为 2D,实际 {embeddings.shape}") + self._embed_dim = int(embeddings.shape[1]) + self._table = {str(s): embeddings[i] for i, s in enumerate(data["smiles"])} + + def forward(self, smiles_list: List[str]) -> Dict[str, torch.Tensor]: + missing = [s for s in smiles_list if s not in self._table] + if missing: + raise KeyError( + f"{len(missing)} 个 SMILES 不在 CheMeleon 缓存中,请重跑 precompute_chemeleon.py。" + f"示例: {missing[:3]}" + ) + mat = np.stack([self._table[s] for s in smiles_list]) + return {"chemeleon": torch.from_numpy(mat)} + + def clear_cache(self) -> None: + """查表器无临时缓存,仅为接口对齐。""" + + @property + def embed_dim(self) -> int: + return self._embed_dim \ No newline at end of file diff --git a/lnp_ml/modeling/encoders/unimol_encoder.py b/lnp_ml/modeling/encoders/unimol_encoder.py new file mode 100644 index 0000000..c35cf62 --- /dev/null +++ b/lnp_ml/modeling/encoders/unimol_encoder.py @@ -0,0 +1,48 @@ +"""UniMol 预计算表征的查表编码器""" +from pathlib import Path +from typing import Dict, List + +import numpy as np +import torch +import torch.nn as nn + + +class UniMolEmbeddingEncoder(nn.Module): + """从预计算 .npz 缓存按 SMILES 查 UniMol 表征,返回 {"unimol": [B, D]}。""" + + def __init__(self, cache_path: str) -> None: + super().__init__() + self.cache_path = str(cache_path) + self._table: Dict[str, np.ndarray] = {} + self._embed_dim: int = 0 + self._load() + + def _load(self) -> None: + path = Path(self.cache_path) + if not path.exists(): + raise FileNotFoundError( + f"UniMol 缓存不存在: {path}。请先运行 scripts/precompute_unimol.py。" + ) + data = np.load(path, allow_pickle=True) + embeddings = np.asarray(data["embeddings"], dtype=np.float32) + if embeddings.ndim != 2: + raise ValueError(f"embeddings 应为 2D,实际 {embeddings.shape}") + self._embed_dim = int(embeddings.shape[1]) + self._table = {str(s): embeddings[i] for i, s in enumerate(data["smiles"])} + + def forward(self, smiles_list: List[str]) -> Dict[str, torch.Tensor]: + missing = [s for s in smiles_list if s not in self._table] + if missing: + raise KeyError( + f"{len(missing)} 个 SMILES 不在 UniMol 缓存中,请重跑 precompute_unimol.py。" + f"示例: {missing[:3]}" + ) + mat = np.stack([self._table[s] for s in smiles_list]) + return {"unimol": torch.from_numpy(mat)} + + def clear_cache(self) -> None: + """查表器无临时缓存,仅为接口对齐。""" + + @property + def embed_dim(self) -> int: + return self._embed_dim \ No newline at end of file diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py index d3c7a97..4b0a8b8 100644 --- a/lnp_ml/modeling/final_train_optuna_cv.py +++ b/lnp_ml/modeling/final_train_optuna_cv.py @@ -176,6 +176,8 @@ def create_model( dropout: float = 0.1, use_mpnn: bool = False, mpnn_device: str = "cpu", + chemeleon_cache: Optional[str] = None, + unimol_cache: Optional[str] = None, # ============ MoE 相关(新增) ============ use_moe: bool = False, moe_n_experts: int = 4, @@ -203,6 +205,8 @@ def create_model( dropout=dropout, mpnn_ensemble_paths=ensemble_paths, mpnn_device=mpnn_device, + chemeleon_cache_path=chemeleon_cache, + unimol_cache_path=unimol_cache, **moe_kwargs, ) else: @@ -213,6 +217,8 @@ def create_model( fusion_strategy=fusion_strategy, head_hidden_dim=head_hidden_dim, dropout=dropout, + chemeleon_cache_path=chemeleon_cache, + unimol_cache_path=unimol_cache, **moe_kwargs, ) @@ -258,6 +264,8 @@ def run_optuna_cv( batch_size: int = 32, n_folds: int = 3, use_mpnn: bool = False, + chemeleon_cache: Optional[str] = None, + unimol_cache: Optional[str] = None, seed: int = 42, study_path: Optional[Path] = None, pretrain_state_dict: Optional[Dict] = None, @@ -355,6 +363,8 @@ def run_optuna_cv( dropout=dropout, use_mpnn=use_mpnn, mpnn_device=device.type, + chemeleon_cache=chemeleon_cache, + unimol_cache=unimol_cache, use_moe=use_moe, moe_n_experts=moe_n_experts, moe_top_k=moe_top_k, @@ -451,7 +461,12 @@ def main( load_delivery_head: bool = False, # MPNN use_mpnn: bool = False, - # MoE(新增) + # CheMeleon + use_chemeleon: bool = False, + chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", + use_unimol: bool = False, + unimol_cache: str = "data/processed/unimol_embeddings.npz", + # MoE use_moe: bool = False, moe_n_experts: int = 4, moe_top_k: int = 2, @@ -531,6 +546,8 @@ def main( batch_size=batch_size, n_folds=n_folds, use_mpnn=use_mpnn, + chemeleon_cache=(chemeleon_cache if use_chemeleon else None), + unimol_cache=(unimol_cache if use_unimol else None), seed=seed, study_path=study_path, pretrain_state_dict=pretrain_state_dict, @@ -599,6 +616,8 @@ def main( dropout=best_params["dropout"], use_mpnn=use_mpnn, mpnn_device=device.type, + chemeleon_cache=(chemeleon_cache if use_chemeleon else None), + unimol_cache=(unimol_cache if use_unimol else None), use_moe=use_moe, moe_n_experts=moe_n_experts, moe_top_k=moe_top_k, @@ -651,6 +670,10 @@ def main( "head_hidden_dim": best_params["head_hidden_dim"], "dropout": best_params["dropout"], "use_mpnn": use_mpnn, + "use_chemeleon": use_chemeleon, + "chemeleon_cache": chemeleon_cache if use_chemeleon else None, + "use_unimol": use_unimol, + "unimol_cache": unimol_cache if use_unimol else None, "use_moe": use_moe, "moe_n_experts": moe_n_experts, "moe_top_k": moe_top_k, diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py index 21b7e65..b5c6987 100644 --- a/lnp_ml/modeling/layers/llm_prompt.py +++ b/lnp_ml/modeling/layers/llm_prompt.py @@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): _is_t5 = "t5" in _name_l _is_qwen = "qwen" in _name_l self._is_qwen = _is_qwen + _is_biot5 = "biot5" in _name_l + self._is_biot5 = _is_biot5 self.tokenizer = AutoTokenizer.from_pretrained( - model_name_or_path, trust_remote_code=_is_qwen) + model_name_or_path, + trust_remote_code=_is_qwen, + use_fast=not _is_biot5, + ) if _is_qwen and self.tokenizer.pad_token is None: self.tokenizer.pad_token = self.tokenizer.eos_token @@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" return f"{float(v):.3f}" + def _fmt_mol(self, smiles: str) -> str: + """按 backbone 期望格式化分子。 + BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); + 其他 backbone:原样返回 SMILES。""" + if not getattr(self, "_is_biot5", False): + return smiles + try: + import selfies as sf + sfs = sf.encoder(smiles) # CCO -> [C][C][O] + except Exception: + return smiles # 转换失败退回 SMILES,避免整批中断 + return f"{sfs}" + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" blocks = [] @@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): ex = nb["extra"] blocks.append( f"Retrieved sample {rank}:\n" - f"SMILES: {nb['smiles']}\n" + f"Molecule: {self._fmt_mol(nb['smiles'])}\n" f"Similarity score: {nb['sim']:.3f}\n" f"delivery_log: {self._fmt(nb['delivery'])}\n" f"size_z: {self._fmt(ex.get('size'))}\n" @@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): return ( "Task: Encode the target LNP molecule into a retrieval-aware representation " "for downstream multi-task property prediction. Do not output predictions.\n\n" - f"[Target Molecule]\nSMILES: {target_smiles}\n\n" + f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" "[Retrieved Similar LNP Samples]\n" "Retrieved from the training set by fingerprint similarity, with their known " "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " @@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): def _get_prompt(self, s: str) -> str: if not self.use_rag: - return s + return self._fmt_mol(s) key = f"{self._rag_pool_id}::{s}" if key not in self._prompt_cache: self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) @@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): uniq = list(dict.fromkeys(missing)) for i in range(0, len(uniq), 256): chunk = uniq[i:i + 256] - enc = self.tokenizer(chunk, padding=True, truncation=True, + mols = [self._fmt_mol(s) for s in chunk] + enc = self.tokenizer(mols, padding=True, truncation=True, max_length=self.max_length, return_tensors="pt").to(device) out = self.encoder(**enc).last_hidden_state pooled = self._mean_pool(out, enc["attention_mask"]) @@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): return torch.stack([self._cache[s] for s in smiles]).to(device) def _encode_trainable(self, smiles, device): - enc = self.tokenizer(list(smiles), padding=True, truncation=True, + mols = [self._fmt_mol(s) for s in smiles] + enc = self.tokenizer(mols, padding=True, truncation=True, max_length=self.max_length, return_tensors="pt").to(device) out = self.encoder(**enc).last_hidden_state return self._mean_pool(out, enc["attention_mask"]) diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py index 1428075..87e6643 100644 --- a/lnp_ml/modeling/models.py +++ b/lnp_ml/modeling/models.py @@ -4,7 +4,12 @@ import torch import torch.nn as nn from typing import Dict, List, Optional, Literal -from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder +from lnp_ml.modeling.encoders import ( + CachedRDKitEncoder, + CachedMPNNEncoder, + CheMeleonEmbeddingEncoder, + UniMolEmbeddingEncoder, +) from lnp_ml.modeling.layers import ( TokenProjector, SetTransformer, @@ -91,6 +96,10 @@ class LNPModel(nn.Module): mpnn_checkpoint: Optional[str] = None, mpnn_ensemble_paths: Optional[List[str]] = None, mpnn_device: str = "cpu", + # CheMeleon encoder + chemeleon_cache_path: Optional[str] = None, + # UniMol encoder + unimol_cache_path: Optional[str] = None, # 输入维度配置 input_dims: Optional[Dict[str, int]] = None, # ============ MoE 相关 ============ @@ -121,6 +130,8 @@ class LNPModel(nn.Module): self.input_dims = input_dims or DEFAULT_INPUT_DIMS self.d_model = d_model self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None + self.use_chemeleon = chemeleon_cache_path is not None + self.use_unimol = unimol_cache_path is not None # ============ Encoders ============ self.rdkit_encoder = CachedRDKitEncoder() @@ -133,6 +144,18 @@ class LNPModel(nn.Module): else: self.mpnn_encoder = None + if self.use_chemeleon: + self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) + self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} + else: + self.chemeleon_encoder = None + + if self.use_unimol: + self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) + self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} + else: + self.unimol_encoder = None + # ============ Token Projector ============ proj_input_dims = {k: v for k, v in self.input_dims.items()} if not self.use_mpnn: @@ -143,8 +166,16 @@ class LNPModel(nn.Module): dropout=dropout, ) - # token 顺序与化学侧 token 数 - self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN + # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 + chem_keys: List[str] = [] + if self.use_mpnn: + chem_keys.append("mpnn") + if self.use_chemeleon: + chem_keys.append("chemeleon") + if self.use_unimol: + chem_keys.append("unimol") + chem_keys += ["morgan", "maccs", "desc"] + self.chem_keys = chem_keys self.tab_keys = TAB_KEYS self.token_order = self.chem_keys + self.tab_keys self.split_idx = len(self.chem_keys) @@ -233,6 +264,10 @@ class LNPModel(nn.Module): if self.use_mpnn: mpnn_features = self.mpnn_encoder(smiles) all_features["mpnn"] = mpnn_features["mpnn"].to(device) + if self.use_chemeleon: + all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) + if self.use_unimol: + all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) all_features["morgan"] = rdkit_features["morgan"].to(device) all_features["maccs"] = rdkit_features["maccs"].to(device) all_features["desc"] = rdkit_features["desc"].to(device) @@ -297,6 +332,15 @@ class LNPModel(nn.Module): if task is None: task = "delivery" + x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None + x_for = { + "size": x_reg if x_reg is not None else fused, + "pdi": fused, + "ee": fused, + "delivery": x_reg if x_reg is not None else fused, + "biodist": fused, + "toxic": fused, + } task_heads = { "size": self.head.size_head, "pdi": self.head.pdi_head, @@ -305,7 +349,7 @@ class LNPModel(nn.Module): "biodist": self.head.biodist_head, "toxic": self.head.toxic_head, } - return task_heads[task](fused) + return task_heads[task](x_for[task]) def forward_replacing_token( self, @@ -347,7 +391,8 @@ class LNPModel(nn.Module): ) -> torch.Tensor: """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" fused = self.forward_backbone(smiles, tabular) - return self.head.delivery_head(fused) + x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None + return self.head.delivery_head(x_reg if x_reg is not None else fused) def forward( self, @@ -369,6 +414,10 @@ class LNPModel(nn.Module): self.rdkit_encoder.clear_cache() if self.mpnn_encoder is not None: self.mpnn_encoder.clear_cache() + if self.chemeleon_encoder is not None: + self.chemeleon_encoder.clear_cache() + if self.unimol_encoder is not None: + self.unimol_encoder.clear_cache() if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): self.llm_prompt.clear_cache() @@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): head_hidden_dim: int = 128, dropout: float = 0.1, input_dims: Optional[Dict[str, int]] = None, + chemeleon_cache_path: Optional[str] = None, + unimol_cache_path: Optional[str] = None, # ============ MoE 相关 ============ use_moe: bool = False, moe_n_experts: int = 4, @@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): dropout=dropout, mpnn_checkpoint=None, mpnn_ensemble_paths=None, + chemeleon_cache_path=chemeleon_cache_path, + unimol_cache_path=unimol_cache_path, input_dims=dims, reg_bypass=reg_bypass, use_moe=use_moe, diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py index 7c34e63..6b0a72c 100644 --- a/lnp_ml/modeling/nested_cv_optuna.py +++ b/lnp_ml/modeling/nested_cv_optuna.py @@ -195,6 +195,8 @@ def create_model( dropout: float = 0.1, use_mpnn: bool = False, mpnn_device: str = "cpu", + chemeleon_cache: Optional[str] = None, + unimol_cache: Optional[str] = None, set_transformer_block: str = "sab", # MoE use_moe: bool = False, @@ -218,6 +220,8 @@ def create_model( moe_jitter_noise=moe_jitter_noise, use_retrieval=use_retrieval, retr_feature_dim=retr_feature_dim, + chemeleon_cache_path=chemeleon_cache, + unimol_cache_path=unimol_cache, **(llm_kwargs or {}), ) @@ -418,6 +422,8 @@ def run_inner_optuna( batch_size: int = 32, n_inner_folds: int = 3, use_mpnn: bool = False, + chemeleon_cache: Optional[str] = None, + unimol_cache: Optional[str] = None, seed: int = 42, study_path: Optional[Path] = None, pretrain_state_dict: Optional[Dict] = None, @@ -536,6 +542,8 @@ def run_inner_optuna( dropout=dropout, use_mpnn=use_mpnn, mpnn_device=device.type, + chemeleon_cache=chemeleon_cache, + unimol_cache=unimol_cache, use_moe=use_moe, moe_n_experts=moe_ne_t, moe_top_k=moe_tk_t, @@ -631,6 +639,8 @@ def _run_single_outer_fold( batch_size: int, n_inner_folds: int, use_mpnn: bool, + chemeleon_cache: Optional[str], + unimol_cache: Optional[str], seed: int, pretrain_state_dict: Optional[Dict], pretrain_config: Optional[Dict], @@ -732,6 +742,8 @@ def _run_single_outer_fold( batch_size=batch_size, n_inner_folds=n_inner_folds, use_mpnn=use_mpnn, + chemeleon_cache=chemeleon_cache, + unimol_cache=unimol_cache, seed=seed + outer_fold, study_path=study_path, pretrain_state_dict=pretrain_state_dict, @@ -789,6 +801,8 @@ def _run_single_outer_fold( dropout=best_params["dropout"], use_mpnn=use_mpnn, mpnn_device=device.type, + chemeleon_cache=chemeleon_cache, + unimol_cache=unimol_cache, use_moe=use_moe, moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), moe_top_k=best_params.get("moe_top_k", moe_top_k), @@ -853,6 +867,10 @@ def _run_single_outer_fold( "set_transformer_block": best_params.get("set_transformer_block", "sab"), "dropout": best_params["dropout"], "use_mpnn": use_mpnn, + "use_chemeleon": chemeleon_cache is not None, + "chemeleon_cache": chemeleon_cache, + "use_unimol": unimol_cache is not None, + "unimol_cache": unimol_cache, "use_moe": use_moe, "moe_n_experts": moe_n_experts, "moe_top_k": moe_top_k, @@ -920,6 +938,11 @@ def main( load_delivery_head: bool = False, # MPNN use_mpnn: bool = False, + # CheMeleon + use_chemeleon: bool = False, + chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", + use_unimol: bool = False, + unimol_cache: str = "data/processed/unimol_embeddings.npz", n_repeats: int = 1, repeat_seed_step: int = 1000, # MoE(消融开关) @@ -1050,6 +1073,8 @@ def main( batch_size=batch_size, n_inner_folds=n_inner_folds, use_mpnn=use_mpnn, + chemeleon_cache=(chemeleon_cache if use_chemeleon else None), + unimol_cache=(unimol_cache if use_unimol else None), seed=seed, pretrain_state_dict=pretrain_state_dict, pretrain_config=pretrain_config, diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py index a5cf836..4b02f44 100644 --- a/lnp_ml/modeling/predict.py +++ b/lnp_ml/modeling/predict.py @@ -64,6 +64,8 @@ def load_model( llm_lora_dropout=config.get("llm_lora_dropout", 0.05), mpnn_ensemble_paths=ensemble_paths, mpnn_device=mpnn_device, + chemeleon_cache_path=config.get("chemeleon_cache"), + unimol_cache_path=config.get("unimol_cache"), ) else: model = LNPModelWithoutMPNN( @@ -80,6 +82,8 @@ def load_model( llm_lora_r=config.get("llm_lora_r", 8), llm_lora_alpha=config.get("llm_lora_alpha", 16), llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + chemeleon_cache_path=config.get("chemeleon_cache"), + unimol_cache_path=config.get("unimol_cache"), ) model.load_state_dict(checkpoint["model_state_dict"], strict=False) diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py index 54a39ea..48154ad 100644 --- a/lnp_ml/modeling/pretrain.py +++ b/lnp_ml/modeling/pretrain.py @@ -243,6 +243,10 @@ def main( mpnn_checkpoint: Optional[str] = None, mpnn_ensemble_paths: Optional[str] = None, mpnn_device: str = "cpu", + use_chemeleon: bool = False, + chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", + use_unimol: bool = False, + unimol_cache: str = "data/processed/unimol_embeddings.npz", # 训练参数 batch_size: int = 64, lr: float = 1e-4, @@ -324,6 +328,8 @@ def main( llm_lora_r=llm_lora_r, llm_lora_alpha=llm_lora_alpha, llm_lora_dropout=llm_lora_dropout, + chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), + unimol_cache_path=(unimol_cache if use_unimol else None), ) if enable_mpnn: model = LNPModel( @@ -373,6 +379,8 @@ def main( "head_hidden_dim": head_hidden_dim, "dropout": dropout, "use_mpnn": enable_mpnn, + "use_chemeleon": use_chemeleon, + "use_unimol": use_unimol, "use_moe": use_moe, "moe_n_experts": moe_n_experts, "moe_top_k": moe_top_k, diff --git a/models/abl_full/s1_baseline/seed42/local_uncommitted.patch b/models/abl_full/s1_baseline/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_0/best_params.json b/models/abl_full/s1_baseline/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..5a62180 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_0/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.2708449222533328, + "lr": 0.000991430410947854, + "weight_decay": 0.017147551517191443, + "backbone_lr_ratio": 0.43561339540605226, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s1_baseline/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..0ac5b47 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 13} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_0/history.json b/models/abl_full/s1_baseline/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..f0c0100 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_0/history.json @@ -0,0 +1,279 @@ +{ + "train": [ + { + "loss": 5.444678425788879, + "loss_size": 0.9013985113965141, + "loss_pdi": 0.6729189786646101, + "loss_ee": 1.054741895861096, + "loss_delivery": 1.0977894796265497, + "loss_biodist": 1.1086501479148865, + "loss_toxic": 0.6209922830263773 + }, + { + "loss": 4.5500569343566895, + "loss_size": 0.85751240948836, + "loss_pdi": 0.6458425356282128, + "loss_ee": 0.9811898039446937, + "loss_delivery": 0.9201048314571381, + "loss_biodist": 0.7063412467638651, + "loss_toxic": 0.46355681783623165 + }, + { + "loss": 3.628201378716363, + "loss_size": 0.4766200818121433, + "loss_pdi": 0.6188660065333048, + "loss_ee": 0.9291005432605743, + "loss_delivery": 0.8234397636519538, + "loss_biodist": 0.4827902648184035, + "loss_toxic": 0.322152310775386 + }, + { + "loss": 4.01716587278578, + "loss_size": 0.7821791080964936, + "loss_pdi": 0.6054948419332504, + "loss_ee": 0.9422276218732198, + "loss_delivery": 1.0460369272364511, + "loss_biodist": 0.4228086951706145, + "loss_toxic": 0.2583594545722008 + }, + { + "loss": 3.469016088379754, + "loss_size": 0.7554286056094699, + "loss_pdi": 0.5811512834495969, + "loss_ee": 0.8725419342517853, + "loss_delivery": 0.886976587275664, + "loss_biodist": 0.28543684093488586, + "loss_toxic": 0.12317715233398809 + }, + { + "loss": 2.846436858177185, + "loss_size": 0.4568066878451241, + "loss_pdi": 0.5172890192932553, + "loss_ee": 0.823758559094535, + "loss_delivery": 0.7545244072874387, + "loss_biodist": 0.23187503384219277, + "loss_toxic": 0.09306768234819174 + }, + { + "loss": 2.863664746284485, + "loss_size": 0.6340856614212195, + "loss_pdi": 0.46964752508534324, + "loss_ee": 0.7400971684190962, + "loss_delivery": 0.7597490027546883, + "loss_biodist": 0.21114367453588379, + "loss_toxic": 0.08032437338907686 + }, + { + "loss": 2.74409736527337, + "loss_size": 0.6125703155994415, + "loss_pdi": 0.4939524581034978, + "loss_ee": 0.7552461607588662, + "loss_delivery": 0.5236966917291284, + "loss_biodist": 0.20348657543460527, + "loss_toxic": 0.18123929373299083 + }, + { + "loss": 2.559107575151655, + "loss_size": 0.513363784386052, + "loss_pdi": 0.4523950500620736, + "loss_ee": 0.6855895270903906, + "loss_delivery": 0.6234937575128343, + "loss_biodist": 0.18743807822465897, + "loss_toxic": 0.12504185586132938 + }, + { + "loss": 2.491521100203196, + "loss_size": 0.4445962525076336, + "loss_pdi": 0.41342465662293965, + "loss_ee": 0.6792096479071511, + "loss_delivery": 0.7282942334810892, + "loss_biodist": 0.14249309400717416, + "loss_toxic": 0.11571477616154072 + }, + { + "loss": 2.3987844718827143, + "loss_size": 0.4384675555759006, + "loss_pdi": 0.4503721247116725, + "loss_ee": 0.6800311356782913, + "loss_delivery": 0.6577720418572426, + "loss_biodist": 0.1248554570807351, + "loss_toxic": 0.08295682887546718 + }, + { + "loss": 2.2998381389511957, + "loss_size": 0.39875652516881627, + "loss_pdi": 0.4235676692591773, + "loss_ee": 0.6691084769037035, + "loss_delivery": 0.6309656215210756, + "loss_biodist": 0.13997879127661386, + "loss_toxic": 0.0722581786620948 + }, + { + "loss": 2.238205717669593, + "loss_size": 0.3525017342633671, + "loss_pdi": 0.42884764985905754, + "loss_ee": 0.6448585126135085, + "loss_delivery": 0.6537541647752126, + "loss_biodist": 0.1366871322194735, + "loss_toxic": 0.05711782972017924 + } + ], + "val": [ + { + "loss": 4.17715326944987, + "loss_size": 0.40348024666309357, + "loss_pdi": 0.6616458892822266, + "loss_ee": 0.910798708597819, + "loss_delivery": 0.6187337581068277, + "loss_biodist": 1.0140363375345867, + "loss_toxic": 0.5890255868434906, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.3939393939393939, + "acc_toxic": 0.9 + }, + { + "loss": 3.9921347300211587, + "loss_size": 0.4160850743452708, + "loss_pdi": 0.8274338642756144, + "loss_ee": 0.7452529668807983, + "loss_delivery": 0.6703582654396693, + "loss_biodist": 0.5891921321551005, + "loss_toxic": 0.7717546025911967, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 4.064125935236613, + "loss_size": 0.4211361159880956, + "loss_pdi": 1.008450706799825, + "loss_ee": 0.7111543019612631, + "loss_delivery": 0.712218443552653, + "loss_biodist": 0.40626858671506244, + "loss_toxic": 0.8385392477114996, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.85 + }, + { + "loss": 5.119507948557536, + "loss_size": 0.5155423680941263, + "loss_pdi": 1.521255115667979, + "loss_ee": 0.6390946346024672, + "loss_delivery": 0.6691141823927561, + "loss_biodist": 0.29909205188353855, + "loss_toxic": 1.52191378424565, + "acc_pdi": 0.36363636363636365, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 4.037670930226644, + "loss_size": 0.3509005631009738, + "loss_pdi": 1.1224110921223958, + "loss_ee": 0.5911329852727553, + "loss_delivery": 0.6472536226113638, + "loss_biodist": 0.21039783706267676, + "loss_toxic": 1.1335941478610039, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.4177165031433105, + "loss_size": 0.4018242011467616, + "loss_pdi": 1.030598243077596, + "loss_ee": 0.6572648485501608, + "loss_delivery": 0.4684615011016528, + "loss_biodist": 0.30621210982402164, + "loss_toxic": 0.5808065546055635, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 2.925480365753174, + "loss_size": 0.3535038710882266, + "loss_pdi": 0.9870580832163492, + "loss_ee": 0.6889502070844173, + "loss_delivery": 0.37784648065765697, + "loss_biodist": 0.2775272900859515, + "loss_toxic": 0.2776398677378893, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 4.1336948076883955, + "loss_size": 0.6345704197883606, + "loss_pdi": 1.4422211448351543, + "loss_ee": 0.6099853285898765, + "loss_delivery": 0.5296423882246017, + "loss_biodist": 0.2524216075738271, + "loss_toxic": 0.7040676549077034, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.174628575642904, + "loss_size": 0.43584080537160236, + "loss_pdi": 1.2121825615564983, + "loss_ee": 0.7292982923487822, + "loss_delivery": 0.36530304451783496, + "loss_biodist": 0.22861340890328088, + "loss_toxic": 0.2580638462677598, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5454545454545454, + "acc_toxic": 1.0 + }, + { + "loss": 3.330165465672811, + "loss_size": 0.3679695477088292, + "loss_pdi": 1.3173633416493733, + "loss_ee": 0.6759289329250654, + "loss_delivery": 0.41639943420886993, + "loss_biodist": 0.21120227749149004, + "loss_toxic": 0.3905988199015458, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 3.40001114209493, + "loss_size": 0.3954329341650009, + "loss_pdi": 1.376650333404541, + "loss_ee": 0.7021505000690619, + "loss_delivery": 0.40341157217820484, + "loss_biodist": 0.2231835462152958, + "loss_toxic": 0.35528251078600687, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 3.4064132372538247, + "loss_size": 0.41711575786272687, + "loss_pdi": 1.419565737247467, + "loss_ee": 0.673577698568503, + "loss_delivery": 0.4514770656824112, + "loss_biodist": 0.19664333636562029, + "loss_toxic": 0.3087075824538867, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 3.477815628051758, + "loss_size": 0.4257845679918925, + "loss_pdi": 1.4289001822471619, + "loss_ee": 0.6537623330950737, + "loss_delivery": 0.4686317443847656, + "loss_biodist": 0.2124811721344789, + "loss_toxic": 0.34616246446967125, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_0/splits.json b/models/abl_full/s1_baseline/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s1_baseline/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..30bd1ab --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.566862974660202, + "rmse": 1.2517439732869506, + "mae": 0.5613356892872288, + "r2": 0.04104129132919676 + }, + "delivery": { + "n_samples": 58, + "mse": 0.47028553218171953, + "rmse": 0.6857736741678843, + "mae": 0.5210600533875925, + "r2": 0.40223870972577835 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7458333333333333, + "recall": 0.7523164647184604, + "f1": 0.7489010022859153 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6966386554621847, + "recall": 0.7485714285714287, + "f1": 0.700510874324916 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.20122327746488497, + "js_divergence": 0.04018146399397734 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_1/best_params.json b/models/abl_full/s1_baseline/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..e540a88 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_1/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.32248545844049914, + "lr": 0.0009826983395023184, + "weight_decay": 0.012778379350481496, + "backbone_lr_ratio": 0.06065542527628115, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s1_baseline/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..6aa3930 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 9} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_1/history.json b/models/abl_full/s1_baseline/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..aff048c --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_1/history.json @@ -0,0 +1,195 @@ +{ + "train": [ + { + "loss": 5.70767883459727, + "loss_size": 1.2613731573025386, + "loss_pdi": 0.6852067477173276, + "loss_ee": 1.058294650581148, + "loss_delivery": 0.9235104901923074, + "loss_biodist": 1.1679435107443068, + "loss_toxic": 0.6260289185576968 + }, + { + "loss": 4.797239462534587, + "loss_size": 1.140162585510148, + "loss_pdi": 0.6206662886672549, + "loss_ee": 0.9612810247474246, + "loss_delivery": 0.8655857410695817, + "loss_biodist": 0.776539769437578, + "loss_toxic": 0.4614737547106213 + }, + { + "loss": 4.001818444993761, + "loss_size": 0.875577992035283, + "loss_pdi": 0.5799383173386256, + "loss_ee": 0.8913398087024689, + "loss_delivery": 0.8193241639269723, + "loss_biodist": 0.52018670241038, + "loss_toxic": 0.342042191988892 + }, + { + "loss": 3.9948329793082342, + "loss_size": 1.1431896595491304, + "loss_pdi": 0.551549611820115, + "loss_ee": 0.8537947800424364, + "loss_delivery": 0.8136444911360741, + "loss_biodist": 0.39836518797609544, + "loss_toxic": 0.2655619970626301 + }, + { + "loss": 3.3755411439471774, + "loss_size": 0.7370148715045717, + "loss_pdi": 0.5458221783240637, + "loss_ee": 0.8433284295929803, + "loss_delivery": 0.818140533235338, + "loss_biodist": 0.2898569570647346, + "loss_toxic": 0.16872831413315403 + }, + { + "loss": 3.533170633845859, + "loss_size": 1.0178725578718715, + "loss_pdi": 0.5446212440729141, + "loss_ee": 0.8055897222624885, + "loss_delivery": 0.7446173818575011, + "loss_biodist": 0.27136093543635476, + "loss_toxic": 0.1793254835324155 + }, + { + "loss": 3.5833877987331815, + "loss_size": 1.083082848952876, + "loss_pdi": 0.5406820194588767, + "loss_ee": 0.8283255994319916, + "loss_delivery": 0.7340445145964622, + "loss_biodist": 0.2850555007656415, + "loss_toxic": 0.1476559311979347 + }, + { + "loss": 3.5580843024783664, + "loss_size": 1.059447083208296, + "loss_pdi": 0.5500213387939665, + "loss_ee": 0.7789086335235171, + "loss_delivery": 0.7687801553143395, + "loss_biodist": 0.2777090138859219, + "loss_toxic": 0.1581853452242083 + }, + { + "loss": 3.5390172799428306, + "loss_size": 1.0753879389829106, + "loss_pdi": 0.5188433958424462, + "loss_ee": 0.8118821216954125, + "loss_delivery": 0.7294342882103391, + "loss_biodist": 0.2630891485346688, + "loss_toxic": 0.17479956853720877 + } + ], + "val": [ + { + "loss": 3.5459298292795816, + "loss_size": 0.5026707717527946, + "loss_pdi": 0.6600943009058634, + "loss_ee": 0.9537328879038492, + "loss_delivery": 0.13466781392829338, + "loss_biodist": 0.8540196816126505, + "loss_toxic": 0.4517778853575389, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 3.0298144022623696, + "loss_size": 0.4697304304378728, + "loss_pdi": 0.6688773433367411, + "loss_ee": 0.8737930854161581, + "loss_delivery": 0.15286462505658469, + "loss_biodist": 0.5575888554255167, + "loss_toxic": 0.31474941968917847, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.783087968826294, + "loss_size": 0.4554748572409153, + "loss_pdi": 0.7089216311772665, + "loss_ee": 0.8464933832486471, + "loss_delivery": 0.1867634654045105, + "loss_biodist": 0.3984869917233785, + "loss_toxic": 0.19690123200416565, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.6162113348642984, + "loss_size": 0.5064889093240103, + "loss_pdi": 0.6168197989463806, + "loss_ee": 0.6544777154922485, + "loss_delivery": 0.4863942662874858, + "loss_biodist": 0.32840614517529804, + "loss_toxic": 0.03221984952688217, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.4476131598154702, + "loss_size": 0.4997301201025645, + "loss_pdi": 0.6036792099475861, + "loss_ee": 0.5978536307811737, + "loss_delivery": 0.3749092022577922, + "loss_biodist": 0.3613563229640325, + "loss_toxic": 0.0169179222236077, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.8181818181818182, + "acc_toxic": 1.0 + }, + { + "loss": 2.435731569925944, + "loss_size": 0.47308515508969623, + "loss_pdi": 0.6390049755573273, + "loss_ee": 0.6266860961914062, + "loss_delivery": 0.37278643250465393, + "loss_biodist": 0.32002559800942737, + "loss_toxic": 0.015139088034629822, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.379436413447062, + "loss_size": 0.43454373876253766, + "loss_pdi": 0.6299058894316355, + "loss_ee": 0.6250458657741547, + "loss_delivery": 0.38385624686876935, + "loss_biodist": 0.3001476426919301, + "loss_toxic": 0.017312646533052128, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.347810427347819, + "loss_size": 0.432897428671519, + "loss_pdi": 0.6165774265925089, + "loss_ee": 0.6293469866116842, + "loss_delivery": 0.3661603331565857, + "loss_biodist": 0.29900068541367847, + "loss_toxic": 0.015287932939827442, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.361335039138794, + "loss_size": 0.43744757771492004, + "loss_pdi": 0.6209465364615122, + "loss_ee": 0.6247348288695017, + "loss_delivery": 0.37391554315884906, + "loss_biodist": 0.30248237649599713, + "loss_toxic": 0.013860152413447699, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_1/splits.json b/models/abl_full/s1_baseline/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s1_baseline/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..998f386 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.331702512441025, + "rmse": 0.5759362051833736, + "mae": 0.44149345545364277, + "r2": -0.01290154523011866 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0846693440821236, + "rmse": 1.0414746007858875, + "mae": 0.6676197994011835, + "r2": 0.17898349918416012 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.5952380952380952, + "precision": 0.5436720142602496, + "recall": 0.5555555555555556, + "f1": 0.5360623781676414 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5595238095238095, + "precision": 0.5063813813813813, + "recall": 0.5141049426763712, + "f1": 0.4997539067306509 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.3161094471320723, + "js_divergence": 0.08013612372537363 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_2/best_params.json b/models/abl_full/s1_baseline/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..6e34a9a --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_2/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.10175834754304547, + "lr": 0.0006945620111173825, + "weight_decay": 0.01625672738871503, + "backbone_lr_ratio": 0.029086945171372888, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s1_baseline/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..54e2f4a --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 15} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_2/history.json b/models/abl_full/s1_baseline/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..3acc7e4 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_2/history.json @@ -0,0 +1,321 @@ +{ + "train": [ + { + "loss": 5.202105376455519, + "loss_size": 0.848908067577415, + "loss_pdi": 0.6807463301552666, + "loss_ee": 1.0441955692238278, + "loss_delivery": 0.9348783335751958, + "loss_biodist": 1.1314214732911851, + "loss_toxic": 0.5710593147410287 + }, + { + "loss": 4.290187080701192, + "loss_size": 0.7784139240781466, + "loss_pdi": 0.6099397473865085, + "loss_ee": 0.958238508966234, + "loss_delivery": 0.8511772139204873, + "loss_biodist": 0.7236086759302351, + "loss_toxic": 0.3855020155509313 + }, + { + "loss": 3.6722990936703153, + "loss_size": 0.7381285068889459, + "loss_pdi": 0.5751698017120361, + "loss_ee": 0.8887821502155728, + "loss_delivery": 0.743710472351975, + "loss_biodist": 0.4884147254957093, + "loss_toxic": 0.255600235114495 + }, + { + "loss": 3.541553775469462, + "loss_size": 0.7249418058329158, + "loss_pdi": 0.5661465426286062, + "loss_ee": 0.8174009753598107, + "loss_delivery": 0.8127418044540617, + "loss_biodist": 0.40241866144869065, + "loss_toxic": 0.23975762041906515 + }, + { + "loss": 3.170949247148302, + "loss_size": 0.6672847900125716, + "loss_pdi": 0.5368095321787728, + "loss_ee": 0.7959727810488807, + "loss_delivery": 0.703557981385125, + "loss_biodist": 0.3367742705676291, + "loss_toxic": 0.15184742936657536 + }, + { + "loss": 2.9941213859452143, + "loss_size": 0.6181929343276553, + "loss_pdi": 0.5130738466978073, + "loss_ee": 0.7803180151515536, + "loss_delivery": 0.6597989669276608, + "loss_biodist": 0.3322647420896424, + "loss_toxic": 0.11287090265088612 + }, + { + "loss": 2.984050432840983, + "loss_size": 0.6329434472653601, + "loss_pdi": 0.5116611768802007, + "loss_ee": 0.7843350271383921, + "loss_delivery": 0.6358760777446959, + "loss_biodist": 0.3198155090212822, + "loss_toxic": 0.12358394089258379 + }, + { + "loss": 2.883889695008596, + "loss_size": 0.5605236656135983, + "loss_pdi": 0.5077957941426171, + "loss_ee": 0.7636184924178653, + "loss_delivery": 0.6490659183926053, + "loss_biodist": 0.32912411871883607, + "loss_toxic": 0.1002082825741834 + }, + { + "loss": 2.812773803869883, + "loss_size": 0.5342350660098923, + "loss_pdi": 0.4876205407910877, + "loss_ee": 0.7610062824355232, + "loss_delivery": 0.6225873910718493, + "loss_biodist": 0.3106722831726074, + "loss_toxic": 0.122382206738823 + }, + { + "loss": 2.7658647762404547, + "loss_size": 0.5677060633897781, + "loss_pdi": 0.48942267232471043, + "loss_ee": 0.7341696321964264, + "loss_delivery": 0.6172876771953371, + "loss_biodist": 0.2766479564209779, + "loss_toxic": 0.10702241336305936 + }, + { + "loss": 2.811511311266157, + "loss_size": 0.529818933043215, + "loss_pdi": 0.5082361698150635, + "loss_ee": 0.7545560250679652, + "loss_delivery": 0.6142487269308832, + "loss_biodist": 0.3137662361065547, + "loss_toxic": 0.11994944792240858 + }, + { + "loss": 2.7609912753105164, + "loss_size": 0.533905324836572, + "loss_pdi": 0.4897963073518541, + "loss_ee": 0.7325207938750585, + "loss_delivery": 0.6409336452682813, + "loss_biodist": 0.3105732450882594, + "loss_toxic": 0.08392345615559155 + }, + { + "loss": 2.5689589116308422, + "loss_size": 0.4789157559474309, + "loss_pdi": 0.47479958335558575, + "loss_ee": 0.7016067024734285, + "loss_delivery": 0.5635421830746863, + "loss_biodist": 0.27678533891836804, + "loss_toxic": 0.09953307381106748 + }, + { + "loss": 2.740408976872762, + "loss_size": 0.5218956611222691, + "loss_pdi": 0.4786536180310779, + "loss_ee": 0.7272893289724985, + "loss_delivery": 0.6642732901705636, + "loss_biodist": 0.2777698271804386, + "loss_toxic": 0.10078600504332119 + }, + { + "loss": 2.5524483058187695, + "loss_size": 0.3650745376944542, + "loss_pdi": 0.4811245517598258, + "loss_ee": 0.7493493192725711, + "loss_delivery": 0.5953619066211913, + "loss_biodist": 0.2748099168141683, + "loss_toxic": 0.11551791522651911 + } + ], + "val": [ + { + "loss": 7.533385117848714, + "loss_size": 3.32920112212499, + "loss_pdi": 0.6970377763112386, + "loss_ee": 1.1328806281089783, + "loss_delivery": 1.3549890021483104, + "loss_biodist": 0.6858217716217041, + "loss_toxic": 0.3650021553039551, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.8 + }, + { + "loss": 7.252995093663533, + "loss_size": 3.4935885270436606, + "loss_pdi": 0.6707201798756918, + "loss_ee": 1.1492963035901387, + "loss_delivery": 1.3669734001159668, + "loss_biodist": 0.4113343358039856, + "loss_toxic": 0.210152397553126, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 6.900516748428345, + "loss_size": 3.424496034781138, + "loss_pdi": 0.6340553164482117, + "loss_ee": 1.0742388765017192, + "loss_delivery": 1.365605463584264, + "loss_biodist": 0.3165936271349589, + "loss_toxic": 0.14185781280199686, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + }, + { + "loss": 6.72283673286438, + "loss_size": 3.336984912554423, + "loss_pdi": 0.6350743969281515, + "loss_ee": 1.0475572347640991, + "loss_delivery": 1.363085389137268, + "loss_biodist": 0.28269702196121216, + "loss_toxic": 0.1187615195910136, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + }, + { + "loss": 6.573407570521037, + "loss_size": 3.2991819977760315, + "loss_pdi": 0.6176866690317789, + "loss_ee": 1.0387301047643025, + "loss_delivery": 1.3273769617080688, + "loss_biodist": 0.2601098616917928, + "loss_toxic": 0.09336130321025848, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + }, + { + "loss": 6.622515757878621, + "loss_size": 3.3836412330468497, + "loss_pdi": 0.5748510162035624, + "loss_ee": 1.0535104672114055, + "loss_delivery": 1.32452525695165, + "loss_biodist": 0.2572739322980245, + "loss_toxic": 0.09353671098748843, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + }, + { + "loss": 6.70836607615153, + "loss_size": 3.510503182808558, + "loss_pdi": 0.5809042056401571, + "loss_ee": 1.0374245643615723, + "loss_delivery": 1.2894654472668965, + "loss_biodist": 0.24987786014874777, + "loss_toxic": 0.10607268412907918, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.571467558542888, + "loss_size": 3.3893363177776337, + "loss_pdi": 0.5938868920008341, + "loss_ee": 1.0552860299746196, + "loss_delivery": 1.2768413424491882, + "loss_biodist": 0.23242007692654928, + "loss_toxic": 0.0916902410487334, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.619278033574422, + "loss_size": 3.401833007733027, + "loss_pdi": 0.6145266890525818, + "loss_ee": 1.0751490791638691, + "loss_delivery": 1.2833717465400696, + "loss_biodist": 0.2202401359875997, + "loss_toxic": 0.09399381031592687, + "acc_pdi": 0.8484848484848485, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.504025061925252, + "loss_size": 3.301579564809799, + "loss_pdi": 0.606462836265564, + "loss_ee": 1.086024324099223, + "loss_delivery": 1.2854044437408447, + "loss_biodist": 0.2099631130695343, + "loss_toxic": 0.08557485789060593, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.508427063624064, + "loss_size": 3.3275153736273446, + "loss_pdi": 0.6022421419620514, + "loss_ee": 1.096723775068919, + "loss_delivery": 1.2710585991541545, + "loss_biodist": 0.20578517516454062, + "loss_toxic": 0.07695226619640987, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.572851657867432, + "loss_size": 3.366280754407247, + "loss_pdi": 0.6043597459793091, + "loss_ee": 1.088720401128133, + "loss_delivery": 1.2916629314422607, + "loss_biodist": 0.21097198128700256, + "loss_toxic": 0.08279866352677345, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.4637378851572675, + "loss_size": 3.343488405148188, + "loss_pdi": 0.5962008237838745, + "loss_ee": 1.0601000785827637, + "loss_delivery": 1.2487306793530781, + "loss_biodist": 0.2008370558420817, + "loss_toxic": 0.08361160010099411, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.9 + }, + { + "loss": 6.4439826011657715, + "loss_size": 3.307605812946955, + "loss_pdi": 0.6033458610375723, + "loss_ee": 1.064460555712382, + "loss_delivery": 1.2547081510225933, + "loss_biodist": 0.2014366090297699, + "loss_toxic": 0.08231960361202557, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.438955942789714, + "loss_size": 3.2952869534492493, + "loss_pdi": 0.605786015590032, + "loss_ee": 1.0861074129740398, + "loss_delivery": 1.2420463760693867, + "loss_biodist": 0.20020990570386252, + "loss_toxic": 0.0803364800910155, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.9 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_2/splits.json b/models/abl_full/s1_baseline/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s1_baseline/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..8b7b44d --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.41810017905356084, + "rmse": 0.646606664869425, + "mae": 0.49784872390418533, + "r2": 0.17425961655133881 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6790202850062702, + "rmse": 0.8240268715316693, + "mae": 0.571309769502841, + "r2": 0.09610631021195903 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6423197492163009, + "recall": 0.6664222873900294, + "f1": 0.6480643539467068 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5810820624546115, + "recall": 0.623015873015873, + "f1": 0.5905593448696896 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.28741923551931975, + "js_divergence": 0.07400667098115551 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_3/best_params.json b/models/abl_full/s1_baseline/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..de88110 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_3/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.11798498673229349, + "lr": 0.0009464809649969671, + "weight_decay": 0.07051438027639334, + "backbone_lr_ratio": 0.8641000194900307, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s1_baseline/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..735a6b9 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 11} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_3/history.json b/models/abl_full/s1_baseline/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..dce4c91 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_3/history.json @@ -0,0 +1,237 @@ +{ + "train": [ + { + "loss": 4.848361690839131, + "loss_size": 0.5232753165894084, + "loss_pdi": 0.6738916403717465, + "loss_ee": 1.0730043318536546, + "loss_delivery": 0.8802526924345229, + "loss_biodist": 1.132146613465415, + "loss_toxic": 0.5782980405622058 + }, + { + "loss": 3.917437288496229, + "loss_size": 0.4489060507880317, + "loss_pdi": 0.6260161598523458, + "loss_ee": 0.9411158363024393, + "loss_delivery": 0.8751034893923335, + "loss_biodist": 0.6718993153836992, + "loss_toxic": 0.3736401821176211 + }, + { + "loss": 3.2179792324701944, + "loss_size": 0.4107091782821549, + "loss_pdi": 0.5818840811649958, + "loss_ee": 0.864887641535865, + "loss_delivery": 0.7771476540300581, + "loss_biodist": 0.3617808139986462, + "loss_toxic": 0.23983760095304912 + }, + { + "loss": 3.418438990910848, + "loss_size": 0.5134996208879683, + "loss_pdi": 0.6955742753214307, + "loss_ee": 0.8767334156566196, + "loss_delivery": 0.779440215892262, + "loss_biodist": 0.3787732298175494, + "loss_toxic": 0.20739152230736282 + }, + { + "loss": 2.998665518230862, + "loss_size": 0.47621528017852044, + "loss_pdi": 0.5725314848952823, + "loss_ee": 0.865351163678699, + "loss_delivery": 0.6925184585981898, + "loss_biodist": 0.2738187892569436, + "loss_toxic": 0.14818634762842622 + }, + { + "loss": 3.0510948499043784, + "loss_size": 0.45409081793493694, + "loss_pdi": 0.5420019378264745, + "loss_ee": 0.8024691624773873, + "loss_delivery": 0.8633336284094386, + "loss_biodist": 0.23776587181621128, + "loss_toxic": 0.1845432592736971 + }, + { + "loss": 2.5850073099136353, + "loss_size": 0.3699224545723862, + "loss_pdi": 0.4901059567928314, + "loss_ee": 0.7250210146109263, + "loss_delivery": 0.7355813177095519, + "loss_biodist": 0.21237118128273222, + "loss_toxic": 0.08344074033407702 + }, + { + "loss": 2.3256689177619085, + "loss_size": 0.3629870389898618, + "loss_pdi": 0.4683772557311588, + "loss_ee": 0.6916663034094704, + "loss_delivery": 0.597500105905864, + "loss_biodist": 0.17209894148012003, + "loss_toxic": 0.06179508691679479 + }, + { + "loss": 2.231321738825904, + "loss_size": 0.3313147864407963, + "loss_pdi": 0.4590592268440459, + "loss_ee": 0.6846879339880414, + "loss_delivery": 0.5587979132930437, + "loss_biodist": 0.14582366517020595, + "loss_toxic": 0.08081445035188356 + }, + { + "loss": 2.142837623755137, + "loss_size": 0.25173141145043904, + "loss_pdi": 0.44459058509932625, + "loss_ee": 0.6690129935741425, + "loss_delivery": 0.5448936944206556, + "loss_biodist": 0.1397495832708147, + "loss_toxic": 0.12115205913626899 + }, + { + "loss": 2.030080166127947, + "loss_size": 0.3170225802395079, + "loss_pdi": 0.44736198335886, + "loss_ee": 0.6005619350406859, + "loss_delivery": 0.5095781040274434, + "loss_biodist": 0.14586213645007876, + "loss_toxic": 0.03706750710908738 + } + ], + "val": [ + { + "loss": 5.591053167978923, + "loss_size": 2.305419623851776, + "loss_pdi": 0.638962964216868, + "loss_ee": 0.996762752532959, + "loss_delivery": 0.7161052773396174, + "loss_biodist": 0.5862163702646891, + "loss_toxic": 0.3665180404980977, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7878787878787878, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.8712999025980634, + "loss_size": 2.2451172123352685, + "loss_pdi": 0.6204447746276855, + "loss_ee": 0.759979248046875, + "loss_delivery": 0.6457759390274683, + "loss_biodist": 0.27716003855069477, + "loss_toxic": 0.32968173424402875, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.636776884396871, + "loss_size": 2.234689603249232, + "loss_pdi": 0.5556902090708414, + "loss_ee": 0.6675189236799876, + "loss_delivery": 0.7458879252274832, + "loss_biodist": 0.16838649411996207, + "loss_toxic": 0.25733551383018494, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.396537661552429, + "loss_size": 2.1907527844111123, + "loss_pdi": 0.5864351193110148, + "loss_ee": 0.6704360147317251, + "loss_delivery": 0.7243756751219431, + "loss_biodist": 0.12566474080085754, + "loss_toxic": 0.09803215662638347, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.533458352088928, + "loss_size": 2.1551299691200256, + "loss_pdi": 0.47677676876386005, + "loss_ee": 0.7799407144387563, + "loss_delivery": 0.6638170480728149, + "loss_biodist": 0.349340816338857, + "loss_toxic": 0.11235619088013966, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.213073750336965, + "loss_size": 2.070941517750422, + "loss_pdi": 0.40856675306955975, + "loss_ee": 0.7304698725541433, + "loss_delivery": 0.7343880335489908, + "loss_biodist": 0.09980805218219757, + "loss_toxic": 0.16575131316979727, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.220274964968364, + "loss_size": 1.9418311367432277, + "loss_pdi": 0.5001972615718842, + "loss_ee": 0.8348930279413859, + "loss_delivery": 0.6054362754027048, + "loss_biodist": 0.13444699347019196, + "loss_toxic": 0.20829975605010986, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 4.313011169433594, + "loss_size": 2.2030676305294037, + "loss_pdi": 0.36614329119523364, + "loss_ee": 0.7657052477200826, + "loss_delivery": 0.7487889031569163, + "loss_biodist": 0.09725691378116608, + "loss_toxic": 0.12932762006918588, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.871891895929972, + "loss_size": 1.8283031185468037, + "loss_pdi": 0.4723495543003082, + "loss_ee": 0.7260879675547282, + "loss_delivery": 0.6667743722597758, + "loss_biodist": 0.10258982578913371, + "loss_toxic": 0.08184227099021275, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.892843246459961, + "loss_size": 1.8570303916931152, + "loss_pdi": 0.43714167674382526, + "loss_ee": 0.7338299651940664, + "loss_delivery": 0.6806402603785197, + "loss_biodist": 0.10608401397864024, + "loss_toxic": 0.08255672703186671, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.915009021759033, + "loss_size": 1.887580672899882, + "loss_pdi": 0.42275914549827576, + "loss_ee": 0.7281539936860403, + "loss_delivery": 0.6997166474660238, + "loss_biodist": 0.10753046969572704, + "loss_toxic": 0.07313075910011928, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8695652173913043 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_3/splits.json b/models/abl_full/s1_baseline/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s1_baseline/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..9ff601a --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.7901166464922558, + "rmse": 1.3379524081566787, + "mae": 0.5590303131906562, + "r2": -0.012503619354828466 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6595745693785202, + "rmse": 0.8121419638083728, + "mae": 0.5407938919172196, + "r2": 0.3588151539119675 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.661793372319688, + "recall": 0.6825513196480939, + "f1": 0.6686674669867947 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5840653153153154, + "recall": 0.599270990447461, + "f1": 0.5746753246753248 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.95, + "precision": 0.75, + "recall": 0.9736842105263157, + "f1": 0.8198198198198199 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.20028836227278726, + "js_divergence": 0.049937479227155704 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_4/best_params.json b/models/abl_full/s1_baseline/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..0dd4931 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_4/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.26919128361241457, + "lr": 0.0008909017692547573, + "weight_decay": 9.871919386761893e-05, + "backbone_lr_ratio": 0.10881403588853521, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s1_baseline/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..84179ef --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 12} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_4/history.json b/models/abl_full/s1_baseline/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..5c449cc --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_4/history.json @@ -0,0 +1,258 @@ +{ + "train": [ + { + "loss": 5.595231321122911, + "loss_size": 1.1839522479308977, + "loss_pdi": 0.6729257073667314, + "loss_ee": 1.075638880332311, + "loss_delivery": 0.9437730138500532, + "loss_biodist": 1.1260581413904827, + "loss_toxic": 0.6060592151350446 + }, + { + "loss": 4.639838006761339, + "loss_size": 1.0754313990473747, + "loss_pdi": 0.625369002421697, + "loss_ee": 0.9961114095316993, + "loss_delivery": 0.8382789691289266, + "loss_biodist": 0.721036563316981, + "loss_toxic": 0.4075711866219838 + }, + { + "loss": 4.094899270269606, + "loss_size": 1.004522333542506, + "loss_pdi": 0.5886125796371036, + "loss_ee": 0.9341508017645942, + "loss_delivery": 0.7943624585039086, + "loss_biodist": 0.5192612277136909, + "loss_toxic": 0.28273969143629074 + }, + { + "loss": 3.8222215043173895, + "loss_size": 1.0109948880142636, + "loss_pdi": 0.5654200729396608, + "loss_ee": 0.9026512834760878, + "loss_delivery": 0.8094180805815591, + "loss_biodist": 0.408863328397274, + "loss_toxic": 0.1601414912276798 + }, + { + "loss": 3.403739419248369, + "loss_size": 0.9653827233446969, + "loss_pdi": 0.5261630614598592, + "loss_ee": 0.8332475655608707, + "loss_delivery": 0.6998005616996024, + "loss_biodist": 0.31920282708273995, + "loss_toxic": 0.09139471620114313 + }, + { + "loss": 3.3004104693730674, + "loss_size": 0.9118132177326415, + "loss_pdi": 0.5160764538579516, + "loss_ee": 0.7787083884080251, + "loss_delivery": 0.6926687616440985, + "loss_biodist": 0.27825497256384957, + "loss_toxic": 0.15196955762803555 + }, + { + "loss": 3.1182049910227456, + "loss_size": 0.9116067811846733, + "loss_pdi": 0.5113644252220789, + "loss_ee": 0.7740151551034715, + "loss_delivery": 0.5904112358887991, + "loss_biodist": 0.2735174712207582, + "loss_toxic": 0.08817623591878349 + }, + { + "loss": 2.9697708752420215, + "loss_size": 0.7829584280649821, + "loss_pdi": 0.49709691603978473, + "loss_ee": 0.7715644571516249, + "loss_delivery": 0.650741753478845, + "loss_biodist": 0.23108594864606857, + "loss_toxic": 0.06917133280593488 + }, + { + "loss": 2.936929007371267, + "loss_size": 0.9003308109111257, + "loss_pdi": 0.4637180914481481, + "loss_ee": 0.7399231162336137, + "loss_delivery": 0.5586378359132342, + "loss_biodist": 0.22390511176652378, + "loss_toxic": 0.08055410016742018 + }, + { + "loss": 2.7768101361062794, + "loss_size": 0.6965880054566596, + "loss_pdi": 0.48824302355448407, + "loss_ee": 0.7363911502891116, + "loss_delivery": 0.5831497386097908, + "loss_biodist": 0.24472905115948784, + "loss_toxic": 0.059548021708097726 + }, + { + "loss": 2.8497932420836554, + "loss_size": 0.7591909679273764, + "loss_pdi": 0.48939237164126503, + "loss_ee": 0.7746303362978829, + "loss_delivery": 0.5287295778592428, + "loss_biodist": 0.2293989182346397, + "loss_toxic": 0.10032574077033335 + }, + { + "loss": 2.8877300487624273, + "loss_size": 0.7499017897579405, + "loss_pdi": 0.4924188272820579, + "loss_ee": 0.7267551057868533, + "loss_delivery": 0.5910006670488251, + "loss_biodist": 0.2306723656753699, + "loss_toxic": 0.12704977796723446 + } + ], + "val": [ + { + "loss": 4.951508442560832, + "loss_size": 0.7575126687685648, + "loss_pdi": 0.6334818204243978, + "loss_ee": 1.0574791034062703, + "loss_delivery": 0.7090578771506747, + "loss_biodist": 1.1586121320724487, + "loss_toxic": 0.6608855525652567, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 4.170979658762614, + "loss_size": 0.5657947659492493, + "loss_pdi": 0.5647561947504679, + "loss_ee": 0.93976891040802, + "loss_delivery": 0.7305525317788124, + "loss_biodist": 0.7686646183331808, + "loss_toxic": 0.6286381383736929, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.587951978047689, + "loss_size": 0.5118454098701477, + "loss_pdi": 0.49248048663139343, + "loss_ee": 0.8489340345064799, + "loss_delivery": 0.70010299111406, + "loss_biodist": 0.45328495899836224, + "loss_toxic": 0.5979513178269068, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.40149195988973, + "loss_size": 0.30642780661582947, + "loss_pdi": 0.39163154860337573, + "loss_ee": 0.6825251877307892, + "loss_delivery": 0.6704287938773632, + "loss_biodist": 0.19783767064412436, + "loss_toxic": 1.1384821409980457, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.612094004948934, + "loss_size": 0.4379969338575999, + "loss_pdi": 0.3864056666692098, + "loss_ee": 0.6370339145263036, + "loss_delivery": 0.7303227235873541, + "loss_biodist": 0.1583778622249762, + "loss_toxic": 1.2403487414121628, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.936262925465902, + "loss_size": 0.4848108838001887, + "loss_pdi": 0.4384245773156484, + "loss_ee": 0.6231235327819983, + "loss_delivery": 0.7736449837684631, + "loss_biodist": 0.15557912488778433, + "loss_toxic": 0.4637433315316836, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.9137487411499023, + "loss_size": 0.3753274182478587, + "loss_pdi": 0.36579150954882306, + "loss_ee": 0.6489318336049715, + "loss_delivery": 0.8045151382684708, + "loss_biodist": 0.13289600859085718, + "loss_toxic": 0.5830482244491577, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.071545680363973, + "loss_size": 0.40580152968565625, + "loss_pdi": 0.3794499784708023, + "loss_ee": 0.6523361951112747, + "loss_delivery": 0.8165061851032078, + "loss_biodist": 0.13434462249279022, + "loss_toxic": 0.6777304336428642, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.9691779613494873, + "loss_size": 0.4135140875975291, + "loss_pdi": 0.38700851301352185, + "loss_ee": 0.6639018009106318, + "loss_delivery": 0.8097411928077539, + "loss_biodist": 0.13824120288093886, + "loss_toxic": 0.5578225553035736, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8584330876668296, + "loss_size": 0.38691479464372, + "loss_pdi": 0.3887040615081787, + "loss_ee": 0.6753135286271572, + "loss_delivery": 0.8105639110629758, + "loss_biodist": 0.13059528730809689, + "loss_toxic": 0.4719698553284009, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.887652635574341, + "loss_size": 0.3818443367878596, + "loss_pdi": 0.3719891682267189, + "loss_ee": 0.6681812778115273, + "loss_delivery": 0.8080568375686804, + "loss_biodist": 0.12677289421359697, + "loss_toxic": 0.5323583881060282, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.943228085835775, + "loss_size": 0.3836331069469452, + "loss_pdi": 0.37640736748774845, + "loss_ee": 0.6699009388685226, + "loss_delivery": 0.8047574162483215, + "loss_biodist": 0.12774107729395232, + "loss_toxic": 0.5802475971480211, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_4/splits.json b/models/abl_full/s1_baseline/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s1_baseline/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..c3d59c3 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.7761301185113868, + "rmse": 0.8809824734416609, + "mae": 0.4868293024677162, + "r2": -0.038558506277432514 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8724045566943844, + "rmse": 0.9340259935860374, + "mae": 0.6374844717953739, + "r2": 0.15639919541989333 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.7014607425441266, + "recall": 0.7426686217008798, + "f1": 0.7105824446267432 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6090232389251997, + "recall": 0.6632478632478632, + "f1": 0.6219283975033759 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.23172865065491569, + "js_divergence": 0.06330909380413241 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/pip_freeze.txt b/models/abl_full/s1_baseline/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s1_baseline/seed42/repro.txt b/models/abl_full/s1_baseline/seed42/repro.txt new file mode 100644 index 0000000..f2d0402 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T10:18:40+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=1 --batch-size 16 --use-mpnn diff --git a/models/abl_full/s1_baseline/seed42/strata_info.json b/models/abl_full/s1_baseline/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s1_baseline/seed42/summary.json b/models/abl_full/s1_baseline/seed42/summary.json new file mode 100644 index 0000000..fb5aa9c --- /dev/null +++ b/models/abl_full/s1_baseline/seed42/summary.json @@ -0,0 +1,352 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.2708449222533328, + "lr": 0.000991430410947854, + "weight_decay": 0.017147551517191443, + "backbone_lr_ratio": 0.43561339540605226, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 13, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.566862974660202, + "rmse": 1.2517439732869506, + "mae": 0.5613356892872288, + "r2": 0.04104129132919676 + }, + "delivery": { + "n_samples": 58, + "mse": 0.47028553218171953, + "rmse": 0.6857736741678843, + "mae": 0.5210600533875925, + "r2": 0.40223870972577835 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7458333333333333, + "recall": 0.7523164647184604, + "f1": 0.7489010022859153 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6966386554621847, + "recall": 0.7485714285714287, + "f1": 0.700510874324916 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.20122327746488497, + "js_divergence": 0.04018146399397734 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.32248545844049914, + "lr": 0.0009826983395023184, + "weight_decay": 0.012778379350481496, + "backbone_lr_ratio": 0.06065542527628115, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 9, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.331702512441025, + "rmse": 0.5759362051833736, + "mae": 0.44149345545364277, + "r2": -0.01290154523011866 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0846693440821236, + "rmse": 1.0414746007858875, + "mae": 0.6676197994011835, + "r2": 0.17898349918416012 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.5952380952380952, + "precision": 0.5436720142602496, + "recall": 0.5555555555555556, + "f1": 0.5360623781676414 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5595238095238095, + "precision": 0.5063813813813813, + "recall": 0.5141049426763712, + "f1": 0.4997539067306509 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.3161094471320723, + "js_divergence": 0.08013612372537363 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.10175834754304547, + "lr": 0.0006945620111173825, + "weight_decay": 0.01625672738871503, + "backbone_lr_ratio": 0.029086945171372888, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 15, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.41810017905356084, + "rmse": 0.646606664869425, + "mae": 0.49784872390418533, + "r2": 0.17425961655133881 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6790202850062702, + "rmse": 0.8240268715316693, + "mae": 0.571309769502841, + "r2": 0.09610631021195903 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6423197492163009, + "recall": 0.6664222873900294, + "f1": 0.6480643539467068 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5810820624546115, + "recall": 0.623015873015873, + "f1": 0.5905593448696896 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.28741923551931975, + "js_divergence": 0.07400667098115551 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.11798498673229349, + "lr": 0.0009464809649969671, + "weight_decay": 0.07051438027639334, + "backbone_lr_ratio": 0.8641000194900307, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 11, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.7901166464922558, + "rmse": 1.3379524081566787, + "mae": 0.5590303131906562, + "r2": -0.012503619354828466 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6595745693785202, + "rmse": 0.8121419638083728, + "mae": 0.5407938919172196, + "r2": 0.3588151539119675 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.661793372319688, + "recall": 0.6825513196480939, + "f1": 0.6686674669867947 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5840653153153154, + "recall": 0.599270990447461, + "f1": 0.5746753246753248 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.95, + "precision": 0.75, + "recall": 0.9736842105263157, + "f1": 0.8198198198198199 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.20028836227278726, + "js_divergence": 0.049937479227155704 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.26919128361241457, + "lr": 0.0008909017692547573, + "weight_decay": 9.871919386761893e-05, + "backbone_lr_ratio": 0.10881403588853521, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 12, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.7761301185113868, + "rmse": 0.8809824734416609, + "mae": 0.4868293024677162, + "r2": -0.038558506277432514 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8724045566943844, + "rmse": 0.9340259935860374, + "mae": 0.6374844717953739, + "r2": 0.15639919541989333 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.7014607425441266, + "recall": 0.7426686217008798, + "f1": 0.7105824446267432 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6090232389251997, + "recall": 0.6632478632478632, + "f1": 0.6219283975033759 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.23172865065491569, + "js_divergence": 0.06330909380413241 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.976582486231686, + "mse_std": 0.5963594058421813, + "rmse_mean": 0.9386443449876178, + "rmse_std": 0.30907811286866, + "mae_mean": 0.5093074968606859, + "mae_std": 0.045639036325825846, + "r2_mean": 0.030267447403631187, + "r2_std": 0.07652419024801474 + }, + "delivery": { + "mse_mean": 0.7531908574686035, + "mse_std": 0.20899310967661966, + "rmse_mean": 0.8594886207759702, + "rmse_std": 0.12029201230848217, + "mae_mean": 0.5876535972008421, + "mae_std": 0.05617003172137069, + "r2_mean": 0.23850857369075168, + "r2_std": 0.11987061343757097 + }, + "pdi": { + "accuracy_mean": 0.7142857142857142, + "accuracy_std": 0.0673435029701474, + "precision_mean": 0.6590158423347396, + "precision_std": 0.06771930178345034, + "recall_mean": 0.6799028498026038, + "recall_std": 0.07047590125597848, + "f1_mean": 0.6624555292027603, + "f1_std": 0.0721248119992936 + }, + "ee": { + "accuracy_mean": 0.6452380952380952, + "accuracy_std": 0.05016977977548923, + "precision_mean": 0.5954381307077385, + "precision_std": 0.06114350922554513, + "recall_mean": 0.6296422195917994, + "recall_std": 0.07692682031615919, + "f1_mean": 0.5974855696207915, + "f1_std": 0.06531680188025496 + }, + "toxic": { + "accuracy_mean": 0.9533729675867818, + "accuracy_std": 0.01171647555533869, + "precision_mean": 0.7528571428571429, + "precision_std": 0.027330180671012855, + "recall_mean": 0.9755250194451648, + "recall_std": 0.006213851706247248, + "f1_mean": 0.822434637832868, + "f1_std": 0.026567667174673414 + }, + "biodist": { + "kl_divergence_mean": 0.24735379460879597, + "kl_divergence_std": 0.04673308028747034, + "js_divergence_mean": 0.06151416634635892, + "js_divergence_std": 0.014799767616865855 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/local_uncommitted.patch b/models/abl_full/s1_both/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s1_both/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s1_both/seed42/outer_fold_0/best_params.json b/models/abl_full/s1_both/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..fe857df --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_0/best_params.json @@ -0,0 +1,16 @@ +{ + "dropout": 0.4108948503325973, + "lr": 0.0007340472227986773, + "weight_decay": 0.0007067135047679004, + "backbone_lr_ratio": 0.7321173243252591, + "moe_n_experts": 2, + "moe_top_k": 2, + "moe_expert_hidden_mult": 1, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s1_both/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..82d35d4 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 14} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_0/history.json b/models/abl_full/s1_both/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..fe9a2ab --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_0/history.json @@ -0,0 +1,328 @@ +{ + "train": [ + { + "loss": 5.400099200171393, + "loss_size": 0.8823040468064515, + "loss_pdi": 0.6812556498759502, + "loss_ee": 1.0784653425216675, + "loss_delivery": 1.0165383002242527, + "loss_biodist": 1.1444005257374532, + "loss_toxic": 0.5934148213347873, + "loss_moe_lb": 1.999999977446891 + }, + { + "loss": 4.204111298999271, + "loss_size": 0.8327704547224818, + "loss_pdi": 0.6399245173544497, + "loss_ee": 1.0011927485466003, + "loss_delivery": 0.845224013703095, + "loss_biodist": 0.5762553400284535, + "loss_toxic": 0.313652445537013, + "loss_moe_lb": 1.999999990334382 + }, + { + "loss": 3.768066009959659, + "loss_size": 0.8170974753998421, + "loss_pdi": 0.6213119199147096, + "loss_ee": 0.9148938607525181, + "loss_delivery": 0.8916980289929622, + "loss_biodist": 0.35265421726413676, + "loss_toxic": 0.18339438966752306, + "loss_moe_lb": 2.0 + }, + { + "loss": 3.7443795784099683, + "loss_size": 0.8354647985181293, + "loss_pdi": 0.6066541373729706, + "loss_ee": 0.8851948912079269, + "loss_delivery": 1.0085055058872379, + "loss_biodist": 0.29029415326344, + "loss_toxic": 0.1493166242498036, + "loss_moe_lb": 1.9999999871125091 + }, + { + "loss": 3.499276167637593, + "loss_size": 0.8638738892167002, + "loss_pdi": 0.5628914881396938, + "loss_ee": 0.9029648924196089, + "loss_delivery": 0.865693795117172, + "loss_biodist": 0.21755379871339411, + "loss_toxic": 0.12434523284507638, + "loss_moe_lb": 1.9999999935562547 + }, + { + "loss": 3.5330081018241675, + "loss_size": 0.7820458718248315, + "loss_pdi": 0.5551547770564621, + "loss_ee": 0.8933853394276386, + "loss_delivery": 0.989005317949262, + "loss_biodist": 0.20653205576377945, + "loss_toxic": 0.15761368533084524, + "loss_moe_lb": 1.999999977446891 + }, + { + "loss": 3.318131614375759, + "loss_size": 0.764020403696073, + "loss_pdi": 0.5151227450854069, + "loss_ee": 0.872619815774866, + "loss_delivery": 0.9253612577512458, + "loss_biodist": 0.1871767146764575, + "loss_toxic": 0.11265365003468154, + "loss_moe_lb": 1.9999999967781272 + }, + { + "loss": 3.1988877670184985, + "loss_size": 0.7646275287544405, + "loss_pdi": 0.5320992252311191, + "loss_ee": 0.8285162891890552, + "loss_delivery": 0.7588972472459883, + "loss_biodist": 0.20326888027626114, + "loss_toxic": 0.16523235014205598, + "loss_moe_lb": 1.9999999935562547 + }, + { + "loss": 2.9703359152819657, + "loss_size": 0.6830032755796974, + "loss_pdi": 0.501954268362071, + "loss_ee": 0.8167013405142604, + "loss_delivery": 0.7976664585640302, + "loss_biodist": 0.17228593788034208, + "loss_toxic": 0.06885367960343058, + "loss_moe_lb": 1.9999999871125091 + }, + { + "loss": 2.565713747127636, + "loss_size": 0.3230193958089158, + "loss_pdi": 0.5138459878193365, + "loss_ee": 0.7612508189033818, + "loss_delivery": 0.7678211121945768, + "loss_biodist": 0.16089659788318583, + "loss_toxic": 0.10352957973058487, + "loss_moe_lb": 1.9999999871125091 + }, + { + "loss": 2.964167301719253, + "loss_size": 0.6638369615617636, + "loss_pdi": 0.48985611103676463, + "loss_ee": 0.772022802282024, + "loss_delivery": 0.8712375029116064, + "loss_biodist": 0.15383520964029673, + "loss_toxic": 0.08995235672006635, + "loss_moe_lb": 1.9999999806687638 + }, + { + "loss": 2.6228387098054626, + "loss_size": 0.5342353371953642, + "loss_pdi": 0.463039289052422, + "loss_ee": 0.7535679332307867, + "loss_delivery": 0.7488482483738178, + "loss_biodist": 0.14714475761394244, + "loss_toxic": 0.051557072453834805, + "loss_moe_lb": 1.9999999967781272 + }, + { + "loss": 2.601656311267131, + "loss_size": 0.560483991042585, + "loss_pdi": 0.44463860022055135, + "loss_ee": 0.7165064908362724, + "loss_delivery": 0.769291910166676, + "loss_biodist": 0.14465474115835653, + "loss_toxic": 0.040929400137109634, + "loss_moe_lb": 1.9999999935562547 + }, + { + "loss": 2.4538051598780863, + "loss_size": 0.49438263657125264, + "loss_pdi": 0.4425109858448441, + "loss_ee": 0.7406848274372719, + "loss_delivery": 0.6696303382113173, + "loss_biodist": 0.15262043199225053, + "loss_toxic": 0.02877226605385265, + "loss_moe_lb": 1.999999990334382 + } + ], + "val": [ + { + "loss": 4.149928092956543, + "loss_size": 0.44090341343544426, + "loss_pdi": 0.6847947835922241, + "loss_ee": 1.0027188181877136, + "loss_delivery": 0.7304204341024161, + "loss_biodist": 0.8311094760894775, + "loss_toxic": 0.46597445011138916, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 3.800080585479736, + "loss_size": 0.49460249189287425, + "loss_pdi": 0.8068427205085754, + "loss_ee": 0.9725982129573822, + "loss_delivery": 0.6590877763926983, + "loss_biodist": 0.4985577404499054, + "loss_toxic": 0.3831261992454529, + "loss_moe_lb": 1.9999999523162841, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 3.882923984527588, + "loss_size": 0.48453460857272146, + "loss_pdi": 0.9176841259002686, + "loss_ee": 0.9536213561892509, + "loss_delivery": 0.7041484475135803, + "loss_biodist": 0.36803268045187, + "loss_toxic": 0.484267669566907, + "loss_moe_lb": 2.0, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.9 + }, + { + "loss": 4.024969005584717, + "loss_size": 0.5285034894943237, + "loss_pdi": 1.0518685221672057, + "loss_ee": 0.86401826441288, + "loss_delivery": 0.9207587957382202, + "loss_biodist": 0.18886734098196029, + "loss_toxic": 0.5104730214108713, + "loss_moe_lb": 1.9999999523162841, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.8761045932769775, + "loss_size": 0.37897889912128446, + "loss_pdi": 1.301726371049881, + "loss_ee": 0.8393121339380741, + "loss_delivery": 0.8618740364909172, + "loss_biodist": 0.2399044305086136, + "loss_toxic": 0.32361946450546386, + "loss_moe_lb": 1.9999999761581422, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.9 + }, + { + "loss": 3.6892258644104006, + "loss_size": 0.44566770195961, + "loss_pdi": 1.0844948768615723, + "loss_ee": 0.7679000589996576, + "loss_delivery": 0.7768170319497585, + "loss_biodist": 0.20787838250398635, + "loss_toxic": 0.45133246323093773, + "loss_moe_lb": 2.0, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.3939393939393939, + "acc_toxic": 0.9 + }, + { + "loss": 3.198654842376709, + "loss_size": 0.34323964416980746, + "loss_pdi": 1.1026686668395995, + "loss_ee": 0.7947472155094146, + "loss_delivery": 0.664758375287056, + "loss_biodist": 0.20282046347856522, + "loss_toxic": 0.1651931553366012, + "loss_moe_lb": 2.0, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.95 + }, + { + "loss": 2.689650774002075, + "loss_size": 0.28003521375358104, + "loss_pdi": 0.9093899607658387, + "loss_ee": 0.8276618905365467, + "loss_delivery": 0.5897062364965677, + "loss_biodist": 0.13434391915798188, + "loss_toxic": 0.033575344539713115, + "loss_moe_lb": 2.000000023841858, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5151515151515151, + "acc_toxic": 1.0 + }, + { + "loss": 3.546375370025635, + "loss_size": 0.31427572667598724, + "loss_pdi": 1.1522727251052856, + "loss_ee": 0.8625796323642134, + "loss_delivery": 0.6758572697639466, + "loss_biodist": 0.17268332988023757, + "loss_toxic": 0.43319647138996514, + "loss_moe_lb": 1.9999999523162841, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.1686388492584228, + "loss_size": 0.3039375368505716, + "loss_pdi": 1.0021734952926635, + "loss_ee": 0.7893130667507648, + "loss_delivery": 0.6568111717700958, + "loss_biodist": 0.14740753322839736, + "loss_toxic": 0.3326639760110993, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 2.828946590423584, + "loss_size": 0.2690973848104477, + "loss_pdi": 1.0582403063774108, + "loss_ee": 0.7890313200652599, + "loss_delivery": 0.6396413296461105, + "loss_biodist": 0.140879487991333, + "loss_toxic": 0.03787025979545433, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5454545454545454, + "acc_toxic": 1.0 + }, + { + "loss": 2.965114641189575, + "loss_size": 0.31102419793605807, + "loss_pdi": 1.0872425794601441, + "loss_ee": 0.7800759710371494, + "loss_delivery": 0.648045665025711, + "loss_biodist": 0.15429325103759767, + "loss_toxic": 0.08624297480710083, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 3.034215879440308, + "loss_size": 0.31441564708948133, + "loss_pdi": 1.1123341083526612, + "loss_ee": 0.7961474736221135, + "loss_delivery": 0.6239923983812332, + "loss_biodist": 0.1533489406108856, + "loss_toxic": 0.1322808950993931, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 1.0 + }, + { + "loss": 2.972694444656372, + "loss_size": 0.30653163194656374, + "loss_pdi": 1.1311804890632629, + "loss_ee": 0.7937454930506647, + "loss_delivery": 0.6065988793969155, + "loss_biodist": 0.1408291682600975, + "loss_toxic": 0.09733039969723904, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5454545454545454, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_0/splits.json b/models/abl_full/s1_both/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s1_both/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..57f35e2 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.65548933352636, + "rmse": 1.2866582038468337, + "mae": 0.5746945666081934, + "r2": -0.013200221826040748 + }, + "delivery": { + "n_samples": 58, + "mse": 0.5966502866071148, + "rmse": 0.7724314122348436, + "mae": 0.600902550468414, + "r2": 0.24162148150681173 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7619047619047619, + "precision": 0.7006414825374199, + "recall": 0.7006414825374199, + "f1": 0.7006414825374199 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.717012617012617, + "recall": 0.7409523809523809, + "f1": 0.7039699318769087 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9827586206896551, + "precision": 0.9912280701754386, + "recall": 0.75, + "f1": 0.8289085545722714 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.16024890157851573, + "js_divergence": 0.032467622854324446 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_1/best_params.json b/models/abl_full/s1_both/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..acdba87 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_1/best_params.json @@ -0,0 +1,16 @@ +{ + "dropout": 0.24482591245144014, + "lr": 0.00042458936788614755, + "weight_decay": 0.00014902327669828248, + "backbone_lr_ratio": 0.24808069123277332, + "moe_n_experts": 2, + "moe_top_k": 1, + "moe_expert_hidden_mult": 1, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s1_both/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..89e65d1 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 7} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_1/history.json b/models/abl_full/s1_both/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..01dbdef --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_1/history.json @@ -0,0 +1,167 @@ +{ + "train": [ + { + "loss": 5.600405757491653, + "loss_size": 1.2000684311261047, + "loss_pdi": 0.6828988838840175, + "loss_ee": 1.0604768153783437, + "loss_delivery": 0.8591992943673521, + "loss_biodist": 1.1980015538834237, + "loss_toxic": 0.6019431312341947, + "loss_moe_lb": 1.0064576300414834 + }, + { + "loss": 4.742360991400641, + "loss_size": 1.0796409442618087, + "loss_pdi": 0.6460769281194017, + "loss_ee": 0.9675167895652153, + "loss_delivery": 0.8959972065546222, + "loss_biodist": 0.7482811027281994, + "loss_toxic": 0.41472573658904516, + "loss_moe_lb": 1.0050648241429716 + }, + { + "loss": 4.254786182094264, + "loss_size": 1.1664461914349247, + "loss_pdi": 0.6028806623574849, + "loss_ee": 0.9201007727030162, + "loss_delivery": 0.8821316807455307, + "loss_biodist": 0.4595999757985811, + "loss_toxic": 0.23364325109365824, + "loss_moe_lb": 1.0039539433814384 + }, + { + "loss": 3.7494558546994186, + "loss_size": 1.1098671801186897, + "loss_pdi": 0.5598839118673995, + "loss_ee": 0.8385547004841469, + "loss_delivery": 0.7759733399426615, + "loss_biodist": 0.3402977386439169, + "loss_toxic": 0.13544689199408969, + "loss_moe_lb": 1.0069729911314476 + }, + { + "loss": 3.5292408047495663, + "loss_size": 1.080890902997674, + "loss_pdi": 0.5336942487471813, + "loss_ee": 0.8007064501981478, + "loss_delivery": 0.7067823821326366, + "loss_biodist": 0.28604381209289703, + "loss_toxic": 0.13082139748714966, + "loss_moe_lb": 1.0036791095862518 + }, + { + "loss": 3.280233860015869, + "loss_size": 1.0479851067066193, + "loss_pdi": 0.4890121052394042, + "loss_ee": 0.7543886859674711, + "loss_delivery": 0.6291292678262737, + "loss_biodist": 0.26939965200585286, + "loss_toxic": 0.09769973801952359, + "loss_moe_lb": 1.0032514800896515 + }, + { + "loss": 3.3657465367703825, + "loss_size": 1.0007865732988797, + "loss_pdi": 0.5091070810685286, + "loss_ee": 0.733278718349096, + "loss_delivery": 0.769810107108709, + "loss_biodist": 0.263388701991455, + "loss_toxic": 0.09867539737260321, + "loss_moe_lb": 1.004341889072109 + } + ], + "val": [ + { + "loss": 3.6868560791015623, + "loss_size": 0.5512764737010002, + "loss_pdi": 0.6596759557723999, + "loss_ee": 0.9739189267158508, + "loss_delivery": 0.20791610032320024, + "loss_biodist": 0.8941343069076538, + "loss_toxic": 0.40256049036979674, + "loss_moe_lb": 1.0218846678733826, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.7243490695953367, + "loss_size": 0.5449142195284367, + "loss_pdi": 0.6435503244400025, + "loss_ee": 0.863824188709259, + "loss_delivery": 0.2041028030216694, + "loss_biodist": 0.3623921275138855, + "loss_toxic": 0.09837098270654679, + "loss_moe_lb": 1.0318222165107727, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 2.5498147010803223, + "loss_size": 0.5333899289369584, + "loss_pdi": 0.6478025674819946, + "loss_ee": 0.7340908885002136, + "loss_delivery": 0.27008581161499023, + "loss_biodist": 0.34742590188980105, + "loss_toxic": 0.013959044264629484, + "loss_moe_lb": 1.022853970527649, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.701027178764343, + "loss_size": 0.5317124128341675, + "loss_pdi": 0.6931547701358796, + "loss_ee": 0.6460031867027283, + "loss_delivery": 0.5111799478530884, + "loss_biodist": 0.318424254655838, + "loss_toxic": 0.003251659439411014, + "loss_moe_lb": 1.003060233592987, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.322146010398865, + "loss_size": 0.4438261866569519, + "loss_pdi": 0.6595357298851013, + "loss_ee": 0.6595715552568435, + "loss_delivery": 0.2990713447332382, + "loss_biodist": 0.25748171210289, + "loss_toxic": 0.0028742717579007147, + "loss_moe_lb": 1.0017499089241029, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.2509952545166017, + "loss_size": 0.43093053102493284, + "loss_pdi": 0.6347038090229035, + "loss_ee": 0.6181163638830185, + "loss_delivery": 0.31103180050849916, + "loss_biodist": 0.2523608267307281, + "loss_toxic": 0.0028693197993561624, + "loss_moe_lb": 1.0072155237197875, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.3216882705688477, + "loss_size": 0.43943057060241697, + "loss_pdi": 0.6587613582611084, + "loss_ee": 0.622439831495285, + "loss_delivery": 0.33744184076786043, + "loss_biodist": 0.26239258944988253, + "loss_toxic": 0.002155938057694584, + "loss_moe_lb": 1.0101934671401978, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_1/splits.json b/models/abl_full/s1_both/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s1_both/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..3a783e0 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3445300972529715, + "rmse": 0.5869668621421242, + "mae": 0.4555579432108927, + "r2": -0.05207242874852769 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0775295165871506, + "rmse": 1.0380411921437176, + "mae": 0.6340284446773471, + "r2": 0.18438783389531754 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.5972915181753385, + "recall": 0.6031746031746031, + "f1": 0.5997067448680352 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.47222222222222215, + "recall": 0.4779744065458351, + "f1": 0.46562819203268635 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.24783434314436234, + "js_divergence": 0.0666961611545551 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_2/best_params.json b/models/abl_full/s1_both/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..1291ad2 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_2/best_params.json @@ -0,0 +1,16 @@ +{ + "dropout": 0.330147494187667, + "lr": 0.0007391626870428583, + "weight_decay": 0.08248214185502709, + "backbone_lr_ratio": 0.3321485864522685, + "moe_n_experts": 4, + "moe_top_k": 1, + "moe_expert_hidden_mult": 1, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s1_both/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..17fb17e --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 10} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_2/history.json b/models/abl_full/s1_both/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..0145905 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_2/history.json @@ -0,0 +1,236 @@ +{ + "train": [ + { + "loss": 5.152713775634766, + "loss_size": 0.8612007083925041, + "loss_pdi": 0.6876318486961158, + "loss_ee": 1.0617679599169139, + "loss_delivery": 0.9683949065369528, + "loss_biodist": 1.0637048104324855, + "loss_toxic": 0.5132733631778408, + "loss_moe_lb": 1.0177504887451996 + }, + { + "loss": 4.2314953997328475, + "loss_size": 0.8170983128853746, + "loss_pdi": 0.6610435166874448, + "loss_ee": 0.9547245228612745, + "loss_delivery": 0.8227231446150187, + "loss_biodist": 0.6459103758270676, + "loss_toxic": 0.3464304328568884, + "loss_moe_lb": 1.0108283081570186 + }, + { + "loss": 3.750632695249609, + "loss_size": 0.7929803255844761, + "loss_pdi": 0.593320668549151, + "loss_ee": 0.9024315122011546, + "loss_delivery": 0.8082113729135411, + "loss_biodist": 0.4675642582210335, + "loss_toxic": 0.20891104418331305, + "loss_moe_lb": 1.0160694025658272 + }, + { + "loss": 3.809421558637877, + "loss_size": 0.8187293212961506, + "loss_pdi": 0.6209371025497848, + "loss_ee": 0.8522474620793317, + "loss_delivery": 0.971913101705345, + "loss_biodist": 0.37334723005423676, + "loss_toxic": 0.2086577709588046, + "loss_moe_lb": 1.0108439245739498 + }, + { + "loss": 3.5215162812052547, + "loss_size": 0.7850020717124682, + "loss_pdi": 0.5633785048046628, + "loss_ee": 0.8283515363126188, + "loss_delivery": 0.8907835570138853, + "loss_biodist": 0.2965107239984177, + "loss_toxic": 0.19142280418954388, + "loss_moe_lb": 1.0072002684747852 + }, + { + "loss": 3.198103382780745, + "loss_size": 0.738623615253616, + "loss_pdi": 0.5287548682174167, + "loss_ee": 0.8442864297209559, + "loss_delivery": 0.7745753369621329, + "loss_biodist": 0.23759525510910395, + "loss_toxic": 0.1121889049426426, + "loss_moe_lb": 1.0110071913616077 + }, + { + "loss": 3.0494969567737065, + "loss_size": 0.7034210447926779, + "loss_pdi": 0.5016100636205157, + "loss_ee": 0.7678506028007817, + "loss_delivery": 0.653912561366687, + "loss_biodist": 0.23800816628578547, + "loss_toxic": 0.2103397584255986, + "loss_moe_lb": 1.0078407703219234 + }, + { + "loss": 2.7809914350509644, + "loss_size": 0.6419068256745467, + "loss_pdi": 0.5048889320444416, + "loss_ee": 0.7783925090287183, + "loss_delivery": 0.5467462676602441, + "loss_biodist": 0.23822186907400955, + "loss_toxic": 0.10388507783834545, + "loss_moe_lb": 1.0072059244722933 + }, + { + "loss": 2.8093391431344523, + "loss_size": 0.6376639669005936, + "loss_pdi": 0.4999076144115345, + "loss_ee": 0.7432701736688614, + "loss_delivery": 0.6609656624495983, + "loss_biodist": 0.20728998631238937, + "loss_toxic": 0.09592864762148443, + "loss_moe_lb": 1.0073097573744285 + }, + { + "loss": 2.763327427812525, + "loss_size": 0.6375405836749721, + "loss_pdi": 0.4994223685683431, + "loss_ee": 0.746296464591413, + "loss_delivery": 0.6282920932044854, + "loss_biodist": 0.1821774451716526, + "loss_toxic": 0.10435734552526343, + "loss_moe_lb": 1.0079195080576717 + } + ], + "val": [ + { + "loss": 7.724205446243286, + "loss_size": 3.4674210086464883, + "loss_pdi": 0.6508873462677002, + "loss_ee": 1.0635061860084534, + "loss_delivery": 1.9029634714126586, + "loss_biodist": 0.5229972720146179, + "loss_toxic": 0.12300186306238174, + "loss_moe_lb": 1.0304514646530152, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5454545454545454, + "acc_toxic": 1.0 + }, + { + "loss": 7.370360422134399, + "loss_size": 3.467023845016956, + "loss_pdi": 0.6449822664260865, + "loss_ee": 0.9673564076423645, + "loss_delivery": 1.9023066341876984, + "loss_biodist": 0.3448571443557739, + "loss_toxic": 0.0791855052113533, + "loss_moe_lb": 1.038755679130554, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.128422689437866, + "loss_size": 3.4471570923924446, + "loss_pdi": 0.6080391645431519, + "loss_ee": 1.0527662873268127, + "loss_delivery": 1.7938429474830628, + "loss_biodist": 0.23303972482681273, + "loss_toxic": 0.061180700571276246, + "loss_moe_lb": 1.0203991174697875, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 6.809806776046753, + "loss_size": 3.255460247397423, + "loss_pdi": 0.6362621784210205, + "loss_ee": 0.9918401598930359, + "loss_delivery": 1.7496135592460633, + "loss_biodist": 0.19902592599391938, + "loss_toxic": 0.05351642244495451, + "loss_moe_lb": 1.0118896961212158, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.5712010860443115, + "loss_size": 3.3117038667201997, + "loss_pdi": 0.6905999302864074, + "loss_ee": 0.9391629934310913, + "loss_delivery": 1.5461100190877914, + "loss_biodist": 0.12436708956956863, + "loss_toxic": 0.03854238981730305, + "loss_moe_lb": 1.0100578308105468, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 6.109503126144409, + "loss_size": 3.024673792719841, + "loss_pdi": 0.6201795876026154, + "loss_ee": 0.92969890832901, + "loss_delivery": 1.4628742456436157, + "loss_biodist": 0.12257246896624566, + "loss_toxic": 0.028115913399960845, + "loss_moe_lb": 1.0112135887145997, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.1416528701782225, + "loss_size": 2.9167025655508043, + "loss_pdi": 0.6443653285503388, + "loss_ee": 1.0066563487052917, + "loss_delivery": 1.4425293743610381, + "loss_biodist": 0.1540301412343979, + "loss_toxic": 0.06369881336577236, + "loss_moe_lb": 1.010964584350586, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 6.189666986465454, + "loss_size": 2.9956638380885123, + "loss_pdi": 0.6736391186714172, + "loss_ee": 1.046317207813263, + "loss_delivery": 1.395979829132557, + "loss_biodist": 0.12292753309011459, + "loss_toxic": 0.04645174202742055, + "loss_moe_lb": 1.015622067451477, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.373043394088745, + "loss_size": 3.116128545999527, + "loss_pdi": 0.6364896595478058, + "loss_ee": 1.0502041697502136, + "loss_delivery": 1.45866639316082, + "loss_biodist": 0.12851292118430138, + "loss_toxic": 0.07333654393441975, + "loss_moe_lb": 1.0123448848724366, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 6.115008068084717, + "loss_size": 2.921285180747509, + "loss_pdi": 0.6241236627101898, + "loss_ee": 1.0314197301864625, + "loss_delivery": 1.4467920392751694, + "loss_biodist": 0.12439441233873368, + "loss_toxic": 0.05612772112363018, + "loss_moe_lb": 1.014252781867981, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_2/splits.json b/models/abl_full/s1_both/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s1_both/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..0a9a765 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.393067832783495, + "rmse": 0.6269512204179006, + "mae": 0.48754836206457447, + "r2": 0.22369805318261293 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6293676153394357, + "rmse": 0.7933269284093637, + "mae": 0.5411118950306748, + "r2": 0.16220261953292037 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.6282346175963197, + "recall": 0.6634897360703812, + "f1": 0.6212097651998134 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.6078622482131254, + "recall": 0.6720354808590102, + "f1": 0.6212949538882847 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.18339582654236564, + "js_divergence": 0.04379028402728257 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_3/best_params.json b/models/abl_full/s1_both/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..48a4372 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_3/best_params.json @@ -0,0 +1,16 @@ +{ + "dropout": 0.2277771320023231, + "lr": 0.0009696339767409517, + "weight_decay": 0.0003933823864828228, + "backbone_lr_ratio": 0.4073135560471746, + "moe_n_experts": 4, + "moe_top_k": 2, + "moe_expert_hidden_mult": 2, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s1_both/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..84179ef --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 12} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_3/history.json b/models/abl_full/s1_both/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..7682b53 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_3/history.json @@ -0,0 +1,282 @@ +{ + "train": [ + { + "loss": 4.569545784512082, + "loss_size": 0.51101915538311, + "loss_pdi": 0.6594580573004645, + "loss_ee": 1.0284118587906297, + "loss_delivery": 0.942825937895356, + "loss_biodist": 0.9342355389852781, + "loss_toxic": 0.488486493761475, + "loss_moe_lb": 2.134706339320621 + }, + { + "loss": 3.37780880283665, + "loss_size": 0.47524130847808477, + "loss_pdi": 0.6199308311617052, + "loss_ee": 0.9292109125369304, + "loss_delivery": 0.8265461688106125, + "loss_biodist": 0.3766151179332991, + "loss_toxic": 0.15161741836424414, + "loss_moe_lb": 2.238398210422413 + }, + { + "loss": 3.0872007962819694, + "loss_size": 0.4445550103445311, + "loss_pdi": 0.5805639914564185, + "loss_ee": 0.8806364053004497, + "loss_delivery": 0.802079865960656, + "loss_biodist": 0.28683041116675817, + "loss_toxic": 0.1158963359871327, + "loss_moe_lb": 2.271572357899434 + }, + { + "loss": 3.1701637506484985, + "loss_size": 0.5009561811347265, + "loss_pdi": 0.5923459135197304, + "loss_ee": 0.8842877270402135, + "loss_delivery": 0.8306604349935377, + "loss_biodist": 0.23747707822838346, + "loss_toxic": 0.16886883977221678, + "loss_moe_lb": 2.1245123921213924 + }, + { + "loss": 2.801817297935486, + "loss_size": 0.4014007754221156, + "loss_pdi": 0.5715829125932745, + "loss_ee": 0.8310141136517396, + "loss_delivery": 0.7431407951422639, + "loss_biodist": 0.2067834861777924, + "loss_toxic": 0.10440129139051596, + "loss_moe_lb": 2.195342672837747 + }, + { + "loss": 2.632911917325613, + "loss_size": 0.40186479264819946, + "loss_pdi": 0.5458749492426176, + "loss_ee": 0.7789210926842045, + "loss_delivery": 0.727295874995557, + "loss_biodist": 0.20429579923684532, + "loss_toxic": 0.044171577916622976, + "loss_moe_lb": 2.305464100193333 + }, + { + "loss": 2.601001562298955, + "loss_size": 0.40228870470781586, + "loss_pdi": 0.4918990400997368, + "loss_ee": 0.7510785339651881, + "loss_delivery": 0.6971234280515362, + "loss_biodist": 0.22326555626617894, + "loss_toxic": 0.1021743980983612, + "loss_moe_lb": 2.2410518672015214 + }, + { + "loss": 2.460212440104098, + "loss_size": 0.3730814474055896, + "loss_pdi": 0.5026364958769566, + "loss_ee": 0.7198781137530869, + "loss_delivery": 0.676776959686666, + "loss_biodist": 0.20135338423219887, + "loss_toxic": 0.06579114676148763, + "loss_moe_lb": 2.2458660634788306 + }, + { + "loss": 2.144416024556031, + "loss_size": 0.29755874320461945, + "loss_pdi": 0.483699955448911, + "loss_ee": 0.6816173324713836, + "loss_delivery": 0.5690391652185369, + "loss_biodist": 0.14466739153942546, + "loss_toxic": 0.05192437559595124, + "loss_moe_lb": 2.250629737570479 + }, + { + "loss": 2.1561906949893848, + "loss_size": 0.3470781880456048, + "loss_pdi": 0.48051307974634944, + "loss_ee": 0.6305385231971741, + "loss_delivery": 0.5764511368564658, + "loss_biodist": 0.16402359800161542, + "loss_toxic": 0.04081225873921318, + "loss_moe_lb": 2.2769794818517326 + }, + { + "loss": 2.147863330067815, + "loss_size": 0.3142247807133842, + "loss_pdi": 0.45880394932386037, + "loss_ee": 0.6344889354061436, + "loss_delivery": 0.5934505949954729, + "loss_biodist": 0.1279825611493072, + "loss_toxic": 0.09801903067135434, + "loss_moe_lb": 2.289356534545486 + }, + { + "loss": 2.158412657879494, + "loss_size": 0.28873550851602814, + "loss_pdi": 0.4422310614908064, + "loss_ee": 0.6521380088619284, + "loss_delivery": 0.646223750871581, + "loss_biodist": 0.18561462544508883, + "loss_toxic": 0.0354608225309651, + "loss_moe_lb": 2.2619870224514522 + } + ], + "val": [ + { + "loss": 5.1847528457641605, + "loss_size": 2.5386213794350625, + "loss_pdi": 0.5081074416637421, + "loss_ee": 0.8049288988113403, + "loss_delivery": 0.8281367182731628, + "loss_biodist": 0.3098487854003906, + "loss_toxic": 0.1897735118865967, + "loss_moe_lb": 2.2047547817230226, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.7575757575757576, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.109101510047912, + "loss_size": 2.5453438371419908, + "loss_pdi": 0.5378552436828613, + "loss_ee": 0.7293476760387421, + "loss_delivery": 0.7961073100566864, + "loss_biodist": 0.1953234553337097, + "loss_toxic": 0.2989704024977982, + "loss_moe_lb": 2.330738067626953, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.08425362110138, + "loss_size": 2.5647606000304224, + "loss_pdi": 0.5694735109806061, + "loss_ee": 0.7568024694919586, + "loss_delivery": 0.8387516289949417, + "loss_biodist": 0.22799606323242189, + "loss_toxic": 0.13167614876292646, + "loss_moe_lb": 2.4430124759674072, + "acc_pdi": 0.8484848484848485, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.366823887825012, + "loss_size": 2.4924990072846414, + "loss_pdi": 0.5948927760124206, + "loss_ee": 0.8248458862304687, + "loss_delivery": 0.9075531393289566, + "loss_biodist": 0.10045709162950515, + "loss_toxic": 0.4450825572013855, + "loss_moe_lb": 2.324281406402588, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 4.645944857597351, + "loss_size": 2.4076855540275575, + "loss_pdi": 0.5596936345100403, + "loss_ee": 0.7976774662733078, + "loss_delivery": 0.7818437159061432, + "loss_biodist": 0.12929453700780869, + "loss_toxic": 0.006101569114252925, + "loss_moe_lb": 2.4937999725341795, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 4.697916913032532, + "loss_size": 2.4932262122631075, + "loss_pdi": 0.45069290697574615, + "loss_ee": 0.8065684795379638, + "loss_delivery": 0.8043429493904114, + "loss_biodist": 0.10116395205259324, + "loss_toxic": 0.0682488625869155, + "loss_moe_lb": 2.503563070297241, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.9565217391304348 + }, + { + "loss": 3.907198989391327, + "loss_size": 1.7621939539909364, + "loss_pdi": 0.5401753157377243, + "loss_ee": 0.7660549342632293, + "loss_delivery": 0.8160712867975235, + "loss_biodist": 0.06947531178593636, + "loss_toxic": 0.008720425050705671, + "loss_moe_lb": 2.3909900188446045, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 4.236720025539398, + "loss_size": 1.9035443931818008, + "loss_pdi": 0.5434452652931213, + "loss_ee": 0.8244865417480469, + "loss_delivery": 0.7739835530519485, + "loss_biodist": 0.08717839270830155, + "loss_toxic": 0.14043191839009522, + "loss_moe_lb": 2.5653082847595217, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.250156939029694, + "loss_size": 2.0814326971769335, + "loss_pdi": 0.5545522332191467, + "loss_ee": 0.7970958948135376, + "loss_delivery": 0.7647629588842392, + "loss_biodist": 0.08868260681629181, + "loss_toxic": 0.014030593819916249, + "loss_moe_lb": 2.4910370349884032, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 4.149299383163452, + "loss_size": 2.0315980494022368, + "loss_pdi": 0.5397499829530716, + "loss_ee": 0.7687326192855835, + "loss_delivery": 0.7619759574532509, + "loss_biodist": 0.08105204850435258, + "loss_toxic": 0.014889129810035229, + "loss_moe_lb": 2.4313738346099854, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 4.155077862739563, + "loss_size": 2.040539914369583, + "loss_pdi": 0.5315758883953094, + "loss_ee": 0.7787100493907928, + "loss_delivery": 0.7530814379453659, + "loss_biodist": 0.08297589719295502, + "loss_toxic": 0.016451931186020376, + "loss_moe_lb": 2.41774845123291, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + }, + { + "loss": 4.18879998922348, + "loss_size": 2.0906561225652696, + "loss_pdi": 0.5260936617851257, + "loss_ee": 0.7939959585666656, + "loss_delivery": 0.7198820084333419, + "loss_biodist": 0.08342803865671158, + "loss_toxic": 0.019746014662086964, + "loss_moe_lb": 2.5341875076293947, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_3/splits.json b/models/abl_full/s1_both/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s1_both/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..7d5d1ad --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.732527790200732, + "rmse": 1.316255214690803, + "mae": 0.5408693312566324, + "r2": 0.020069076700442334 + }, + "delivery": { + "n_samples": 59, + "mse": 0.5845268150974521, + "rmse": 0.7645435338144271, + "mae": 0.48413719012701917, + "r2": 0.43177048756483927 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6445623342175066, + "recall": 0.6598240469208211, + "f1": 0.6499999999999999 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5734711041691698, + "recall": 0.5891402714932127, + "f1": 0.5722830194879885 + }, + "toxic": { + "n_samples": 60, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.17380496676972265, + "js_divergence": 0.04216868552091467 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_4/best_params.json b/models/abl_full/s1_both/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..c6208a9 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_4/best_params.json @@ -0,0 +1,16 @@ +{ + "dropout": 0.3336459802315832, + "lr": 0.0005171929496634874, + "weight_decay": 0.00014235198757319405, + "backbone_lr_ratio": 0.23125566110577128, + "moe_n_experts": 4, + "moe_top_k": 1, + "moe_expert_hidden_mult": 2, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s1_both/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..54e2f4a --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 15} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_4/history.json b/models/abl_full/s1_both/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..610ee09 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_4/history.json @@ -0,0 +1,351 @@ +{ + "train": [ + { + "loss": 5.680578869742316, + "loss_size": 1.2022036297901257, + "loss_pdi": 0.6911368241181245, + "loss_ee": 1.0734195048744615, + "loss_delivery": 0.9642648278055964, + "loss_biodist": 1.1189431129275142, + "loss_toxic": 0.6355154474039335, + "loss_moe_lb": 1.014740307588835 + }, + { + "loss": 4.765572709006232, + "loss_size": 1.1344646789334916, + "loss_pdi": 0.6499590873718262, + "loss_ee": 0.9887724277135488, + "loss_delivery": 0.9160404706726203, + "loss_biodist": 0.7015261118476456, + "loss_toxic": 0.3907836750149727, + "loss_moe_lb": 1.0150076376425254 + }, + { + "loss": 4.156623608357197, + "loss_size": 1.0709048078672305, + "loss_pdi": 0.6151477767003549, + "loss_ee": 0.9343209894927772, + "loss_delivery": 0.8577545055666486, + "loss_biodist": 0.45242498412325577, + "loss_toxic": 0.24410111336289225, + "loss_moe_lb": 1.0136639266400724 + }, + { + "loss": 3.9063501454688407, + "loss_size": 1.089860464169367, + "loss_pdi": 0.5839312841763368, + "loss_ee": 0.8959324150472074, + "loss_delivery": 0.8326679516482998, + "loss_biodist": 0.38330864543850357, + "loss_toxic": 0.14612759270931822, + "loss_moe_lb": 1.014538325167991 + }, + { + "loss": 3.6442219631091968, + "loss_size": 1.046444315966722, + "loss_pdi": 0.5602038599349357, + "loss_ee": 0.8457985858659487, + "loss_delivery": 0.7992855243988939, + "loss_biodist": 0.28028731778062677, + "loss_toxic": 0.13772701998587344, + "loss_moe_lb": 1.0089692811708193 + }, + { + "loss": 3.381216609800184, + "loss_size": 0.9339583967183087, + "loss_pdi": 0.5592660098462492, + "loss_ee": 0.7949836165518374, + "loss_delivery": 0.7507806774732229, + "loss_biodist": 0.2502414948634199, + "loss_toxic": 0.11885321380356578, + "loss_moe_lb": 1.0067246524063316 + }, + { + "loss": 3.2430329612783484, + "loss_size": 0.9114083891382089, + "loss_pdi": 0.5375848372240324, + "loss_ee": 0.7590855496960718, + "loss_delivery": 0.7241743039843198, + "loss_biodist": 0.26210401146798523, + "loss_toxic": 0.07838027146519036, + "loss_moe_lb": 1.0080170518643148 + }, + { + "loss": 3.1356499968348324, + "loss_size": 0.9067966339958681, + "loss_pdi": 0.5147047103256792, + "loss_ee": 0.7055981916350287, + "loss_delivery": 0.6798053444237322, + "loss_biodist": 0.21082492353948387, + "loss_toxic": 0.14361976250074804, + "loss_moe_lb": 1.009807647885503 + }, + { + "loss": 3.023964817459519, + "loss_size": 0.8821804201280748, + "loss_pdi": 0.5139715494336309, + "loss_ee": 0.70211508789578, + "loss_delivery": 0.6402809840400476, + "loss_biodist": 0.23446231858955846, + "loss_toxic": 0.08247374256992575, + "loss_moe_lb": 1.008427167260969 + }, + { + "loss": 2.856579084654112, + "loss_size": 0.7948662580267803, + "loss_pdi": 0.4746360078051284, + "loss_ee": 0.6806415633575337, + "loss_delivery": 0.6573987685748048, + "loss_biodist": 0.18960444025091222, + "loss_toxic": 0.09040604041247452, + "loss_moe_lb": 1.0075585326632939 + }, + { + "loss": 2.8019687742800325, + "loss_size": 0.8278479398907842, + "loss_pdi": 0.460802086301752, + "loss_ee": 0.6500890544942908, + "loss_delivery": 0.6351628176666595, + "loss_biodist": 0.1869376974331366, + "loss_toxic": 0.07301888717149661, + "loss_moe_lb": 1.0091518373102755 + }, + { + "loss": 2.7244543255986393, + "loss_size": 0.7427939452432297, + "loss_pdi": 0.4803756282136247, + "loss_ee": 0.6142273867452467, + "loss_delivery": 0.7031263080803124, + "loss_biodist": 0.17056602118788539, + "loss_toxic": 0.04867922334233299, + "loss_moe_lb": 1.0074441594046515 + }, + { + "loss": 2.6336539951530664, + "loss_size": 0.7012463568432911, + "loss_pdi": 0.48251094246232834, + "loss_ee": 0.6156406793239955, + "loss_delivery": 0.5994453307341885, + "loss_biodist": 0.18510015973368207, + "loss_toxic": 0.0808833715461849, + "loss_moe_lb": 1.0071548481245298 + }, + { + "loss": 2.6584195768510974, + "loss_size": 0.7399039272520993, + "loss_pdi": 0.44409773116176193, + "loss_ee": 0.6209098680599315, + "loss_delivery": 0.6400474600896642, + "loss_biodist": 0.17861945927143097, + "loss_toxic": 0.06789067981141694, + "loss_moe_lb": 1.0057777069710396 + }, + { + "loss": 2.552385117556598, + "loss_size": 0.7010315557992136, + "loss_pdi": 0.45412879940625783, + "loss_ee": 0.6076305202535681, + "loss_delivery": 0.5897340273132196, + "loss_biodist": 0.16656335986949303, + "loss_toxic": 0.06468826295128344, + "loss_moe_lb": 1.009352684020996 + } + ], + "val": [ + { + "loss": 4.351338243484497, + "loss_size": 0.5283156603574752, + "loss_pdi": 0.6431764841079712, + "loss_ee": 0.9840112090110779, + "loss_delivery": 0.8141101490706205, + "loss_biodist": 0.8709415674209595, + "loss_toxic": 0.5209557950496674, + "loss_moe_lb": 1.0300985097885131, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.414322566986084, + "loss_size": 0.40915088057518006, + "loss_pdi": 0.57725510597229, + "loss_ee": 0.8539698958396912, + "loss_delivery": 0.7813994272772107, + "loss_biodist": 0.4494430422782898, + "loss_toxic": 0.34718665331602094, + "loss_moe_lb": 1.01757972240448, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.14884934425354, + "loss_size": 0.36170082092285155, + "loss_pdi": 0.5500259160995483, + "loss_ee": 0.840156090259552, + "loss_delivery": 0.7431909930077382, + "loss_biodist": 0.31414745151996615, + "loss_toxic": 0.3457974471151829, + "loss_moe_lb": 1.0173659086227418, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.9835078001022337, + "loss_size": 0.3360332906246185, + "loss_pdi": 0.5084079593420029, + "loss_ee": 0.8543301045894622, + "loss_delivery": 0.81021169424057, + "loss_biodist": 0.20707301348447799, + "loss_toxic": 0.27709647375158963, + "loss_moe_lb": 1.0128045320510863, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.7777624845504763, + "loss_size": 0.27276079952716825, + "loss_pdi": 0.48096767291426656, + "loss_ee": 0.7886343747377396, + "loss_delivery": 0.8131667863577604, + "loss_biodist": 0.1389363333582878, + "loss_toxic": 0.2908394466154277, + "loss_moe_lb": 1.0190117120742799, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.1891578674316405, + "loss_size": 0.3145947799086571, + "loss_pdi": 0.4607068568468094, + "loss_ee": 0.8832492291927337, + "loss_delivery": 0.8955045580863953, + "loss_biodist": 0.17286321073770522, + "loss_toxic": 0.47499156957492233, + "loss_moe_lb": 1.0209539175033568, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8333333333333334 + }, + { + "loss": 2.962861680984497, + "loss_size": 0.3459408402442932, + "loss_pdi": 0.4526503711938858, + "loss_ee": 0.8540104065090418, + "loss_delivery": 0.934278239775449, + "loss_biodist": 0.1188371554017067, + "loss_toxic": 0.27977683106437323, + "loss_moe_lb": 1.0299945592880249, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.1770113468170167, + "loss_size": 0.34748868346214296, + "loss_pdi": 0.49443322122097016, + "loss_ee": 0.8128330364823342, + "loss_delivery": 0.9533780105412006, + "loss_biodist": 0.20197727531194687, + "loss_toxic": 0.3883689950918779, + "loss_moe_lb": 1.0118905305862427, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.1561219692230225, + "loss_size": 0.36988612413406374, + "loss_pdi": 0.45731739699840546, + "loss_ee": 0.8377117313444614, + "loss_delivery": 0.9307792767882347, + "loss_biodist": 0.1836371697485447, + "loss_toxic": 0.3993400900159031, + "loss_moe_lb": 1.010878896713257, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.257073348760605, + "loss_size": 0.3538277596235275, + "loss_pdi": 0.46371321603655813, + "loss_ee": 0.8333129465579987, + "loss_delivery": 0.906852000951767, + "loss_biodist": 0.14975143745541572, + "loss_toxic": 0.5621432390296832, + "loss_moe_lb": 1.0157330274581908, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.3074571251869203, + "loss_size": 0.418862184882164, + "loss_pdi": 0.44678124189376833, + "loss_ee": 0.8873284153640271, + "loss_delivery": 0.9675619143992662, + "loss_biodist": 0.14277694821357728, + "loss_toxic": 0.46906649945303797, + "loss_moe_lb": 1.0167634725570678, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.1844396233558654, + "loss_size": 0.3912849068641663, + "loss_pdi": 0.4490723855793476, + "loss_ee": 0.8633422922343016, + "loss_delivery": 0.9755209524009842, + "loss_biodist": 0.1369444653391838, + "loss_toxic": 0.39789355217944833, + "loss_moe_lb": 1.012496280670166, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.3202404141426087, + "loss_size": 0.43286535888910294, + "loss_pdi": 0.46595956236124036, + "loss_ee": 0.8726272135972977, + "loss_delivery": 0.892349891923368, + "loss_biodist": 0.17729640007019043, + "loss_toxic": 0.5007592872483656, + "loss_moe_lb": 1.0153326749801637, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.3145878672599793, + "loss_size": 0.4091766238212585, + "loss_pdi": 0.4476019456982613, + "loss_ee": 0.8899889543652535, + "loss_delivery": 1.010519946552813, + "loss_biodist": 0.13079079613089561, + "loss_toxic": 0.45538732953136785, + "loss_moe_lb": 1.0142157435417176, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.330686628818512, + "loss_size": 0.4302508354187012, + "loss_pdi": 0.46410428658127784, + "loss_ee": 0.884337130561471, + "loss_delivery": 1.0025697177276016, + "loss_biodist": 0.16711878553032875, + "loss_toxic": 0.4145805165870115, + "loss_moe_lb": 1.0122879505157472, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_4/splits.json b/models/abl_full/s1_both/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s1_both/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..9f0b361 --- /dev/null +++ b/models/abl_full/s1_both/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.8359511180893293, + "rmse": 0.9143036246725315, + "mae": 0.5420850133467909, + "r2": -0.11860643443263852 + }, + "delivery": { + "n_samples": 58, + "mse": 1.0796427545219585, + "rmse": 1.03905859051449, + "mae": 0.649985611872298, + "r2": -0.04399672077007333 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.6918367346938775, + "recall": 0.7412023460410557, + "f1": 0.6946420104314841 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6383091787439613, + "recall": 0.7337606837606838, + "f1": 0.6521164021164022 + }, + "toxic": { + "n_samples": 59, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.23837358595644248, + "js_divergence": 0.06386943316370278 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/pip_freeze.txt b/models/abl_full/s1_both/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s1_both/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s1_both/seed42/repro.txt b/models/abl_full/s1_both/seed42/repro.txt new file mode 100644 index 0000000..e3a90fa --- /dev/null +++ b/models/abl_full/s1_both/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T12:53:18+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=1 --batch-size 8 --use-mpnn --use-moe --use-llm --use-rag --rag-top-k 4 --use-soft-prompt --no-llm-freeze --llm-use-qlora --llm-model-path models/qwen2.5-7b-instruct diff --git a/models/abl_full/s1_both/seed42/strata_info.json b/models/abl_full/s1_both/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s1_both/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s1_both/seed42/summary.json b/models/abl_full/s1_both/seed42/summary.json new file mode 100644 index 0000000..76afb61 --- /dev/null +++ b/models/abl_full/s1_both/seed42/summary.json @@ -0,0 +1,372 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.4108948503325973, + "lr": 0.0007340472227986773, + "weight_decay": 0.0007067135047679004, + "backbone_lr_ratio": 0.7321173243252591, + "moe_n_experts": 2, + "moe_top_k": 2, + "moe_expert_hidden_mult": 1, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 14, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.65548933352636, + "rmse": 1.2866582038468337, + "mae": 0.5746945666081934, + "r2": -0.013200221826040748 + }, + "delivery": { + "n_samples": 58, + "mse": 0.5966502866071148, + "rmse": 0.7724314122348436, + "mae": 0.600902550468414, + "r2": 0.24162148150681173 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7619047619047619, + "precision": 0.7006414825374199, + "recall": 0.7006414825374199, + "f1": 0.7006414825374199 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.717012617012617, + "recall": 0.7409523809523809, + "f1": 0.7039699318769087 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9827586206896551, + "precision": 0.9912280701754386, + "recall": 0.75, + "f1": 0.8289085545722714 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.16024890157851573, + "js_divergence": 0.032467622854324446 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.24482591245144014, + "lr": 0.00042458936788614755, + "weight_decay": 0.00014902327669828248, + "backbone_lr_ratio": 0.24808069123277332, + "moe_n_experts": 2, + "moe_top_k": 1, + "moe_expert_hidden_mult": 1, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 7, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3445300972529715, + "rmse": 0.5869668621421242, + "mae": 0.4555579432108927, + "r2": -0.05207242874852769 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0775295165871506, + "rmse": 1.0380411921437176, + "mae": 0.6340284446773471, + "r2": 0.18438783389531754 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.5972915181753385, + "recall": 0.6031746031746031, + "f1": 0.5997067448680352 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.47222222222222215, + "recall": 0.4779744065458351, + "f1": 0.46562819203268635 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.24783434314436234, + "js_divergence": 0.0666961611545551 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.330147494187667, + "lr": 0.0007391626870428583, + "weight_decay": 0.08248214185502709, + "backbone_lr_ratio": 0.3321485864522685, + "moe_n_experts": 4, + "moe_top_k": 1, + "moe_expert_hidden_mult": 1, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 10, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.393067832783495, + "rmse": 0.6269512204179006, + "mae": 0.48754836206457447, + "r2": 0.22369805318261293 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6293676153394357, + "rmse": 0.7933269284093637, + "mae": 0.5411118950306748, + "r2": 0.16220261953292037 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.6282346175963197, + "recall": 0.6634897360703812, + "f1": 0.6212097651998134 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.6078622482131254, + "recall": 0.6720354808590102, + "f1": 0.6212949538882847 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.18339582654236564, + "js_divergence": 0.04379028402728257 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.2277771320023231, + "lr": 0.0009696339767409517, + "weight_decay": 0.0003933823864828228, + "backbone_lr_ratio": 0.4073135560471746, + "moe_n_experts": 4, + "moe_top_k": 2, + "moe_expert_hidden_mult": 2, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 12, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.732527790200732, + "rmse": 1.316255214690803, + "mae": 0.5408693312566324, + "r2": 0.020069076700442334 + }, + "delivery": { + "n_samples": 59, + "mse": 0.5845268150974521, + "rmse": 0.7645435338144271, + "mae": 0.48413719012701917, + "r2": 0.43177048756483927 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6445623342175066, + "recall": 0.6598240469208211, + "f1": 0.6499999999999999 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5734711041691698, + "recall": 0.5891402714932127, + "f1": 0.5722830194879885 + }, + "toxic": { + "n_samples": 60, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.17380496676972265, + "js_divergence": 0.04216868552091467 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.3336459802315832, + "lr": 0.0005171929496634874, + "weight_decay": 0.00014235198757319405, + "backbone_lr_ratio": 0.23125566110577128, + "moe_n_experts": 4, + "moe_top_k": 1, + "moe_expert_hidden_mult": 2, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 15, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.8359511180893293, + "rmse": 0.9143036246725315, + "mae": 0.5420850133467909, + "r2": -0.11860643443263852 + }, + "delivery": { + "n_samples": 58, + "mse": 1.0796427545219585, + "rmse": 1.03905859051449, + "mae": 0.649985611872298, + "r2": -0.04399672077007333 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.6918367346938775, + "recall": 0.7412023460410557, + "f1": 0.6946420104314841 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6383091787439613, + "recall": 0.7337606837606838, + "f1": 0.6521164021164022 + }, + "toxic": { + "n_samples": 59, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.23837358595644248, + "js_divergence": 0.06386943316370278 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.9923132343705776, + "mse_std": 0.5984792866289451, + "rmse_mean": 0.9462270251540387, + "rmse_std": 0.31139629291100435, + "mae_mean": 0.5201510432974168, + "mae_std": 0.04270959104369673, + "r2_mean": 0.011977608975169663, + "r2_std": 0.11548120300234146 + }, + "delivery": { + "mse_mean": 0.7935433976306223, + "mse_std": 0.23319925995033153, + "rmse_mean": 0.8814803314233683, + "rmse_std": 0.12859169080609734, + "mae_mean": 0.5820331384351507, + "mae_std": 0.061539044654339216, + "r2_mean": 0.19519714034596314, + "r2_std": 0.15267046261263886 + }, + "pdi": { + "accuracy_mean": 0.7095238095238096, + "accuracy_std": 0.03579356280564977, + "precision_mean": 0.6525133374440925, + "precision_std": 0.038896714345804356, + "recall_mean": 0.6736664429488562, + "recall_std": 0.045941327217941516, + "f1_mean": 0.6532400006073505, + "f1_std": 0.03965670173096385 + }, + "ee": { + "accuracy_mean": 0.65, + "accuracy_std": 0.058612064881386504, + "precision_mean": 0.6017754740722191, + "precision_std": 0.08029513301572835, + "recall_mean": 0.6427726447222246, + "recall_std": 0.09880211353738708, + "f1_mean": 0.6030584998804541, + "f1_std": 0.08094020366006734 + }, + "toxic": { + "accuracy_mean": 0.9736009044657997, + "accuracy_std": 0.026575657889142013, + "precision_mean": 0.8911027568922305, + "precision_std": 0.1303200307180046, + "recall_mean": 0.9379310344827585, + "recall_std": 0.09496854726841662, + "f1_mean": 0.8862220817530553, + "f1_std": 0.09421858471870986 + }, + "biodist": { + "kl_divergence_mean": 0.20073152479828177, + "kl_divergence_std": 0.03549650407693031, + "js_divergence_mean": 0.04979843734415591, + "js_divergence_std": 0.013252880014325175 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/local_uncommitted.patch b/models/abl_full/s1_llm/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s1_llm/seed42/outer_fold_0/best_params.json b/models/abl_full/s1_llm/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..4ebb47f --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_0/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.36120126405768543, + "lr": 0.0009943285546676244, + "weight_decay": 0.011860461070657894, + "backbone_lr_ratio": 0.09819347379144983, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s1_llm/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..54e2f4a --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 15} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_0/history.json b/models/abl_full/s1_llm/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..726b121 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_0/history.json @@ -0,0 +1,321 @@ +{ + "train": [ + { + "loss": 5.147642432032405, + "loss_size": 0.8445845882634859, + "loss_pdi": 0.6722060796376821, + "loss_ee": 1.0654495648435645, + "loss_delivery": 0.9773198162784448, + "loss_biodist": 1.0411984002267993, + "loss_toxic": 0.5701748221307188 + }, + { + "loss": 4.256988151653393, + "loss_size": 0.8105902712087374, + "loss_pdi": 0.6404960864299053, + "loss_ee": 0.9829456693417317, + "loss_delivery": 0.9474382493141535, + "loss_biodist": 0.5263094587905986, + "loss_toxic": 0.38402967517440384 + }, + { + "loss": 3.7657996448310644, + "loss_size": 0.7923663322990006, + "loss_pdi": 0.6140706152529329, + "loss_ee": 0.9468127779058508, + "loss_delivery": 0.8142388411923438, + "loss_biodist": 0.4201673510912302, + "loss_toxic": 0.22732971095152804 + }, + { + "loss": 3.55830628485293, + "loss_size": 0.7685929627434628, + "loss_pdi": 0.5733279328088503, + "loss_ee": 0.9001653307193035, + "loss_delivery": 0.8628780795512973, + "loss_biodist": 0.3162229747788326, + "loss_toxic": 0.197189921890763 + }, + { + "loss": 3.348226389369449, + "loss_size": 0.7652994575532707, + "loss_pdi": 0.5595339947455639, + "loss_ee": 0.8787843343373891, + "loss_delivery": 0.8344920879682979, + "loss_biodist": 0.2531829160210249, + "loss_toxic": 0.12379072737452146 + }, + { + "loss": 3.418956476288873, + "loss_size": 0.7354503776374701, + "loss_pdi": 0.5472372681707949, + "loss_ee": 0.8670600813788336, + "loss_delivery": 0.9814510761281928, + "loss_biodist": 0.2594552078359836, + "loss_toxic": 0.10849214721521414 + }, + { + "loss": 3.1935991467656315, + "loss_size": 0.6718364231087066, + "loss_pdi": 0.542599725562173, + "loss_ee": 0.8166635447257274, + "loss_delivery": 0.8651735969894642, + "loss_biodist": 0.19670551441408493, + "loss_toxic": 0.1735602368166469 + }, + { + "loss": 3.0354659428467623, + "loss_size": 0.6521219149030544, + "loss_pdi": 0.5337435707852647, + "loss_ee": 0.7919033918831799, + "loss_delivery": 0.8176206077977612, + "loss_biodist": 0.19351129233837128, + "loss_toxic": 0.12709067441598587 + }, + { + "loss": 2.8783513468665047, + "loss_size": 0.6472237689068189, + "loss_pdi": 0.4928460322521828, + "loss_ee": 0.7864117219641402, + "loss_delivery": 0.7536062706966657, + "loss_biodist": 0.19095820067702113, + "loss_toxic": 0.09220971775278952 + }, + { + "loss": 2.8236329040011845, + "loss_size": 0.5908906914897867, + "loss_pdi": 0.4986982571112143, + "loss_ee": 0.7679622253856143, + "loss_delivery": 0.7320205288360248, + "loss_biodist": 0.19950280549961166, + "loss_toxic": 0.11956951313815709 + }, + { + "loss": 2.8038443810230977, + "loss_size": 0.6493027063237654, + "loss_pdi": 0.5011362546199077, + "loss_ee": 0.7827469851519611, + "loss_delivery": 0.7255703931724703, + "loss_biodist": 0.16047916933894157, + "loss_toxic": 0.0820891916031345 + }, + { + "loss": 2.8201219842240617, + "loss_size": 0.6174872288027325, + "loss_pdi": 0.4953894518517159, + "loss_ee": 0.7677139180737573, + "loss_delivery": 0.6763768926061489, + "loss_biodist": 0.20327536741624008, + "loss_toxic": 0.1466148302188722 + }, + { + "loss": 2.739313692659945, + "loss_size": 0.5882780187436052, + "loss_pdi": 0.48220539737392115, + "loss_ee": 0.7422905459597304, + "loss_delivery": 0.7619928093375387, + "loss_biodist": 0.14747168405635938, + "loss_toxic": 0.11162694219524998 + }, + { + "loss": 2.755237666336266, + "loss_size": 0.5910107342375291, + "loss_pdi": 0.4860636547610566, + "loss_ee": 0.7459143122305741, + "loss_delivery": 0.8056776328264056, + "loss_biodist": 0.1888150733870429, + "loss_toxic": 0.0446966980218988 + }, + { + "loss": 2.5650166079804704, + "loss_size": 0.5478415583839288, + "loss_pdi": 0.4664379881845938, + "loss_ee": 0.7518987720077103, + "loss_delivery": 0.6986862499568913, + "loss_biodist": 0.163654702438696, + "loss_toxic": 0.039902404693232196 + } + ], + "val": [ + { + "loss": 4.159415626525879, + "loss_size": 0.5259412823244929, + "loss_pdi": 0.7670119047164917, + "loss_ee": 1.074426245689392, + "loss_delivery": 0.7721726939082145, + "loss_biodist": 0.6637675046920777, + "loss_toxic": 0.389207723736763, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.3939393939393939, + "acc_toxic": 0.9 + }, + { + "loss": 3.7557023048400877, + "loss_size": 0.5065902419388294, + "loss_pdi": 0.8063032388687134, + "loss_ee": 1.0656041860580445, + "loss_delivery": 0.6498562395572662, + "loss_biodist": 0.4285761207342148, + "loss_toxic": 0.3483713656663895, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.3939393939393939, + "acc_toxic": 0.9 + }, + { + "loss": 3.476029634475708, + "loss_size": 0.4818432584404945, + "loss_pdi": 0.8822407007217408, + "loss_ee": 0.9630263566970825, + "loss_delivery": 0.6383201897144317, + "loss_biodist": 0.31057562232017516, + "loss_toxic": 0.26946860235184433, + "acc_pdi": 0.3939393939393939, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.9 + }, + { + "loss": 4.863578939437867, + "loss_size": 0.541789197921753, + "loss_pdi": 1.2852459728717804, + "loss_ee": 0.8531787037849426, + "loss_delivery": 1.150505816936493, + "loss_biodist": 0.24585407972335815, + "loss_toxic": 0.8766378812491894, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.9 + }, + { + "loss": 4.034706544876099, + "loss_size": 0.4557234764099121, + "loss_pdi": 1.1182718336582185, + "loss_ee": 0.9067777767777443, + "loss_delivery": 0.7660846829414367, + "loss_biodist": 0.18823758214712144, + "loss_toxic": 0.6773600649088621, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 3.71524977684021, + "loss_size": 0.46545302867889404, + "loss_pdi": 1.232257217168808, + "loss_ee": 0.8113873779773713, + "loss_delivery": 0.7154026985168457, + "loss_biodist": 0.19339187294244767, + "loss_toxic": 0.3950491169467568, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.212270641326904, + "loss_size": 0.35887460708618163, + "loss_pdi": 1.260631912946701, + "loss_ee": 0.7949246689677238, + "loss_delivery": 0.6219677656888962, + "loss_biodist": 0.15977896004915237, + "loss_toxic": 0.13749083373695611, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + }, + { + "loss": 3.252304458618164, + "loss_size": 0.43110665678977966, + "loss_pdi": 1.1778656125068665, + "loss_ee": 0.8264414265751838, + "loss_delivery": 0.7276042275130749, + "loss_biodist": 0.16155126690864563, + "loss_toxic": 0.06569738076068461, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5151515151515151, + "acc_toxic": 1.0 + }, + { + "loss": 3.449024963378906, + "loss_size": 0.4646922707557678, + "loss_pdi": 1.280164796113968, + "loss_ee": 0.8561057016253472, + "loss_delivery": 0.5933363705873489, + "loss_biodist": 0.1324687570333481, + "loss_toxic": 0.25103175402618944, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.059537887573242, + "loss_size": 0.35314797461032865, + "loss_pdi": 1.2232667624950408, + "loss_ee": 0.7745084583759307, + "loss_delivery": 0.5932506948709488, + "loss_biodist": 0.14098457098007203, + "loss_toxic": 0.10889038797467947, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + }, + { + "loss": 2.950475645065308, + "loss_size": 0.35260245501995086, + "loss_pdi": 1.092390513420105, + "loss_ee": 0.8254107091575861, + "loss_delivery": 0.6297225534915925, + "loss_biodist": 0.13818495273590087, + "loss_toxic": 0.05596545431762934, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + }, + { + "loss": 2.9905550956726072, + "loss_size": 0.36834086775779723, + "loss_pdi": 1.1431765377521514, + "loss_ee": 0.8174747616052628, + "loss_delivery": 0.6127920657396316, + "loss_biodist": 0.1217936098575592, + "loss_toxic": 0.07282344694249332, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + }, + { + "loss": 3.014424228668213, + "loss_size": 0.37132986187934874, + "loss_pdi": 1.1549767553806305, + "loss_ee": 0.8054959446191787, + "loss_delivery": 0.5878907024860383, + "loss_biodist": 0.14284245520830155, + "loss_toxic": 0.09392537409439683, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5151515151515151, + "acc_toxic": 1.0 + }, + { + "loss": 3.075956106185913, + "loss_size": 0.3624262988567352, + "loss_pdi": 1.2138631284236907, + "loss_ee": 0.8189812514930963, + "loss_delivery": 0.580648323893547, + "loss_biodist": 0.13009978979825973, + "loss_toxic": 0.11513978778384626, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + }, + { + "loss": 3.0229308128356935, + "loss_size": 0.3652563512325287, + "loss_pdi": 1.1822814345359802, + "loss_ee": 0.8041247572749853, + "loss_delivery": 0.5846836477518081, + "loss_biodist": 0.12438895255327224, + "loss_toxic": 0.10542423813603818, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5151515151515151, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_0/splits.json b/models/abl_full/s1_llm/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s1_llm/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..ec472c0 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.6152706135152473, + "rmse": 1.2709329697176195, + "mae": 0.5560500422066235, + "r2": 0.011414624800616835 + }, + "delivery": { + "n_samples": 58, + "mse": 0.569237390911561, + "rmse": 0.7544782242792438, + "mae": 0.5994908674138373, + "r2": 0.27646492613737106 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6964285714285714, + "recall": 0.7195295794725588, + "f1": 0.7043740573152337 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.684408546477512, + "recall": 0.7380952380952381, + "f1": 0.6942196418797405 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9827586206896551, + "precision": 0.9912280701754386, + "recall": 0.75, + "f1": 0.8289085545722714 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.2234068484038443, + "js_divergence": 0.04400725882151094 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_1/best_params.json b/models/abl_full/s1_llm/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..48164e8 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_1/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.2307845821368613, + "lr": 0.000958470938363808, + "weight_decay": 7.743828905178866e-05, + "backbone_lr_ratio": 0.011104773529240554, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s1_llm/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..735a6b9 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 11} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_1/history.json b/models/abl_full/s1_llm/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..d6587b6 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_1/history.json @@ -0,0 +1,237 @@ +{ + "train": [ + { + "loss": 5.31889381924191, + "loss_size": 1.2377011441701167, + "loss_pdi": 0.6591631512384157, + "loss_ee": 1.053300973531362, + "loss_delivery": 0.8986851844835926, + "loss_biodist": 0.9206196327467222, + "loss_toxic": 0.5676593901337804 + }, + { + "loss": 4.242555192998938, + "loss_size": 1.1428092319417644, + "loss_pdi": 0.5818789673818124, + "loss_ee": 0.9055582446021002, + "loss_delivery": 0.860341256534731, + "loss_biodist": 0.45966394124804316, + "loss_toxic": 0.3206170860778641 + }, + { + "loss": 3.945884408177556, + "loss_size": 1.1150637850970835, + "loss_pdi": 0.5731848647465577, + "loss_ee": 0.8864123740711728, + "loss_delivery": 0.7410666408973772, + "loss_biodist": 0.3720009846461786, + "loss_toxic": 0.2981052903106084 + }, + { + "loss": 3.771327904752783, + "loss_size": 1.0933466932258091, + "loss_pdi": 0.5638367139004372, + "loss_ee": 0.8369277715682983, + "loss_delivery": 0.808194908137257, + "loss_biodist": 0.3217562503508619, + "loss_toxic": 0.20463744457811117 + }, + { + "loss": 3.5512277210080945, + "loss_size": 1.0661521545938544, + "loss_pdi": 0.5355479205782349, + "loss_ee": 0.8346078138093691, + "loss_delivery": 0.7495328228215914, + "loss_biodist": 0.24907558391223084, + "loss_toxic": 0.17771735889333728 + }, + { + "loss": 3.080665900900557, + "loss_size": 0.735050067909666, + "loss_pdi": 0.5247787269386085, + "loss_ee": 0.8116669840103871, + "loss_delivery": 0.7121920490989814, + "loss_biodist": 0.24619822848487544, + "loss_toxic": 0.11244597721442177 + }, + { + "loss": 3.3846415925670312, + "loss_size": 1.0514244253973704, + "loss_pdi": 0.5351601130253559, + "loss_ee": 0.8008756734229423, + "loss_delivery": 0.7044348140826097, + "loss_biodist": 0.25983165345481923, + "loss_toxic": 0.10588467437648089 + }, + { + "loss": 3.40125953506779, + "loss_size": 0.9813242455994761, + "loss_pdi": 0.5397726861206261, + "loss_ee": 0.7782152754229468, + "loss_delivery": 0.8498910393666577, + "loss_biodist": 0.22946381991779483, + "loss_toxic": 0.10234788009846532 + }, + { + "loss": 3.3028472243128597, + "loss_size": 1.0344087632524002, + "loss_pdi": 0.5138594145710403, + "loss_ee": 0.7748850149077338, + "loss_delivery": 0.7315809285721263, + "loss_biodist": 0.2475472209421364, + "loss_toxic": 0.08030925857255587 + }, + { + "loss": 3.321901753142073, + "loss_size": 1.0006535474110294, + "loss_pdi": 0.5102769502916852, + "loss_ee": 0.7776487961008742, + "loss_delivery": 0.7848934556382734, + "loss_biodist": 0.24158037957307454, + "loss_toxic": 0.08913449681288488 + }, + { + "loss": 3.2876750778507544, + "loss_size": 0.9780543958013123, + "loss_pdi": 0.5238370359749407, + "loss_ee": 0.7781052114190282, + "loss_delivery": 0.7209929026461936, + "loss_biodist": 0.2487740989875149, + "loss_toxic": 0.11638363839655712 + } + ], + "val": [ + { + "loss": 2.9308527231216432, + "loss_size": 0.519802288711071, + "loss_pdi": 0.6647319912910461, + "loss_ee": 0.8960770487785339, + "loss_delivery": 0.21736948788166047, + "loss_biodist": 0.45979435443878175, + "loss_toxic": 0.1797662064433098, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 2.673656702041626, + "loss_size": 0.49040685296058656, + "loss_pdi": 0.6421751320362091, + "loss_ee": 0.6792589068412781, + "loss_delivery": 0.4068264842033386, + "loss_biodist": 0.4101373553276062, + "loss_toxic": 0.05604152362793684, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.6190099716186523, + "loss_size": 0.5263730645179748, + "loss_pdi": 0.6318800538778305, + "loss_ee": 0.6358642637729645, + "loss_delivery": 0.44621982574462893, + "loss_biodist": 0.37990050911903384, + "loss_toxic": 0.02586401244625449, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.497333312034607, + "loss_size": 0.4611061841249466, + "loss_pdi": 0.6644555628299713, + "loss_ee": 0.6429485023021698, + "loss_delivery": 0.451871919631958, + "loss_biodist": 0.28512915670871736, + "loss_toxic": 0.027778143156319858, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.459736967086792, + "loss_size": 0.46326924562454225, + "loss_pdi": 0.6687620878219604, + "loss_ee": 0.5824844896793365, + "loss_delivery": 0.4660391449928284, + "loss_biodist": 0.29676556289196016, + "loss_toxic": 0.0203330360352993, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3264069318771363, + "loss_size": 0.46273518800735475, + "loss_pdi": 0.651288640499115, + "loss_ee": 0.5867357015609741, + "loss_delivery": 0.38362357914447787, + "loss_biodist": 0.27055719792842864, + "loss_toxic": 0.012285364512354135, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.431403112411499, + "loss_size": 0.4746141493320465, + "loss_pdi": 0.6360470652580261, + "loss_ee": 0.6429702758789062, + "loss_delivery": 0.4433935463428497, + "loss_biodist": 0.2768822431564331, + "loss_toxic": 0.010033991513773799, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.3240861892700195, + "loss_size": 0.4379171907901764, + "loss_pdi": 0.6249558329582214, + "loss_ee": 0.608390498161316, + "loss_delivery": 0.4470574378967285, + "loss_biodist": 0.24718185961246492, + "loss_toxic": 0.010378359304741024, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.307906484603882, + "loss_size": 0.4245007187128067, + "loss_pdi": 0.619099599123001, + "loss_ee": 0.6267234861850739, + "loss_delivery": 0.44055399894714353, + "loss_biodist": 0.24240740835666658, + "loss_toxic": 0.009858347801491618, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3521193981170656, + "loss_size": 0.4394673764705658, + "loss_pdi": 0.6199764013290405, + "loss_ee": 0.6198862552642822, + "loss_delivery": 0.4753984332084656, + "loss_biodist": 0.2460687130689621, + "loss_toxic": 0.008661644207313657, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2861815452575684, + "loss_size": 0.41219576001167296, + "loss_pdi": 0.6171818912029267, + "loss_ee": 0.6221594095230103, + "loss_delivery": 0.4256651043891907, + "loss_biodist": 0.25570506155490874, + "loss_toxic": 0.008512460021302104, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_1/splits.json b/models/abl_full/s1_llm/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s1_llm/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..fbbbbe5 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3497929868728069, + "rmse": 0.5914329944066419, + "mae": 0.4466874681501871, + "r2": -0.06814342257090522 + }, + "delivery": { + "n_samples": 61, + "mse": 1.1250146367822282, + "rmse": 1.0606670716026911, + "mae": 0.6891685391730461, + "r2": 0.14844502105923318 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6190476190476191, + "precision": 0.5575167376749848, + "recall": 0.5714285714285714, + "f1": 0.5543766578249336 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.4739422084623323, + "recall": 0.4779744065458351, + "f1": 0.4646469622331691 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9836065573770492, + "precision": 0.9915254237288136, + "recall": 0.8333333333333333, + "f1": 0.8957264957264958 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.22230263127128363, + "js_divergence": 0.05931753635423146 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_2/best_params.json b/models/abl_full/s1_llm/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..48b1a4c --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_2/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.3632267382224968, + "lr": 0.0005436310282210407, + "weight_decay": 0.001502346334594783, + "backbone_lr_ratio": 0.08436478652740312, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s1_llm/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..0ac5b47 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 13} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_2/history.json b/models/abl_full/s1_llm/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..ba7a6a7 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_2/history.json @@ -0,0 +1,279 @@ +{ + "train": [ + { + "loss": 5.36462926864624, + "loss_size": 0.8706878608948475, + "loss_pdi": 0.6885033813682763, + "loss_ee": 1.0611503881377142, + "loss_delivery": 1.0215906931741818, + "loss_biodist": 1.1023758311529417, + "loss_toxic": 0.6337891567397762 + }, + { + "loss": 4.529071704761402, + "loss_size": 0.8401351039474075, + "loss_pdi": 0.6459278867051408, + "loss_ee": 0.9848497203878455, + "loss_delivery": 0.914910903653583, + "loss_biodist": 0.7195982079248171, + "loss_toxic": 0.4474188113534773 + }, + { + "loss": 3.951905495411641, + "loss_size": 0.813644140757419, + "loss_pdi": 0.6092791750624373, + "loss_ee": 0.9192135785077069, + "loss_delivery": 0.8252965711258553, + "loss_biodist": 0.4887416153340726, + "loss_toxic": 0.3196989362304275 + }, + { + "loss": 3.6365428873010583, + "loss_size": 0.7937702816483136, + "loss_pdi": 0.5979801311686233, + "loss_ee": 0.8533155418731071, + "loss_delivery": 0.8274937568081392, + "loss_biodist": 0.36762599707455246, + "loss_toxic": 0.22278225973147797 + }, + { + "loss": 3.4147697074993237, + "loss_size": 0.7715920066914043, + "loss_pdi": 0.5473445915692562, + "loss_ee": 0.8263872604112368, + "loss_delivery": 0.795418934745563, + "loss_biodist": 0.32617241587187795, + "loss_toxic": 0.17444259638117776 + }, + { + "loss": 3.2687396294361837, + "loss_size": 0.7419949951204093, + "loss_pdi": 0.5502567855087487, + "loss_ee": 0.7747293452958803, + "loss_delivery": 0.8301814322334689, + "loss_biodist": 0.25826014558205734, + "loss_toxic": 0.1417507005704416 + }, + { + "loss": 3.1720887680311463, + "loss_size": 0.7395644131544474, + "loss_pdi": 0.5217430712403478, + "loss_ee": 0.7548408459972691, + "loss_delivery": 0.8303363386642288, + "loss_biodist": 0.2547873252549687, + "loss_toxic": 0.10291569284792687 + }, + { + "loss": 3.075252732715091, + "loss_size": 0.7378537817984014, + "loss_pdi": 0.5076718390793413, + "loss_ee": 0.7184092974340593, + "loss_delivery": 0.7718015240656363, + "loss_biodist": 0.24027213152195956, + "loss_toxic": 0.13018597279851502 + }, + { + "loss": 2.884459128250947, + "loss_size": 0.7027379934852188, + "loss_pdi": 0.4766775667667389, + "loss_ee": 0.7148908223654773, + "loss_delivery": 0.7258990050570385, + "loss_biodist": 0.21120643394218908, + "loss_toxic": 0.08622548082289663 + }, + { + "loss": 2.8339545920088485, + "loss_size": 0.7234651190606324, + "loss_pdi": 0.4769008582508242, + "loss_ee": 0.6739020033462627, + "loss_delivery": 0.6441003712447914, + "loss_biodist": 0.20530315810764158, + "loss_toxic": 0.13904721330146533 + }, + { + "loss": 2.8291303434887447, + "loss_size": 0.6923665050920602, + "loss_pdi": 0.4679024296032416, + "loss_ee": 0.6651387975828068, + "loss_delivery": 0.7329641821215281, + "loss_biodist": 0.1865290553384536, + "loss_toxic": 0.11662771172720839 + }, + { + "loss": 2.725346584577818, + "loss_size": 0.6627247101954512, + "loss_pdi": 0.4644476014214593, + "loss_ee": 0.6552067705102869, + "loss_delivery": 0.688079476658557, + "loss_biodist": 0.20521912643232862, + "loss_toxic": 0.08315514632802759 + }, + { + "loss": 2.7874236944559456, + "loss_size": 0.6820027900708688, + "loss_pdi": 0.4862427932990564, + "loss_ee": 0.6529161462912688, + "loss_delivery": 0.6929996894622171, + "loss_biodist": 0.20486629175374638, + "loss_toxic": 0.10216211944164054 + } + ], + "val": [ + { + "loss": 7.804502153396607, + "loss_size": 3.3283013671636583, + "loss_pdi": 0.6776975989341736, + "loss_ee": 1.0560791611671447, + "loss_delivery": 1.734302707016468, + "loss_biodist": 0.7140680432319642, + "loss_toxic": 0.3228553652763367, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.6666666666666666, + "acc_toxic": 1.0 + }, + { + "loss": 7.4086761474609375, + "loss_size": 3.451000216603279, + "loss_pdi": 0.6704203605651855, + "loss_ee": 0.9652581334114074, + "loss_delivery": 1.7616875678300858, + "loss_biodist": 0.42040573954582217, + "loss_toxic": 0.18553604185581207, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 1.0 + }, + { + "loss": 7.2073790550231935, + "loss_size": 3.3938671171665193, + "loss_pdi": 0.6683620095252991, + "loss_ee": 0.9469543337821961, + "loss_delivery": 1.8101840883493423, + "loss_biodist": 0.31719583868980405, + "loss_toxic": 0.1326232858002186, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.006436920166015, + "loss_size": 3.343517942726612, + "loss_pdi": 0.674301701784134, + "loss_ee": 0.9568410634994506, + "loss_delivery": 1.7925197899341583, + "loss_biodist": 0.22353795021772385, + "loss_toxic": 0.08939621523022652, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.760958242416382, + "loss_size": 3.2666656225919724, + "loss_pdi": 0.639546251296997, + "loss_ee": 0.9238664388656617, + "loss_delivery": 1.7377906262874603, + "loss_biodist": 0.18202168345451356, + "loss_toxic": 0.08490984290838241, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.776791954040528, + "loss_size": 3.2788748323917387, + "loss_pdi": 0.6404872536659241, + "loss_ee": 0.94258354306221, + "loss_delivery": 1.7482545793056488, + "loss_biodist": 0.18415743559598924, + "loss_toxic": 0.06798670999705791, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.630231809616089, + "loss_size": 3.1941952049732207, + "loss_pdi": 0.6442001104354859, + "loss_ee": 0.9295283854007721, + "loss_delivery": 1.701593428850174, + "loss_biodist": 0.1511024206876755, + "loss_toxic": 0.09654238410294055, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.538211107254028, + "loss_size": 3.0761350959539415, + "loss_pdi": 0.6581819236278534, + "loss_ee": 0.9308917582035064, + "loss_delivery": 1.738530421257019, + "loss_biodist": 0.14440711140632628, + "loss_toxic": 0.08246456542983652, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.4778365135192875, + "loss_size": 3.127567061781883, + "loss_pdi": 0.6294267117977143, + "loss_ee": 0.9284797489643097, + "loss_delivery": 1.7013780117034911, + "loss_biodist": 0.12876486480236055, + "loss_toxic": 0.055887991283088925, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.5424212455749515, + "loss_size": 3.1456640899181365, + "loss_pdi": 0.6438539206981659, + "loss_ee": 0.9560280680656433, + "loss_delivery": 1.7197022199630738, + "loss_biodist": 0.12746439576148988, + "loss_toxic": 0.048482421692460774, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.444079160690308, + "loss_size": 3.0503403902053834, + "loss_pdi": 0.6505418002605439, + "loss_ee": 0.9497699677944184, + "loss_delivery": 1.7166073799133301, + "loss_biodist": 0.13068773299455644, + "loss_toxic": 0.045501152984797955, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.4499735832214355, + "loss_size": 3.053487080335617, + "loss_pdi": 0.6503841936588287, + "loss_ee": 0.9494261622428894, + "loss_delivery": 1.7213685989379883, + "loss_biodist": 0.12877217978239058, + "loss_toxic": 0.04628004720434546, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.596410894393921, + "loss_size": 3.2027933269739153, + "loss_pdi": 0.6455744743347168, + "loss_ee": 0.94369837641716, + "loss_delivery": 1.714592695236206, + "loss_biodist": 0.13734084889292716, + "loss_toxic": 0.05228173770010471, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_2/splits.json b/models/abl_full/s1_llm/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s1_llm/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..c094bf5 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3808630997006998, + "rmse": 0.6171410695300547, + "mae": 0.4970361513440453, + "r2": 0.24780218295956957 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6823172211803693, + "rmse": 0.826024951911484, + "mae": 0.5678542086932187, + "r2": 0.09171751672639383 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6693363844393593, + "recall": 0.717008797653959, + "f1": 0.662962962962963 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.5985449735449735, + "recall": 0.6507936507936507, + "f1": 0.6140979689366786 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.2095544756354361, + "js_divergence": 0.05129503689646577 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_3/best_params.json b/models/abl_full/s1_llm/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..6d3aff6 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_3/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.2834072840481449, + "lr": 0.0009817126260852267, + "weight_decay": 0.02817395190380758, + "backbone_lr_ratio": 0.07975174608349046, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s1_llm/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..17fb17e --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 10} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_3/history.json b/models/abl_full/s1_llm/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..583a06d --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_3/history.json @@ -0,0 +1,216 @@ +{ + "train": [ + { + "loss": 4.703645029583493, + "loss_size": 0.5132228625384537, + "loss_pdi": 0.6786868137282294, + "loss_ee": 1.0606231979421668, + "loss_delivery": 0.88484697909774, + "loss_biodist": 1.031302827435571, + "loss_toxic": 0.5537116310080966 + }, + { + "loss": 3.7224996605434932, + "loss_size": 0.48492095800670415, + "loss_pdi": 0.6347826719284058, + "loss_ee": 0.9606194512264149, + "loss_delivery": 0.8909749190348226, + "loss_biodist": 0.5026347186114337, + "loss_toxic": 0.2761031350976712 + }, + { + "loss": 3.4812703841441386, + "loss_size": 0.45948930688806483, + "loss_pdi": 0.6280171420123126, + "loss_ee": 0.9439059093191817, + "loss_delivery": 0.8247231158956483, + "loss_biodist": 0.39155318205421036, + "loss_toxic": 0.27610667973656106 + }, + { + "loss": 3.151053058134543, + "loss_size": 0.42764424834702464, + "loss_pdi": 0.6216636799477242, + "loss_ee": 0.8778461346755156, + "loss_delivery": 0.751379218757958, + "loss_biodist": 0.32537463065740224, + "loss_toxic": 0.20028542850569292 + }, + { + "loss": 2.8697496620384424, + "loss_size": 0.4269665209828196, + "loss_pdi": 0.5621184295899159, + "loss_ee": 0.8231808357947582, + "loss_delivery": 0.761883601445604, + "loss_biodist": 0.2445085850116369, + "loss_toxic": 0.1063569859047798 + }, + { + "loss": 2.7854691131694898, + "loss_size": 0.39138617799491493, + "loss_pdi": 0.523831074302261, + "loss_ee": 0.8215621967573423, + "loss_delivery": 0.8069386293205458, + "loss_biodist": 0.23227983008365374, + "loss_toxic": 0.0727254229132086 + }, + { + "loss": 2.644588808755617, + "loss_size": 0.3799504083958832, + "loss_pdi": 0.5460223128666749, + "loss_ee": 0.8235893032035312, + "loss_delivery": 0.6982345264908429, + "loss_biodist": 0.19347638072999748, + "loss_toxic": 0.07254853126643276 + }, + { + "loss": 2.447996841894614, + "loss_size": 0.3444129961567956, + "loss_pdi": 0.5091852706831854, + "loss_ee": 0.7676352334989084, + "loss_delivery": 0.6081535461786631, + "loss_biodist": 0.2014586832877752, + "loss_toxic": 0.08061650964884541 + }, + { + "loss": 2.5595616069999902, + "loss_size": 0.401192020423509, + "loss_pdi": 0.5187365811418843, + "loss_ee": 0.7414932194593791, + "loss_delivery": 0.6709390034949457, + "loss_biodist": 0.20140804048325564, + "loss_toxic": 0.08921324366049187 + }, + { + "loss": 2.514197868269843, + "loss_size": 0.37954199555757884, + "loss_pdi": 0.5400866350612125, + "loss_ee": 0.7406274740760391, + "loss_delivery": 0.6182017973750025, + "loss_biodist": 0.19105441717279925, + "loss_toxic": 0.10805481451412512 + } + ], + "val": [ + { + "loss": 6.006975531578064, + "loss_size": 2.7494787633419038, + "loss_pdi": 0.6572931408882141, + "loss_ee": 0.9051256060600281, + "loss_delivery": 0.9734304904937744, + "loss_biodist": 0.4705023288726807, + "loss_toxic": 0.26852029263973237, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.215833234786987, + "loss_size": 2.7748794183135033, + "loss_pdi": 0.622614860534668, + "loss_ee": 0.7935141026973724, + "loss_delivery": 0.7108514219522476, + "loss_biodist": 0.21298229992389678, + "loss_toxic": 0.1014245718717575, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.9565217391304348 + }, + { + "loss": 5.176661276817322, + "loss_size": 2.6878706961870193, + "loss_pdi": 0.577756530046463, + "loss_ee": 0.7635396361351013, + "loss_delivery": 0.8958718746900558, + "loss_biodist": 0.17920992374420167, + "loss_toxic": 0.08617440611124039, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.082661437988281, + "loss_size": 2.627828113734722, + "loss_pdi": 0.6501552999019623, + "loss_ee": 0.7462156653404236, + "loss_delivery": 0.7903401762247085, + "loss_biodist": 0.14461142122745513, + "loss_toxic": 0.1362426983192563, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.142218232154846, + "loss_size": 2.715782304108143, + "loss_pdi": 0.6310679972171783, + "loss_ee": 0.7377537488937378, + "loss_delivery": 0.7469718545675278, + "loss_biodist": 0.14446477591991425, + "loss_toxic": 0.17223090548068284, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 5.191743612289429, + "loss_size": 2.7231680706143377, + "loss_pdi": 0.62291060090065, + "loss_ee": 0.7647787451744079, + "loss_delivery": 0.7376459240913391, + "loss_biodist": 0.1462427243590355, + "loss_toxic": 0.2010015532374382, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.971458315849304, + "loss_size": 2.6256699919700623, + "loss_pdi": 0.6229885518550873, + "loss_ee": 0.7519989430904388, + "loss_delivery": 0.72496417760849, + "loss_biodist": 0.13869253545999527, + "loss_toxic": 0.11672328729182482, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.8839984893798825, + "loss_size": 2.5973687767982483, + "loss_pdi": 0.6202696621417999, + "loss_ee": 0.7469191431999207, + "loss_delivery": 0.7374312400817871, + "loss_biodist": 0.13846834599971772, + "loss_toxic": 0.057255149632692334, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6666666666666666, + "acc_toxic": 1.0 + }, + { + "loss": 5.073031163215637, + "loss_size": 2.7210794240236282, + "loss_pdi": 0.62847341299057, + "loss_ee": 0.7558909296989441, + "loss_delivery": 0.7458723217248917, + "loss_biodist": 0.14287284761667252, + "loss_toxic": 0.0880776752717793, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.985839319229126, + "loss_size": 2.670389157533646, + "loss_pdi": 0.6253753185272217, + "loss_ee": 0.7514976680278778, + "loss_delivery": 0.7372064888477325, + "loss_biodist": 0.13751591145992278, + "loss_toxic": 0.07459766920655966, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.9565217391304348 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_3/splits.json b/models/abl_full/s1_llm/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s1_llm/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..ca42fba --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.771712610404338, + "rmse": 1.3310569523519036, + "mae": 0.5784341517768531, + "r2": -0.002094156269689673 + }, + "delivery": { + "n_samples": 59, + "mse": 0.7036047486492218, + "rmse": 0.8388115096070283, + "mae": 0.5862117674107016, + "r2": 0.3160125883953585 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.7014607425441266, + "recall": 0.7426686217008798, + "f1": 0.7105824446267432 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.5854030501089325, + "recall": 0.6147812971342383, + "f1": 0.5895045852492662 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9666666666666667, + "precision": 0.8, + "recall": 0.9824561403508771, + "f1": 0.8660714285714286 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.20841596050219596, + "js_divergence": 0.05264348216657474 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_4/best_params.json b/models/abl_full/s1_llm/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..b8f9d7a --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_4/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.3555361701988309, + "lr": 0.0008600917157970105, + "weight_decay": 0.04751323754945044, + "backbone_lr_ratio": 0.0916633676039248, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s1_llm/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..84179ef --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 12} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_4/history.json b/models/abl_full/s1_llm/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..76b7e6d --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_4/history.json @@ -0,0 +1,258 @@ +{ + "train": [ + { + "loss": 5.394337982744784, + "loss_size": 1.1257124124346554, + "loss_pdi": 0.6762782705796732, + "loss_ee": 1.0582815134847485, + "loss_delivery": 0.9602544831263052, + "loss_biodist": 1.0551355674460128, + "loss_toxic": 0.5365343851012152 + }, + { + "loss": 4.523071179518828, + "loss_size": 1.0805974346963134, + "loss_pdi": 0.6548431483474938, + "loss_ee": 0.9541445181176469, + "loss_delivery": 0.9257775768637657, + "loss_biodist": 0.5845872131553856, + "loss_toxic": 0.3552327539671112 + }, + { + "loss": 4.188256134858003, + "loss_size": 1.0770723203549515, + "loss_pdi": 0.6466329935434703, + "loss_ee": 0.9437865614891052, + "loss_delivery": 0.8513611442333943, + "loss_biodist": 0.46490952453097784, + "loss_toxic": 0.25296762661152594 + }, + { + "loss": 3.84365147191125, + "loss_size": 1.0425346574267826, + "loss_pdi": 0.618281994317029, + "loss_ee": 0.8794757723808289, + "loss_delivery": 0.8202072083950043, + "loss_biodist": 0.3390743921737413, + "loss_toxic": 0.2001333768051621 + }, + { + "loss": 3.5898072912886336, + "loss_size": 0.9976331996353897, + "loss_pdi": 0.5824355587765977, + "loss_ee": 0.8188786997988418, + "loss_delivery": 0.7497271782643086, + "loss_biodist": 0.32773358717158035, + "loss_toxic": 0.16699596401304007 + }, + { + "loss": 3.5503548641462586, + "loss_size": 1.0286318790670987, + "loss_pdi": 0.5576911544477617, + "loss_ee": 0.856319905938329, + "loss_delivery": 0.7199911005996369, + "loss_biodist": 0.28663341952739535, + "loss_toxic": 0.16064182748212605 + }, + { + "loss": 3.3900407649375297, + "loss_size": 0.9947644510381931, + "loss_pdi": 0.5822967455999272, + "loss_ee": 0.8434135639989698, + "loss_delivery": 0.6596610352799699, + "loss_biodist": 0.2585667297244072, + "loss_toxic": 0.11662859046781385 + }, + { + "loss": 3.2567197471051603, + "loss_size": 0.9685135679067792, + "loss_pdi": 0.5588751040600441, + "loss_ee": 0.79942778316704, + "loss_delivery": 0.6265396055941647, + "loss_biodist": 0.24395358562469482, + "loss_toxic": 0.12165178422740586 + }, + { + "loss": 3.234087083790753, + "loss_size": 0.9572132026424279, + "loss_pdi": 0.5511158140929969, + "loss_ee": 0.8025100319772154, + "loss_delivery": 0.6379532136425778, + "loss_biodist": 0.21870556433458585, + "loss_toxic": 0.13136480687614027 + }, + { + "loss": 3.0502883646939254, + "loss_size": 0.8992311735008214, + "loss_pdi": 0.5489526101060815, + "loss_ee": 0.7788462799948614, + "loss_delivery": 0.6070568097906338, + "loss_biodist": 0.20949353901921092, + "loss_toxic": 0.0742840920417645 + }, + { + "loss": 3.173892449688267, + "loss_size": 0.9275565492744381, + "loss_pdi": 0.5518025916975897, + "loss_ee": 0.8022452979474455, + "loss_delivery": 0.6698433639028588, + "loss_biodist": 0.20099210326333303, + "loss_toxic": 0.09389892752546616 + }, + { + "loss": 3.090608519476813, + "loss_size": 0.9454825053343902, + "loss_pdi": 0.5328148651767421, + "loss_ee": 0.809598571545369, + "loss_delivery": 0.5869329646229744, + "loss_biodist": 0.230247830015582, + "loss_toxic": 0.05867864513404768 + } + ], + "val": [ + { + "loss": 4.145606851577758, + "loss_size": 0.5787453949451447, + "loss_pdi": 0.6668040752410889, + "loss_ee": 0.9050501465797425, + "loss_delivery": 0.8079444321803748, + "loss_biodist": 0.7703335046768188, + "loss_toxic": 0.4415561527013779, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.4442593097686767, + "loss_size": 0.41342132091522216, + "loss_pdi": 0.643909078836441, + "loss_ee": 0.8091854572296142, + "loss_delivery": 0.8259047922125319, + "loss_biodist": 0.4396663784980774, + "loss_toxic": 0.33677796721458436, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.148733377456665, + "loss_size": 0.39056936502456663, + "loss_pdi": 0.5834551930427552, + "loss_ee": 0.7725244641304017, + "loss_delivery": 0.8219722658395767, + "loss_biodist": 0.30380556881427767, + "loss_toxic": 0.3053280901163816, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.9237773418426514, + "loss_size": 0.26635559648275375, + "loss_pdi": 0.5148423090577126, + "loss_ee": 0.7525633133947849, + "loss_delivery": 0.8397242486476898, + "loss_biodist": 0.17795073464512826, + "loss_toxic": 0.3923140401020646, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8045753479003905, + "loss_size": 0.25571008771657944, + "loss_pdi": 0.466125363111496, + "loss_ee": 0.7717210814356804, + "loss_delivery": 0.8160159582272172, + "loss_biodist": 0.12289684787392616, + "loss_toxic": 0.3907925594598055, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.79259135723114, + "loss_size": 0.2913134977221489, + "loss_pdi": 0.45867272838950157, + "loss_ee": 0.8326532807201147, + "loss_delivery": 0.8062762513756752, + "loss_biodist": 0.11587586551904679, + "loss_toxic": 0.3189347217790782, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.815433645248413, + "loss_size": 0.3001242786645889, + "loss_pdi": 0.45082499235868456, + "loss_ee": 0.7799030734226108, + "loss_delivery": 0.7875660380348564, + "loss_biodist": 0.11556445211172103, + "loss_toxic": 0.4047958321869373, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.69639847278595, + "loss_size": 0.2592822894454002, + "loss_pdi": 0.45043728351593015, + "loss_ee": 0.7782680813223124, + "loss_delivery": 0.7862008877098561, + "loss_biodist": 0.11447847336530685, + "loss_toxic": 0.33743340661749244, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.754783272743225, + "loss_size": 0.2988031134009361, + "loss_pdi": 0.4530772313475609, + "loss_ee": 0.8197335122153163, + "loss_delivery": 0.816107339411974, + "loss_biodist": 0.10424908772110938, + "loss_toxic": 0.3031175131909549, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.6354313254356385, + "loss_size": 0.26673090904951097, + "loss_pdi": 0.4474984996020794, + "loss_ee": 0.7827383052557707, + "loss_delivery": 0.7797933895606548, + "loss_biodist": 0.10235336273908616, + "loss_toxic": 0.29335027942433956, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.5953806400299073, + "loss_size": 0.249676850438118, + "loss_pdi": 0.44969420284032824, + "loss_ee": 0.7588210146874189, + "loss_delivery": 0.7748311610892415, + "loss_biodist": 0.10375507175922394, + "loss_toxic": 0.29373050848953425, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.6621654272079467, + "loss_size": 0.2608113825321198, + "loss_pdi": 0.4512368381023407, + "loss_ee": 0.8041598474606871, + "loss_delivery": 0.7632074613822624, + "loss_biodist": 0.09309678822755814, + "loss_toxic": 0.326570615102537, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_4/splits.json b/models/abl_full/s1_llm/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s1_llm/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..3a48167 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.7148602454419013, + "rmse": 0.8454940836232394, + "mae": 0.5174528707229045, + "r2": 0.0434281945825975 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8905622140496255, + "rmse": 0.9436960390134238, + "mae": 0.6175072552186662, + "r2": 0.138841040505834 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7387740555951532, + "recall": 0.7456011730205279, + "f1": 0.7420054200542006 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6509661835748792, + "recall": 0.6675213675213675, + "f1": 0.6549590850833087 + }, + "toxic": { + "n_samples": 59, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.1907601176792889, + "js_divergence": 0.047605114707691666 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/pip_freeze.txt b/models/abl_full/s1_llm/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s1_llm/seed42/repro.txt b/models/abl_full/s1_llm/seed42/repro.txt new file mode 100644 index 0000000..eb1932e --- /dev/null +++ b/models/abl_full/s1_llm/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T11:40:17+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=0 --batch-size 8 --use-mpnn --use-llm --use-rag --rag-top-k 4 --use-soft-prompt --no-llm-freeze --llm-use-qlora --llm-model-path models/qwen2.5-7b-instruct diff --git a/models/abl_full/s1_llm/seed42/strata_info.json b/models/abl_full/s1_llm/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s1_llm/seed42/summary.json b/models/abl_full/s1_llm/seed42/summary.json new file mode 100644 index 0000000..f45d371 --- /dev/null +++ b/models/abl_full/s1_llm/seed42/summary.json @@ -0,0 +1,357 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.36120126405768543, + "lr": 0.0009943285546676244, + "weight_decay": 0.011860461070657894, + "backbone_lr_ratio": 0.09819347379144983, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 15, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.6152706135152473, + "rmse": 1.2709329697176195, + "mae": 0.5560500422066235, + "r2": 0.011414624800616835 + }, + "delivery": { + "n_samples": 58, + "mse": 0.569237390911561, + "rmse": 0.7544782242792438, + "mae": 0.5994908674138373, + "r2": 0.27646492613737106 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6964285714285714, + "recall": 0.7195295794725588, + "f1": 0.7043740573152337 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.684408546477512, + "recall": 0.7380952380952381, + "f1": 0.6942196418797405 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9827586206896551, + "precision": 0.9912280701754386, + "recall": 0.75, + "f1": 0.8289085545722714 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.2234068484038443, + "js_divergence": 0.04400725882151094 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.2307845821368613, + "lr": 0.000958470938363808, + "weight_decay": 7.743828905178866e-05, + "backbone_lr_ratio": 0.011104773529240554, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 11, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3497929868728069, + "rmse": 0.5914329944066419, + "mae": 0.4466874681501871, + "r2": -0.06814342257090522 + }, + "delivery": { + "n_samples": 61, + "mse": 1.1250146367822282, + "rmse": 1.0606670716026911, + "mae": 0.6891685391730461, + "r2": 0.14844502105923318 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6190476190476191, + "precision": 0.5575167376749848, + "recall": 0.5714285714285714, + "f1": 0.5543766578249336 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.4739422084623323, + "recall": 0.4779744065458351, + "f1": 0.4646469622331691 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9836065573770492, + "precision": 0.9915254237288136, + "recall": 0.8333333333333333, + "f1": 0.8957264957264958 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.22230263127128363, + "js_divergence": 0.05931753635423146 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.3632267382224968, + "lr": 0.0005436310282210407, + "weight_decay": 0.001502346334594783, + "backbone_lr_ratio": 0.08436478652740312, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 13, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3808630997006998, + "rmse": 0.6171410695300547, + "mae": 0.4970361513440453, + "r2": 0.24780218295956957 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6823172211803693, + "rmse": 0.826024951911484, + "mae": 0.5678542086932187, + "r2": 0.09171751672639383 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6693363844393593, + "recall": 0.717008797653959, + "f1": 0.662962962962963 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.5985449735449735, + "recall": 0.6507936507936507, + "f1": 0.6140979689366786 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.2095544756354361, + "js_divergence": 0.05129503689646577 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.2834072840481449, + "lr": 0.0009817126260852267, + "weight_decay": 0.02817395190380758, + "backbone_lr_ratio": 0.07975174608349046, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 10, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.771712610404338, + "rmse": 1.3310569523519036, + "mae": 0.5784341517768531, + "r2": -0.002094156269689673 + }, + "delivery": { + "n_samples": 59, + "mse": 0.7036047486492218, + "rmse": 0.8388115096070283, + "mae": 0.5862117674107016, + "r2": 0.3160125883953585 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.7014607425441266, + "recall": 0.7426686217008798, + "f1": 0.7105824446267432 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.5854030501089325, + "recall": 0.6147812971342383, + "f1": 0.5895045852492662 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9666666666666667, + "precision": 0.8, + "recall": 0.9824561403508771, + "f1": 0.8660714285714286 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.20841596050219596, + "js_divergence": 0.05264348216657474 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.3555361701988309, + "lr": 0.0008600917157970105, + "weight_decay": 0.04751323754945044, + "backbone_lr_ratio": 0.0916633676039248, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 12, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.7148602454419013, + "rmse": 0.8454940836232394, + "mae": 0.5174528707229045, + "r2": 0.0434281945825975 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8905622140496255, + "rmse": 0.9436960390134238, + "mae": 0.6175072552186662, + "r2": 0.138841040505834 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7387740555951532, + "recall": 0.7456011730205279, + "f1": 0.7420054200542006 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6509661835748792, + "recall": 0.6675213675213675, + "f1": 0.6549590850833087 + }, + "toxic": { + "n_samples": 59, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.1907601176792889, + "js_divergence": 0.047605114707691666 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.9664999111869987, + "mse_std": 0.6092440138436447, + "rmse_mean": 0.9312116139258919, + "rmse_std": 0.31519016684619855, + "mae_mean": 0.5191321368401227, + "mae_std": 0.04608458146394721, + "r2_mean": 0.0464814847004378, + "r2_std": 0.10702101948116965 + }, + "delivery": { + "mse_mean": 0.7941472423146012, + "mse_std": 0.19496533924809686, + "rmse_mean": 0.8847355592827743, + "rmse_std": 0.10672503199904841, + "mae_mean": 0.612046527581894, + "mae_std": 0.04184654036430236, + "r2_mean": 0.1942962185648381, + "r2_std": 0.08633257826101888 + }, + "pdi": { + "accuracy_mean": 0.7214285714285713, + "accuracy_std": 0.06144518047887591, + "precision_mean": 0.672703298336439, + "precision_std": 0.061700087538997354, + "recall_mean": 0.6992473486552994, + "recall_std": 0.06495931304343325, + "f1_mean": 0.6748603085568148, + "f1_std": 0.06528928747510024 + }, + "ee": { + "accuracy_mean": 0.6595238095238095, + "accuracy_std": 0.06326347740755436, + "precision_mean": 0.5986529924337259, + "precision_std": 0.07185963720361778, + "recall_mean": 0.6298331920180659, + "recall_std": 0.08586973889602928, + "f1_mean": 0.6034856486764326, + "f1_std": 0.07805952152979412 + }, + "toxic": { + "accuracy_mean": 0.9734916148483135, + "accuracy_std": 0.02219715383749552, + "precision_mean": 0.8994078416379934, + "precision_std": 0.1193210012004697, + "recall_mean": 0.906261343012704, + "recall_std": 0.09781609924991808, + "f1_mean": 0.8745698672026105, + "f1_std": 0.07332155517028771 + }, + "biodist": { + "kl_divergence_mean": 0.21088800669840985, + "kl_divergence_std": 0.011832466231885556, + "js_divergence_mean": 0.05097368578929492, + "js_divergence_std": 0.005145672056299937 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/local_uncommitted.patch b/models/abl_full/s1_moe/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s1_moe/seed42/outer_fold_0/best_params.json b/models/abl_full/s1_moe/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..ce267df --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_0/best_params.json @@ -0,0 +1,15 @@ +{ + "dropout": 0.15695989820116132, + "lr": 0.0009190576652999535, + "weight_decay": 0.00019160484854324728, + "backbone_lr_ratio": 0.010858228937443976, + "moe_n_experts": 4, + "moe_top_k": 1, + "moe_expert_hidden_mult": 2, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s1_moe/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..82d35d4 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 14} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_0/history.json b/models/abl_full/s1_moe/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..acc7009 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_0/history.json @@ -0,0 +1,328 @@ +{ + "train": [ + { + "loss": 5.260168221261766, + "loss_size": 0.8517330959439278, + "loss_pdi": 0.6755945285161337, + "loss_ee": 1.0548694630463917, + "loss_delivery": 1.048931595351961, + "loss_biodist": 1.0378692812389798, + "loss_toxic": 0.5918096403280894, + "loss_moe_lb": 1.0186130967405107 + }, + { + "loss": 4.120605852868822, + "loss_size": 0.8090289657314619, + "loss_pdi": 0.5995722313721975, + "loss_ee": 0.937309765153461, + "loss_delivery": 0.8351800110605028, + "loss_biodist": 0.5923729555474387, + "loss_toxic": 0.3523801407880253, + "loss_moe_lb": 1.0140925347805023 + }, + { + "loss": 3.5062434011035495, + "loss_size": 0.6885613840487268, + "loss_pdi": 0.5568692253695594, + "loss_ee": 0.8766446577178107, + "loss_delivery": 0.845353938639164, + "loss_biodist": 0.36552759177154964, + "loss_toxic": 0.17980546607739395, + "loss_moe_lb": 1.0077866812547047 + }, + { + "loss": 3.3863638904359608, + "loss_size": 0.7246030991276106, + "loss_pdi": 0.5412982487016254, + "loss_ee": 0.8556348052289751, + "loss_delivery": 0.8543239111701647, + "loss_biodist": 0.2930798489186499, + "loss_toxic": 0.13356096980472407, + "loss_moe_lb": 0.9994159605767992 + }, + { + "loss": 3.2438142034742565, + "loss_size": 0.7033978410893016, + "loss_pdi": 0.5378061085939407, + "loss_ee": 0.8232747084564633, + "loss_delivery": 0.8659263642297851, + "loss_biodist": 0.22898338652319378, + "loss_toxic": 0.10634245762291054, + "loss_moe_lb": 1.0025723609659407 + }, + { + "loss": 3.009732630517748, + "loss_size": 0.6156943589448929, + "loss_pdi": 0.5014130075772604, + "loss_ee": 0.8161476585600111, + "loss_delivery": 0.7509783075915443, + "loss_biodist": 0.21849996679359013, + "loss_toxic": 0.1286999929903282, + "loss_moe_lb": 1.0033133394188352 + }, + { + "loss": 2.944969223605262, + "loss_size": 0.6832108050584793, + "loss_pdi": 0.4906955079899894, + "loss_ee": 0.8225027090973325, + "loss_delivery": 0.70570676939355, + "loss_biodist": 0.18543165591028002, + "loss_toxic": 0.08584959010800554, + "loss_moe_lb": 1.0008655587832134 + }, + { + "loss": 2.9926582905981274, + "loss_size": 0.6821919431289037, + "loss_pdi": 0.48137327200836605, + "loss_ee": 0.7648612542284859, + "loss_delivery": 0.7717121293147405, + "loss_biodist": 0.17556513970096907, + "loss_toxic": 0.1461451725141766, + "loss_moe_lb": 0.9998302095466189 + }, + { + "loss": 2.9238066805733576, + "loss_size": 0.6703398136628999, + "loss_pdi": 0.48746924267874825, + "loss_ee": 0.7764328254593743, + "loss_delivery": 0.7620989469190439, + "loss_biodist": 0.1878118279079596, + "loss_toxic": 0.0767904526502308, + "loss_moe_lb": 1.0071891049544017 + }, + { + "loss": 2.8642554614279003, + "loss_size": 0.670949301785893, + "loss_pdi": 0.4966042588154475, + "loss_ee": 0.7678928010993533, + "loss_delivery": 0.7376384126643339, + "loss_biodist": 0.15973376689685714, + "loss_toxic": 0.07134509411925036, + "loss_moe_lb": 0.9985315501689911 + }, + { + "loss": 2.7400973439216614, + "loss_size": 0.6812463079889616, + "loss_pdi": 0.4845222532749176, + "loss_ee": 0.7271750552786721, + "loss_delivery": 0.6282760227719942, + "loss_biodist": 0.16913988524013096, + "loss_toxic": 0.08506749393159731, + "loss_moe_lb": 1.001991288529502 + }, + { + "loss": 2.7109390364752874, + "loss_size": 0.6219531115558412, + "loss_pdi": 0.4625614980856578, + "loss_ee": 0.7197159975767136, + "loss_delivery": 0.7617617986268468, + "loss_biodist": 0.14061817444033092, + "loss_toxic": 0.04640000676994936, + "loss_moe_lb": 1.0015037655830383 + }, + { + "loss": 2.7710335585806103, + "loss_size": 0.6469637867477205, + "loss_pdi": 0.46038439042038387, + "loss_ee": 0.738719082540936, + "loss_delivery": 0.774641887181335, + "loss_biodist": 0.13877226867609554, + "loss_toxic": 0.05570294645278611, + "loss_moe_lb": 0.9960495200422075 + }, + { + "loss": 2.755922145313687, + "loss_size": 0.6174289203352399, + "loss_pdi": 0.4756571617391374, + "loss_ee": 0.7335316174560123, + "loss_delivery": 0.7606720584962103, + "loss_biodist": 0.1449727854794926, + "loss_toxic": 0.06676932499330077, + "loss_moe_lb": 0.9959597852494981 + } + ], + "val": [ + { + "loss": 4.257695277531941, + "loss_size": 0.3637104690812218, + "loss_pdi": 0.6855501135190328, + "loss_ee": 1.0337772170702617, + "loss_delivery": 0.7074253844718138, + "loss_biodist": 0.9515179793039957, + "loss_toxic": 0.5228780110677084, + "loss_moe_lb": 1.0639034112294514, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.42424242424242425, + "acc_toxic": 1.0 + }, + { + "loss": 3.871230363845825, + "loss_size": 0.3427614209552606, + "loss_pdi": 0.8329586386680603, + "loss_ee": 0.9103371500968933, + "loss_delivery": 0.6440940449635187, + "loss_biodist": 0.6961866617202759, + "loss_toxic": 0.4571017076571782, + "loss_moe_lb": 1.0761532386144002, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 3.811175982157389, + "loss_size": 0.32305806626876193, + "loss_pdi": 1.1382198333740234, + "loss_ee": 0.7589142421881357, + "loss_delivery": 0.6311334768931071, + "loss_biodist": 0.3573339382807414, + "loss_toxic": 0.6169237289577723, + "loss_moe_lb": 1.0644107659657795, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.755109707514445, + "loss_size": 0.31078241020441055, + "loss_pdi": 1.1934354702631633, + "loss_ee": 0.7589767550428709, + "loss_delivery": 0.5634981989860535, + "loss_biodist": 0.23268679529428482, + "loss_toxic": 0.7086048706745108, + "loss_moe_lb": 1.0652728080749512, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.3939393939393939, + "acc_toxic": 0.9 + }, + { + "loss": 3.0856104691823325, + "loss_size": 0.3252199739217758, + "loss_pdi": 1.0402134855588276, + "loss_ee": 0.7618473768234253, + "loss_delivery": 0.5066693673531214, + "loss_biodist": 0.19690571477015814, + "loss_toxic": 0.2746335680906971, + "loss_moe_lb": 1.0668346484502156, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.42424242424242425, + "acc_toxic": 1.0 + }, + { + "loss": 3.5414024194081626, + "loss_size": 0.324511781334877, + "loss_pdi": 1.2202592889467876, + "loss_ee": 0.7443348901967207, + "loss_delivery": 0.5244407753149668, + "loss_biodist": 0.1809499946733316, + "loss_toxic": 0.5641448165600499, + "loss_moe_lb": 1.0732875267664592, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 3.3418479760487876, + "loss_size": 0.31801052888234455, + "loss_pdi": 1.0403033097585042, + "loss_ee": 0.7268752306699753, + "loss_delivery": 0.5229921638965607, + "loss_biodist": 0.21007534737388292, + "loss_toxic": 0.536486447788775, + "loss_moe_lb": 1.065907637278239, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.1974575519561768, + "loss_size": 0.33111680050690967, + "loss_pdi": 1.1830923557281494, + "loss_ee": 0.686233576387167, + "loss_delivery": 0.5017515569925308, + "loss_biodist": 0.16470218201478323, + "loss_toxic": 0.3556163421211143, + "loss_moe_lb": 1.0653670032819111, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.316643555959066, + "loss_size": 0.3303288146853447, + "loss_pdi": 1.0878466367721558, + "loss_ee": 0.7039469766120116, + "loss_delivery": 0.510225385427475, + "loss_biodist": 0.1530647079149882, + "loss_toxic": 0.5445702893969914, + "loss_moe_lb": 1.0709635019302368, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.1535542011260986, + "loss_size": 0.31693164507548016, + "loss_pdi": 1.1400772333145142, + "loss_ee": 0.6933556733032068, + "loss_delivery": 0.4851265102624893, + "loss_biodist": 0.15071306129296622, + "loss_toxic": 0.3910114758958419, + "loss_moe_lb": 1.0726310014724731, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 3.0222195784250894, + "loss_size": 0.3396364450454712, + "loss_pdi": 1.1506329377492268, + "loss_ee": 0.7055139330526193, + "loss_delivery": 0.4830969000856082, + "loss_biodist": 0.14614767084519067, + "loss_toxic": 0.23351879666248956, + "loss_moe_lb": 1.06848140557607, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.45454545454545453, + "acc_toxic": 1.0 + }, + { + "loss": 3.1522719860076904, + "loss_size": 0.3444435844818751, + "loss_pdi": 1.187293251355489, + "loss_ee": 0.6996708810329437, + "loss_delivery": 0.4896681532263756, + "loss_biodist": 0.15015563492973646, + "loss_toxic": 0.3132700726855546, + "loss_moe_lb": 1.0713897546132405, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.1801183223724365, + "loss_size": 0.33436018228530884, + "loss_pdi": 1.2031262516975403, + "loss_ee": 0.7020683207859596, + "loss_delivery": 0.49416064222653705, + "loss_biodist": 0.15545661002397537, + "loss_toxic": 0.32326407893560827, + "loss_moe_lb": 1.0709621906280518, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 3.166618982950846, + "loss_size": 0.3403185158967972, + "loss_pdi": 1.1982239286104839, + "loss_ee": 0.7024492435157299, + "loss_delivery": 0.4952966123819351, + "loss_biodist": 0.1489246574540933, + "loss_toxic": 0.3144592272583395, + "loss_moe_lb": 1.068684458732605, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_0/splits.json b/models/abl_full/s1_moe/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s1_moe/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..18a12ae --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.4253441447999764, + "rmse": 1.1938777763238482, + "mae": 0.5525658846529852, + "r2": 0.12765429867580036 + }, + "delivery": { + "n_samples": 58, + "mse": 0.6405855117319039, + "rmse": 0.8003658611734411, + "mae": 0.6030296326197427, + "r2": 0.18577715914961368 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6652941176470588, + "recall": 0.7002851033499644, + "f1": 0.6680891417733522 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.7002314814814815, + "recall": 0.748095238095238, + "f1": 0.7037368316438083 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.19189511425409703, + "js_divergence": 0.04151174073426368 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_1/best_params.json b/models/abl_full/s1_moe/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..e02a742 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_1/best_params.json @@ -0,0 +1,15 @@ +{ + "dropout": 0.3288453348343448, + "lr": 0.0004056640613227662, + "weight_decay": 1.128493039126102e-05, + "backbone_lr_ratio": 0.19861551689911722, + "moe_n_experts": 2, + "moe_top_k": 1, + "moe_expert_hidden_mult": 2, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s1_moe/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..0ac5b47 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 13} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_1/history.json b/models/abl_full/s1_moe/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..a1c827c --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_1/history.json @@ -0,0 +1,305 @@ +{ + "train": [ + { + "loss": 5.905102199978298, + "loss_size": 1.2572639543149207, + "loss_pdi": 0.6939836310015784, + "loss_ee": 1.0776869853337605, + "loss_delivery": 0.9642314944002364, + "loss_biodist": 1.2400022678905063, + "loss_toxic": 0.6691901683807373, + "loss_moe_lb": 1.0105675492021773 + }, + { + "loss": 5.446819067001343, + "loss_size": 1.202259123325348, + "loss_pdi": 0.6726724439197116, + "loss_ee": 1.0221668945418463, + "loss_delivery": 0.8912036294738451, + "loss_biodist": 1.0608553323480818, + "loss_toxic": 0.606039477719201, + "loss_moe_lb": 1.0029263893763225 + }, + { + "loss": 5.064952982796563, + "loss_size": 1.1734783848126729, + "loss_pdi": 0.6453974114523994, + "loss_ee": 0.9769740369584825, + "loss_delivery": 0.8879869911405776, + "loss_biodist": 0.868716385629442, + "loss_toxic": 0.5257366465197669, + "loss_moe_lb": 1.00640203555425 + }, + { + "loss": 4.425032218297322, + "loss_size": 1.1525983677970038, + "loss_pdi": 0.6119795209831662, + "loss_ee": 0.9114208486345079, + "loss_delivery": 0.8097465104526944, + "loss_biodist": 0.5715966936614778, + "loss_toxic": 0.3758072836531533, + "loss_moe_lb": 1.002094202571445 + }, + { + "loss": 3.6614593267440796, + "loss_size": 0.8029846110277705, + "loss_pdi": 0.5881916681925455, + "loss_ee": 0.8422817488511404, + "loss_delivery": 0.7265379188789262, + "loss_biodist": 0.4607583185036977, + "loss_toxic": 0.24119465467002657, + "loss_moe_lb": 1.0045535266399384 + }, + { + "loss": 3.7164044777552285, + "loss_size": 1.0566480598515935, + "loss_pdi": 0.559031594130728, + "loss_ee": 0.8080689609050751, + "loss_delivery": 0.7322562312086424, + "loss_biodist": 0.38351913044850033, + "loss_toxic": 0.17829929540554681, + "loss_moe_lb": 1.0032268232769437 + }, + { + "loss": 3.572847194141812, + "loss_size": 1.050018273293972, + "loss_pdi": 0.542369481590059, + "loss_ee": 0.7952843142880334, + "loss_delivery": 0.6911739491754108, + "loss_biodist": 0.35026406413979, + "loss_toxic": 0.1451760415608684, + "loss_moe_lb": 1.0021035936143663 + }, + { + "loss": 3.5263494849205017, + "loss_size": 1.029277727007866, + "loss_pdi": 0.5698640098174413, + "loss_ee": 0.7857922630177604, + "loss_delivery": 0.6931009205679098, + "loss_biodist": 0.29625750664207673, + "loss_toxic": 0.15471319957739776, + "loss_moe_lb": 1.0023051500320435 + }, + { + "loss": 3.525627997186449, + "loss_size": 0.9893801808357239, + "loss_pdi": 0.5314852943023046, + "loss_ee": 0.7985921932591332, + "loss_delivery": 0.765529978606436, + "loss_biodist": 0.3101241472694609, + "loss_toxic": 0.13500559981912374, + "loss_moe_lb": 1.0015914075904422 + }, + { + "loss": 3.517677426338196, + "loss_size": 1.043810822069645, + "loss_pdi": 0.515463337302208, + "loss_ee": 0.78115746875604, + "loss_delivery": 0.7440650819076432, + "loss_biodist": 0.322847160200278, + "loss_toxic": 0.11567087207610409, + "loss_moe_lb": 1.0025348895125918 + }, + { + "loss": 3.3488156464364796, + "loss_size": 0.9857401549816132, + "loss_pdi": 0.5194946858617995, + "loss_ee": 0.7569489230712255, + "loss_delivery": 0.6704753662149111, + "loss_biodist": 0.29555562966399723, + "loss_toxic": 0.1238406320205993, + "loss_moe_lb": 1.0028780202070873 + }, + { + "loss": 3.473741994963752, + "loss_size": 1.0301170837548044, + "loss_pdi": 0.5069430338011848, + "loss_ee": 0.7611087477869458, + "loss_delivery": 0.745972560511695, + "loss_biodist": 0.30682342333926094, + "loss_toxic": 0.12802567519247532, + "loss_moe_lb": 1.0027521848678589 + }, + { + "loss": 3.294384863641527, + "loss_size": 0.9320159571038352, + "loss_pdi": 0.49486986299355823, + "loss_ee": 0.7605094313621521, + "loss_delivery": 0.6977262083027098, + "loss_biodist": 0.2885396331548691, + "loss_toxic": 0.12374827141563098, + "loss_moe_lb": 1.0030332307020824 + } + ], + "val": [ + { + "loss": 4.172354221343994, + "loss_size": 0.5109824736913046, + "loss_pdi": 0.7022512753804525, + "loss_ee": 1.0355663299560547, + "loss_delivery": 0.2648109743992488, + "loss_biodist": 1.0050320823987324, + "loss_toxic": 0.6525069077809652, + "loss_moe_lb": 1.0025964577992756, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.6666666666666666, + "acc_toxic": 1.0 + }, + { + "loss": 3.670958916346232, + "loss_size": 0.48451834393199533, + "loss_pdi": 0.6939840515454611, + "loss_ee": 0.9702009359995524, + "loss_delivery": 0.20050871185958385, + "loss_biodist": 0.8088534573713938, + "loss_toxic": 0.5132799943288168, + "loss_moe_lb": 0.9999510447184244, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 3.1273399194081626, + "loss_size": 0.472111713529254, + "loss_pdi": 0.6754741867383321, + "loss_ee": 0.9102420409520467, + "loss_delivery": 0.1759985089302063, + "loss_biodist": 0.5434930125872294, + "loss_toxic": 0.3450566033522288, + "loss_moe_lb": 1.0033926169077556, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.787933111190796, + "loss_size": 0.4738388657569885, + "loss_pdi": 0.5758654177188873, + "loss_ee": 0.8019344806671143, + "loss_delivery": 0.4609581530094147, + "loss_biodist": 0.4147915840148926, + "loss_toxic": 0.0490681529045105, + "loss_moe_lb": 1.0044389565785725, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.5918494860331216, + "loss_size": 0.4449250151713689, + "loss_pdi": 0.5801514387130737, + "loss_ee": 0.6706389586130778, + "loss_delivery": 0.40074973305066425, + "loss_biodist": 0.4661114861567815, + "loss_toxic": 0.016519727030148108, + "loss_moe_lb": 1.0077165166536968, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.5297111670176187, + "loss_size": 0.4577598770459493, + "loss_pdi": 0.596176008383433, + "loss_ee": 0.6610762774944305, + "loss_delivery": 0.3894001046816508, + "loss_biodist": 0.4061560481786728, + "loss_toxic": 0.007689725374802947, + "loss_moe_lb": 1.005305786927541, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.477646748224894, + "loss_size": 0.438289741675059, + "loss_pdi": 0.6279987096786499, + "loss_ee": 0.6473462680975596, + "loss_delivery": 0.3572277675072352, + "loss_biodist": 0.3931392232577006, + "loss_toxic": 0.003966480648765962, + "loss_moe_lb": 1.0037854711214702, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.450061559677124, + "loss_size": 0.42520712316036224, + "loss_pdi": 0.6166286468505859, + "loss_ee": 0.6400464177131653, + "loss_delivery": 0.41020755966504413, + "loss_biodist": 0.3428303400675456, + "loss_toxic": 0.006478405169521769, + "loss_moe_lb": 1.0016534328460693, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3537837664286294, + "loss_size": 0.41737974683443707, + "loss_pdi": 0.6149568955103556, + "loss_ee": 0.6430984536806742, + "loss_delivery": 0.35749780635039013, + "loss_biodist": 0.3065420041481654, + "loss_toxic": 0.005462375236675143, + "loss_moe_lb": 1.0027328729629517, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.309458335240682, + "loss_size": 0.4239919185638428, + "loss_pdi": 0.6062180797259012, + "loss_ee": 0.6388554573059082, + "loss_delivery": 0.32721439997355145, + "loss_biodist": 0.30010945598284405, + "loss_toxic": 0.00426814464541773, + "loss_moe_lb": 1.0061208009719849, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3323272864023843, + "loss_size": 0.42852068940798443, + "loss_pdi": 0.6134323875109354, + "loss_ee": 0.6049622396628062, + "loss_delivery": 0.37715405722459155, + "loss_biodist": 0.2965145657459895, + "loss_toxic": 0.0034544584341347218, + "loss_moe_lb": 1.002916395664215, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3209588527679443, + "loss_size": 0.4249720374743144, + "loss_pdi": 0.616244892279307, + "loss_ee": 0.6014915108680725, + "loss_delivery": 0.36207857728004456, + "loss_biodist": 0.30472835898399353, + "loss_toxic": 0.0031892515641326704, + "loss_moe_lb": 1.0054678519566853, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3427635033925376, + "loss_size": 0.4265919824441274, + "loss_pdi": 0.6148228645324707, + "loss_ee": 0.6200418571631113, + "loss_delivery": 0.36679735283056897, + "loss_biodist": 0.303764467438062, + "loss_toxic": 0.003131777591382464, + "loss_moe_lb": 1.0039037466049194, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_1/splits.json b/models/abl_full/s1_moe/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s1_moe/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..fe726ae --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3740864382223049, + "rmse": 0.6116260607775841, + "mae": 0.4674327611878869, + "r2": -0.1423269861194456 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0425454348723864, + "rmse": 1.0210511421434219, + "mae": 0.6284202284133825, + "r2": 0.21086826178831475 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6071428571428571, + "precision": 0.5388888888888889, + "recall": 0.5476190476190476, + "f1": 0.5354449472096531 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5714285714285714, + "precision": 0.5211940836940837, + "recall": 0.5292564578278864, + "f1": 0.5106135244066278 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.3265798284655706, + "js_divergence": 0.08538375545430645 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_2/best_params.json b/models/abl_full/s1_moe/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..5eeb71d --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_2/best_params.json @@ -0,0 +1,15 @@ +{ + "dropout": 0.20354076718889158, + "lr": 0.0004268918448998353, + "weight_decay": 1.2308254246176102e-05, + "backbone_lr_ratio": 0.26381730533474246, + "moe_n_experts": 4, + "moe_top_k": 2, + "moe_expert_hidden_mult": 1, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s1_moe/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..6aa3930 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 9} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_2/history.json b/models/abl_full/s1_moe/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..3d86bf5 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_2/history.json @@ -0,0 +1,213 @@ +{ + "train": [ + { + "loss": 5.497069464789496, + "loss_size": 0.9005960681372218, + "loss_pdi": 0.6834568116399977, + "loss_ee": 1.0921085211965773, + "loss_delivery": 0.9102553112639321, + "loss_biodist": 1.2647369239065382, + "loss_toxic": 0.6313900053501129, + "loss_moe_lb": 2.0187387665112815 + }, + { + "loss": 4.578105939759149, + "loss_size": 0.5212400042348437, + "loss_pdi": 0.6528313027487861, + "loss_ee": 1.0338885916603937, + "loss_delivery": 0.8365934681561258, + "loss_biodist": 1.0210122399859958, + "loss_toxic": 0.5069841278923882, + "loss_moe_lb": 2.0224303868081837 + }, + { + "loss": 4.351519743601481, + "loss_size": 0.8005532547831535, + "loss_pdi": 0.6259136398633321, + "loss_ee": 0.9734727044900259, + "loss_delivery": 0.8223518373237716, + "loss_biodist": 0.7632966306474473, + "loss_toxic": 0.36042143735620713, + "loss_moe_lb": 2.0770167443487377 + }, + { + "loss": 3.8760416507720947, + "loss_size": 0.7924135410123401, + "loss_pdi": 0.6103556834989123, + "loss_ee": 0.9323405822118124, + "loss_delivery": 0.7949039224121306, + "loss_biodist": 0.5362783753209643, + "loss_toxic": 0.20132996038430268, + "loss_moe_lb": 2.109838856591119 + }, + { + "loss": 3.355376813146803, + "loss_size": 0.7264799815085199, + "loss_pdi": 0.5465588255061044, + "loss_ee": 0.8404630853070153, + "loss_delivery": 0.6320349441634284, + "loss_biodist": 0.4419398324357139, + "loss_toxic": 0.15510407172971302, + "loss_moe_lb": 2.09273315138287 + }, + { + "loss": 3.2187588612238565, + "loss_size": 0.6547108226352267, + "loss_pdi": 0.5309810373518202, + "loss_ee": 0.8324958450264401, + "loss_delivery": 0.697597809549835, + "loss_biodist": 0.36821071224080193, + "loss_toxic": 0.12192867825635606, + "loss_moe_lb": 2.179488778114319 + }, + { + "loss": 3.140499856736925, + "loss_size": 0.6612713386615118, + "loss_pdi": 0.5533854415019354, + "loss_ee": 0.7906762692663405, + "loss_delivery": 0.6466405805614259, + "loss_biodist": 0.35808900081449085, + "loss_toxic": 0.11749454794658555, + "loss_moe_lb": 2.203120893902249 + }, + { + "loss": 3.0441886451509266, + "loss_size": 0.6291949525475502, + "loss_pdi": 0.49782953328556484, + "loss_ee": 0.7922844456301795, + "loss_delivery": 0.6520475116040971, + "loss_biodist": 0.3308643756641282, + "loss_toxic": 0.12832459535760185, + "loss_moe_lb": 2.1759629448254905 + }, + { + "loss": 2.9754272037082248, + "loss_size": 0.6175032117300563, + "loss_pdi": 0.5148537639114592, + "loss_ee": 0.7790601783328586, + "loss_delivery": 0.6056651199857394, + "loss_biodist": 0.3228043292959531, + "loss_toxic": 0.12145837841348515, + "loss_moe_lb": 2.184993843237559 + } + ], + "val": [ + { + "loss": 7.5817413330078125, + "loss_size": 3.1788381338119507, + "loss_pdi": 0.6926138798395792, + "loss_ee": 1.1368996699651082, + "loss_delivery": 1.3018715878327687, + "loss_biodist": 0.865576426188151, + "loss_toxic": 0.39790048201878864, + "loss_moe_lb": 2.0351356267929077, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 7.4906948407491045, + "loss_size": 3.4258035024007163, + "loss_pdi": 0.6950839757919312, + "loss_ee": 1.1108913818995159, + "loss_delivery": 1.2819487750530243, + "loss_biodist": 0.6787202954292297, + "loss_toxic": 0.2987439235051473, + "loss_moe_lb": 2.2450613180796304, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 7.212138017018636, + "loss_size": 3.533347229162852, + "loss_pdi": 0.6690248449643453, + "loss_ee": 1.1138415535291035, + "loss_delivery": 1.2798995474974315, + "loss_biodist": 0.43565239508946735, + "loss_toxic": 0.18205431600411734, + "loss_moe_lb": 2.4744310776392617, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 7.067245562871297, + "loss_size": 3.44307749470075, + "loss_pdi": 0.6819738547007242, + "loss_ee": 1.258830984433492, + "loss_delivery": 1.3165223896503448, + "loss_biodist": 0.279761681954066, + "loss_toxic": 0.09508953988552094, + "loss_moe_lb": 2.532074213027954, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.913045485814412, + "loss_size": 3.4667697648207345, + "loss_pdi": 0.6393000483512878, + "loss_ee": 1.2493377725283306, + "loss_delivery": 1.2170384526252747, + "loss_biodist": 0.25632842381795246, + "loss_toxic": 0.09281493537127972, + "loss_moe_lb": 2.5529590447743735, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.741156101226807, + "loss_size": 3.38966636856397, + "loss_pdi": 0.6649347146352133, + "loss_ee": 1.21702641248703, + "loss_delivery": 1.1791668335596721, + "loss_biodist": 0.22674795985221863, + "loss_toxic": 0.0729368111739556, + "loss_moe_lb": 2.566074252128601, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 6.572594563166301, + "loss_size": 3.2844792306423187, + "loss_pdi": 0.6475045680999756, + "loss_ee": 1.2043298482894897, + "loss_delivery": 1.1604323585828145, + "loss_biodist": 0.2028043568134308, + "loss_toxic": 0.08131306804716587, + "loss_moe_lb": 2.6111838817596436, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.488411029179891, + "loss_size": 3.2253396113713584, + "loss_pdi": 0.6403132081031799, + "loss_ee": 1.1929806470870972, + "loss_delivery": 1.1599518060684204, + "loss_biodist": 0.19874917467435202, + "loss_toxic": 0.07889741783340772, + "loss_moe_lb": 2.638718048731486, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.531599998474121, + "loss_size": 3.264077514410019, + "loss_pdi": 0.6415132880210876, + "loss_ee": 1.200355350971222, + "loss_delivery": 1.1573790311813354, + "loss_biodist": 0.19695327679316202, + "loss_toxic": 0.0794597069422404, + "loss_moe_lb": 2.6399426460266113, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_2/splits.json b/models/abl_full/s1_moe/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s1_moe/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..682142c --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3749438730981019, + "rmse": 0.6123266065574008, + "mae": 0.48759276957605924, + "r2": 0.25949254974107383 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6684043536601668, + "rmse": 0.8175600000367966, + "mae": 0.5705895473016426, + "r2": 0.11023795482825682 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6258823529411764, + "recall": 0.656891495601173, + "f1": 0.625 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6145614035087719, + "recall": 0.6785714285714285, + "f1": 0.6310384332824726 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.2956162408392093, + "js_divergence": 0.07378991530775723 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_3/best_params.json b/models/abl_full/s1_moe/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..1985b23 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_3/best_params.json @@ -0,0 +1,15 @@ +{ + "dropout": 0.23728303298638598, + "lr": 0.0004047759209191932, + "weight_decay": 5.182159439874143e-05, + "backbone_lr_ratio": 0.1085910800603635, + "moe_n_experts": 2, + "moe_top_k": 2, + "moe_expert_hidden_mult": 2, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s1_moe/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..735a6b9 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 11} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_3/history.json b/models/abl_full/s1_moe/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..859267c --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_3/history.json @@ -0,0 +1,259 @@ +{ + "train": [ + { + "loss": 5.127758344014485, + "loss_size": 0.5317431431677606, + "loss_pdi": 0.6828516887293922, + "loss_ee": 1.0904388891326056, + "loss_delivery": 0.9313797189129723, + "loss_biodist": 1.2059319151772394, + "loss_toxic": 0.6715050703949399, + "loss_moe_lb": 1.9999999933772616 + }, + { + "loss": 4.602431270811293, + "loss_size": 0.5142937815851636, + "loss_pdi": 0.6664902170499166, + "loss_ee": 1.0334946513175964, + "loss_delivery": 0.8020512486497561, + "loss_biodist": 1.0123236907853022, + "loss_toxic": 0.5680234001742469, + "loss_moe_lb": 2.0000000132454767 + }, + { + "loss": 4.078031632635328, + "loss_size": 0.47463781634966534, + "loss_pdi": 0.649232417345047, + "loss_ee": 0.9953246514002482, + "loss_delivery": 0.81047663009829, + "loss_biodist": 0.7461670736471812, + "loss_toxic": 0.39656611449188656, + "loss_moe_lb": 1.9999999867545233 + }, + { + "loss": 3.5109943681293063, + "loss_size": 0.479110782345136, + "loss_pdi": 0.6026475330193838, + "loss_ee": 0.9242365625169542, + "loss_delivery": 0.7362593246830834, + "loss_biodist": 0.5296401480833689, + "loss_toxic": 0.22815139157076678, + "loss_moe_lb": 1.9999999933772616 + }, + { + "loss": 3.343017670843336, + "loss_size": 0.46071358107858235, + "loss_pdi": 0.5793437659740448, + "loss_ee": 0.8920292092694176, + "loss_delivery": 0.8262126131190194, + "loss_biodist": 0.43794749346044326, + "loss_toxic": 0.1360515404699577, + "loss_moe_lb": 2.0 + }, + { + "loss": 3.026965022087097, + "loss_size": 0.42375803656048244, + "loss_pdi": 0.5415837433603075, + "loss_ee": 0.8263288338979086, + "loss_delivery": 0.7636278453800414, + "loss_biodist": 0.35434859577152467, + "loss_toxic": 0.1049172519447489, + "loss_moe_lb": 2.0 + }, + { + "loss": 2.8901521364847818, + "loss_size": 0.3163049328658316, + "loss_pdi": 0.5280978050496843, + "loss_ee": 0.810647404856152, + "loss_delivery": 0.746164958510134, + "loss_biodist": 0.37338414291540784, + "loss_toxic": 0.10508367771075831, + "loss_moe_lb": 1.9999999933772616 + }, + { + "loss": 2.8957933452394276, + "loss_size": 0.4211667751272519, + "loss_pdi": 0.5472230712572733, + "loss_ee": 0.8018278115325503, + "loss_delivery": 0.6973614502284262, + "loss_biodist": 0.3288259282708168, + "loss_toxic": 0.08928171276218361, + "loss_moe_lb": 1.9999999933772616 + }, + { + "loss": 2.837104777495066, + "loss_size": 0.4183872217933337, + "loss_pdi": 0.5263894332779778, + "loss_ee": 0.7640278041362762, + "loss_delivery": 0.7032964477936426, + "loss_biodist": 0.32911175820562577, + "loss_toxic": 0.08554084073855645, + "loss_moe_lb": 1.9999999867545233 + }, + { + "loss": 2.800038311216566, + "loss_size": 0.42303241913517314, + "loss_pdi": 0.5211557033989165, + "loss_ee": 0.7625958522160848, + "loss_delivery": 0.6322993441588349, + "loss_biodist": 0.33054526646931964, + "loss_toxic": 0.11935251764953136, + "loss_moe_lb": 1.9999999933772616 + }, + { + "loss": 2.788801908493042, + "loss_size": 0.4059717005325688, + "loss_pdi": 0.5300321512752109, + "loss_ee": 0.7461288604471419, + "loss_delivery": 0.7049698647525575, + "loss_biodist": 0.31942369292179745, + "loss_toxic": 0.07234497479577032, + "loss_moe_lb": 1.9999999933772616 + } + ], + "val": [ + { + "loss": 6.006536801656087, + "loss_size": 2.2935863633950553, + "loss_pdi": 0.6431688268979391, + "loss_ee": 1.0862830479939778, + "loss_delivery": 0.8104884624481201, + "loss_biodist": 0.74021049340566, + "loss_toxic": 0.42379554112752277, + "loss_moe_lb": 2.0, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 5.6329532861709595, + "loss_size": 2.2966252664724984, + "loss_pdi": 0.6447450121243795, + "loss_ee": 0.9516361753145853, + "loss_delivery": 0.8065041055281957, + "loss_biodist": 0.5729242364565531, + "loss_toxic": 0.3542320132255554, + "loss_moe_lb": 1.9999999205271404, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 5.0835821231206255, + "loss_size": 2.3147797683874765, + "loss_pdi": 0.6285536487897238, + "loss_ee": 0.7710192104180654, + "loss_delivery": 0.7979273547728857, + "loss_biodist": 0.3145611484845479, + "loss_toxic": 0.2451568841934204, + "loss_moe_lb": 1.99999996026357, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.7575757575757576, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.738714615503947, + "loss_size": 2.2357666293780007, + "loss_pdi": 0.6120936075846354, + "loss_ee": 0.6856028735637665, + "loss_delivery": 0.7588026523590088, + "loss_biodist": 0.22981964548428854, + "loss_toxic": 0.2017179528872172, + "loss_moe_lb": 2.0, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.7575757575757576, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.684245228767395, + "loss_size": 2.1860211143891015, + "loss_pdi": 0.6339927117029825, + "loss_ee": 0.6616606911023458, + "loss_delivery": 0.729652871688207, + "loss_biodist": 0.22760912775993347, + "loss_toxic": 0.23162126541137695, + "loss_moe_lb": 2.0, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.698350191116333, + "loss_size": 2.232885996500651, + "loss_pdi": 0.6161652406056722, + "loss_ee": 0.6593855420748392, + "loss_delivery": 0.7324013610680898, + "loss_biodist": 0.21520352363586426, + "loss_toxic": 0.22785553336143494, + "loss_moe_lb": 2.0, + "acc_pdi": 0.8484848484848485, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.603027701377869, + "loss_size": 2.205575888355573, + "loss_pdi": 0.5669490098953247, + "loss_ee": 0.6566285292307535, + "loss_delivery": 0.7320161064465841, + "loss_biodist": 0.2117675244808197, + "loss_toxic": 0.21396749218304953, + "loss_moe_lb": 1.9999999205271404, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.559842546780904, + "loss_size": 2.171008358399073, + "loss_pdi": 0.5670222043991089, + "loss_ee": 0.6694140235582987, + "loss_delivery": 0.7330588400363922, + "loss_biodist": 0.20921956499417624, + "loss_toxic": 0.19406954944133759, + "loss_moe_lb": 2.0, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.534178574879964, + "loss_size": 2.16755818327268, + "loss_pdi": 0.56192014614741, + "loss_ee": 0.6620984176794688, + "loss_delivery": 0.7264163891474406, + "loss_biodist": 0.20768780509630838, + "loss_toxic": 0.19195503493150076, + "loss_moe_lb": 2.0, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.5383594036102295, + "loss_size": 2.1663325875997543, + "loss_pdi": 0.5683305064837137, + "loss_ee": 0.6596998969713846, + "loss_delivery": 0.7200700143973032, + "loss_biodist": 0.20910771687825522, + "loss_toxic": 0.19815350075562796, + "loss_moe_lb": 1.99999996026357, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.515447735786438, + "loss_size": 2.159880797068278, + "loss_pdi": 0.5626735885938009, + "loss_ee": 0.654536654551824, + "loss_delivery": 0.7196607887744904, + "loss_biodist": 0.20363027850786844, + "loss_toxic": 0.19809793929258981, + "loss_moe_lb": 1.99999996026357, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_3/splits.json b/models/abl_full/s1_moe/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s1_moe/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..3cd080d --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.7200170297409134, + "rmse": 1.3114941973721856, + "mae": 0.5979206100083798, + "r2": 0.027145258172342035 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6361517865107628, + "rmse": 0.7975912402419943, + "mae": 0.5384212874854772, + "r2": 0.3815848817414794 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6445623342175066, + "recall": 0.6598240469208211, + "f1": 0.6499999999999999 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6133770622142715, + "recall": 0.636827551533434, + "f1": 0.6194000264305538 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.32962043188143414, + "js_divergence": 0.08646305462156954 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_4/best_params.json b/models/abl_full/s1_moe/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..5886644 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_4/best_params.json @@ -0,0 +1,15 @@ +{ + "dropout": 0.39916677910658704, + "lr": 0.0007466808018045293, + "weight_decay": 0.09860703586546646, + "backbone_lr_ratio": 0.2106309266636621, + "moe_n_experts": 2, + "moe_top_k": 1, + "moe_expert_hidden_mult": 1, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s1_moe/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..0af0e3e --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 16} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_4/history.json b/models/abl_full/s1_moe/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..f654d2c --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_4/history.json @@ -0,0 +1,374 @@ +{ + "train": [ + { + "loss": 5.370180077022976, + "loss_size": 0.7335335753030248, + "loss_pdi": 0.6857060790061951, + "loss_ee": 1.084329711066352, + "loss_delivery": 1.058345001604822, + "loss_biodist": 1.1664129694302876, + "loss_toxic": 0.6432420644495223, + "loss_moe_lb": 1.0107467737462785 + }, + { + "loss": 4.976090881559584, + "loss_size": 1.1215656391448445, + "loss_pdi": 0.6622668769624498, + "loss_ee": 1.027763992547989, + "loss_delivery": 0.8310183361172676, + "loss_biodist": 0.8221749315659205, + "loss_toxic": 0.5257103592157364, + "loss_moe_lb": 1.0077829360961914 + }, + { + "loss": 4.474117729398939, + "loss_size": 1.1120458468794823, + "loss_pdi": 0.6212347646554311, + "loss_ee": 0.95733024014367, + "loss_delivery": 0.9139602440926764, + "loss_biodist": 0.4960099375910229, + "loss_toxic": 0.390404284828239, + "loss_moe_lb": 1.0097712410820856 + }, + { + "loss": 4.15984292825063, + "loss_size": 1.1125718988478184, + "loss_pdi": 0.6039893627166748, + "loss_ee": 0.9246988693873087, + "loss_delivery": 0.8949605110618803, + "loss_biodist": 0.3649590176840623, + "loss_toxic": 0.2766731017165714, + "loss_moe_lb": 1.0069448682996962 + }, + { + "loss": 3.7494363122516208, + "loss_size": 1.0534636022316084, + "loss_pdi": 0.5745837142070135, + "loss_ee": 0.8650706112384796, + "loss_delivery": 0.7367174641953574, + "loss_biodist": 0.26577669630448025, + "loss_toxic": 0.2668634272283978, + "loss_moe_lb": 1.00017535355356 + }, + { + "loss": 3.22491678264406, + "loss_size": 0.7157575339078903, + "loss_pdi": 0.5348389430178536, + "loss_ee": 0.8545590374204848, + "loss_delivery": 0.7150505123039087, + "loss_biodist": 0.2789692882862356, + "loss_toxic": 0.1380350045963294, + "loss_moe_lb": 1.0054365462727017 + }, + { + "loss": 3.334063516722785, + "loss_size": 0.9412165093753073, + "loss_pdi": 0.5090583314498266, + "loss_ee": 0.8112458950943418, + "loss_delivery": 0.7340548419290118, + "loss_biodist": 0.24785559458865059, + "loss_toxic": 0.1088598400561346, + "loss_moe_lb": 1.0060835414462619 + }, + { + "loss": 3.2228306068314447, + "loss_size": 0.9695269755191274, + "loss_pdi": 0.5392858816517724, + "loss_ee": 0.8019572231504652, + "loss_delivery": 0.6140484660863876, + "loss_biodist": 0.20749213505122396, + "loss_toxic": 0.11078227673553759, + "loss_moe_lb": 1.0041655368275113 + }, + { + "loss": 2.9068311717775135, + "loss_size": 0.615757962067922, + "loss_pdi": 0.503271758556366, + "loss_ee": 0.8134915994273292, + "loss_delivery": 0.6856088737646738, + "loss_biodist": 0.18644733395841387, + "loss_toxic": 0.12186693219054076, + "loss_moe_lb": 1.003792444864909 + }, + { + "loss": 3.0570134189393787, + "loss_size": 0.8772890588475598, + "loss_pdi": 0.5334151171975665, + "loss_ee": 0.727337509393692, + "loss_delivery": 0.694632271097766, + "loss_biodist": 0.17146801989939478, + "loss_toxic": 0.07809772407118645, + "loss_moe_lb": 1.006226165427102 + }, + { + "loss": 2.8468888070848255, + "loss_size": 0.5668856898943583, + "loss_pdi": 0.5110641022523245, + "loss_ee": 0.7382781604925791, + "loss_delivery": 0.6443986553284857, + "loss_biodist": 0.18348030952943695, + "loss_toxic": 0.21868925782230994, + "loss_moe_lb": 0.9986008538140191 + }, + { + "loss": 2.9146187040540905, + "loss_size": 0.853325722946061, + "loss_pdi": 0.5099246137672, + "loss_ee": 0.7517063518365225, + "loss_delivery": 0.5205533984634612, + "loss_biodist": 0.19246525234646267, + "loss_toxic": 0.11051234734865527, + "loss_moe_lb": 1.0020087394449446 + }, + { + "loss": 2.8305728567971125, + "loss_size": 0.7951673575573497, + "loss_pdi": 0.5007007966438929, + "loss_ee": 0.7022620472643111, + "loss_delivery": 0.5824841633439064, + "loss_biodist": 0.16784465685486794, + "loss_toxic": 0.10510981170874503, + "loss_moe_lb": 1.010875450240241 + }, + { + "loss": 2.758067362838321, + "loss_size": 0.7836443309982618, + "loss_pdi": 0.47089604867829216, + "loss_ee": 0.7425392270088196, + "loss_delivery": 0.5757762566208839, + "loss_biodist": 0.1472401556869348, + "loss_toxic": 0.06463335867091599, + "loss_moe_lb": 0.9983857638306088 + }, + { + "loss": 2.827748073471917, + "loss_size": 0.775267943739891, + "loss_pdi": 0.48181040088335675, + "loss_ee": 0.706618638502227, + "loss_delivery": 0.6326589327719476, + "loss_biodist": 0.1741050895717409, + "loss_toxic": 0.08360674509054257, + "loss_moe_lb": 1.0030125280221303 + }, + { + "loss": 2.780821740627289, + "loss_size": 0.7523454444275962, + "loss_pdi": 0.49020423491795856, + "loss_ee": 0.6979740493827395, + "loss_delivery": 0.6186593241161771, + "loss_biodist": 0.16769282312856781, + "loss_toxic": 0.0797048346268841, + "loss_moe_lb": 1.0025581121444702 + } + ], + "val": [ + { + "loss": 4.89719835917155, + "loss_size": 0.7517575323581696, + "loss_pdi": 0.6895849307378134, + "loss_ee": 1.0599854389826457, + "loss_delivery": 0.7263513139138619, + "loss_biodist": 1.0957160393397014, + "loss_toxic": 0.5845402777194977, + "loss_moe_lb": 1.0321053663889568, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 4.237052838007609, + "loss_size": 0.6770852406819662, + "loss_pdi": 0.6303416093190511, + "loss_ee": 0.9565378030141195, + "loss_delivery": 0.7094452906943237, + "loss_biodist": 0.76210156083107, + "loss_toxic": 0.516567051410675, + "loss_moe_lb": 1.002335508664449, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.644972880681356, + "loss_size": 0.62710240483284, + "loss_pdi": 0.5431598623593649, + "loss_ee": 0.7998758554458618, + "loss_delivery": 0.692650395600746, + "loss_biodist": 0.5301662484804789, + "loss_toxic": 0.45821228126684826, + "loss_moe_lb": 1.0084048509597778, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.33620285987854, + "loss_size": 0.5046960810820261, + "loss_pdi": 0.40063655376434326, + "loss_ee": 0.7776776154836019, + "loss_delivery": 0.7886983056863149, + "loss_biodist": 0.2222845604022344, + "loss_toxic": 0.63939601679643, + "loss_moe_lb": 1.0125696460405986, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.597087860107422, + "loss_size": 0.42182883620262146, + "loss_pdi": 0.37358567118644714, + "loss_ee": 0.6498892158269882, + "loss_delivery": 0.9575796127319336, + "loss_biodist": 0.1108296165863673, + "loss_toxic": 1.0745632033795118, + "loss_moe_lb": 1.0029666026433308, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.080364465713501, + "loss_size": 0.5215915938218435, + "loss_pdi": 0.4031681716442108, + "loss_ee": 0.6166775797804197, + "loss_delivery": 0.7825562631090482, + "loss_biodist": 0.12031976878643036, + "loss_toxic": 0.6250058043127259, + "loss_moe_lb": 1.0110193888346355, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.558725913365682, + "loss_size": 0.38834185898303986, + "loss_pdi": 0.3445838751892249, + "loss_ee": 0.6230619363486767, + "loss_delivery": 0.951496402422587, + "loss_biodist": 0.19400752584139505, + "loss_toxic": 1.0399395069107413, + "loss_moe_lb": 1.0070269703865051, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.799471616744995, + "loss_size": 0.3937222957611084, + "loss_pdi": 0.400449534257253, + "loss_ee": 0.6530242810646693, + "loss_delivery": 0.8449411913752556, + "loss_biodist": 0.0970522587498029, + "loss_toxic": 0.40754229109734297, + "loss_moe_lb": 1.0059263706207275, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.795964320500692, + "loss_size": 0.3378664453824361, + "loss_pdi": 0.37202223390340805, + "loss_ee": 0.6496160912017027, + "loss_delivery": 0.8995547679563364, + "loss_biodist": 0.0841260738670826, + "loss_toxic": 0.4497938888768355, + "loss_moe_lb": 1.002781351407369, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.803689122200012, + "loss_size": 0.36405958731969196, + "loss_pdi": 0.3620363374551137, + "loss_ee": 0.6666896057625612, + "loss_delivery": 0.9102859515696764, + "loss_biodist": 0.09353683888912201, + "loss_toxic": 0.4086068992813428, + "loss_moe_lb": 1.000518004099528, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.858702222506205, + "loss_size": 0.4129864772160848, + "loss_pdi": 0.36403952290614444, + "loss_ee": 0.6736993951102098, + "loss_delivery": 0.8679182998215159, + "loss_biodist": 0.10255300626158714, + "loss_toxic": 0.43899480253458023, + "loss_moe_lb": 1.0007884502410889, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.8738968769709268, + "loss_size": 0.3668399453163147, + "loss_pdi": 0.36341766516367596, + "loss_ee": 0.6933764349669218, + "loss_delivery": 0.9063712817927202, + "loss_biodist": 0.10361706838011742, + "loss_toxic": 0.4439223874360323, + "loss_moe_lb": 0.9967389305432638, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8596553405125937, + "loss_size": 0.3745522697766622, + "loss_pdi": 0.35297196358442307, + "loss_ee": 0.7147330269217491, + "loss_delivery": 0.9192755470673243, + "loss_biodist": 0.09469319445391496, + "loss_toxic": 0.4105059339975317, + "loss_moe_lb": 0.9974037210146586, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.8609304428100586, + "loss_size": 0.3539365430672963, + "loss_pdi": 0.35666384051243466, + "loss_ee": 0.7218584759781758, + "loss_delivery": 0.9243930329879125, + "loss_biodist": 0.09905274336536725, + "loss_toxic": 0.41280720848590136, + "loss_moe_lb": 0.9982096751530966, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.855956554412842, + "loss_size": 0.3380372126897176, + "loss_pdi": 0.3641972740491231, + "loss_ee": 0.719212107360363, + "loss_delivery": 0.9321081439654032, + "loss_biodist": 0.09705411518613498, + "loss_toxic": 0.41338884892563027, + "loss_moe_lb": 1.0002817312876384, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8692851066589355, + "loss_size": 0.3338817358016968, + "loss_pdi": 0.34216607610384625, + "loss_ee": 0.7237211794902881, + "loss_delivery": 0.9497951865196228, + "loss_biodist": 0.09404220059514046, + "loss_toxic": 0.4326428209121029, + "loss_moe_lb": 0.9982145229975382, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_4/splits.json b/models/abl_full/s1_moe/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s1_moe/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..06709a4 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.6581787049205378, + "rmse": 0.8112821364485586, + "mae": 0.4666319036623463, + "r2": 0.11927513654933608 + }, + "delivery": { + "n_samples": 58, + "mse": 0.9902765079500601, + "rmse": 0.9951263778787396, + "mae": 0.668674697425088, + "r2": 0.04241896439784332 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6673469387755102, + "recall": 0.7104105571847508, + "f1": 0.6680891417733522 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6686507936507936, + "recall": 0.7316239316239317, + "f1": 0.6889123827144178 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.21681091408025321, + "js_divergence": 0.05498423634351381 + } +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/pip_freeze.txt b/models/abl_full/s1_moe/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s1_moe/seed42/repro.txt b/models/abl_full/s1_moe/seed42/repro.txt new file mode 100644 index 0000000..4f8bb40 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T11:35:16+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=1 --batch-size 16 --use-mpnn --use-moe diff --git a/models/abl_full/s1_moe/seed42/strata_info.json b/models/abl_full/s1_moe/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s1_moe/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s1_moe/seed42/summary.json b/models/abl_full/s1_moe/seed42/summary.json new file mode 100644 index 0000000..9748c6d --- /dev/null +++ b/models/abl_full/s1_moe/seed42/summary.json @@ -0,0 +1,367 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.15695989820116132, + "lr": 0.0009190576652999535, + "weight_decay": 0.00019160484854324728, + "backbone_lr_ratio": 0.010858228937443976, + "moe_n_experts": 4, + "moe_top_k": 1, + "moe_expert_hidden_mult": 2, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 14, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.4253441447999764, + "rmse": 1.1938777763238482, + "mae": 0.5525658846529852, + "r2": 0.12765429867580036 + }, + "delivery": { + "n_samples": 58, + "mse": 0.6405855117319039, + "rmse": 0.8003658611734411, + "mae": 0.6030296326197427, + "r2": 0.18577715914961368 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6652941176470588, + "recall": 0.7002851033499644, + "f1": 0.6680891417733522 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.7002314814814815, + "recall": 0.748095238095238, + "f1": 0.7037368316438083 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.19189511425409703, + "js_divergence": 0.04151174073426368 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.3288453348343448, + "lr": 0.0004056640613227662, + "weight_decay": 1.128493039126102e-05, + "backbone_lr_ratio": 0.19861551689911722, + "moe_n_experts": 2, + "moe_top_k": 1, + "moe_expert_hidden_mult": 2, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 13, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3740864382223049, + "rmse": 0.6116260607775841, + "mae": 0.4674327611878869, + "r2": -0.1423269861194456 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0425454348723864, + "rmse": 1.0210511421434219, + "mae": 0.6284202284133825, + "r2": 0.21086826178831475 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6071428571428571, + "precision": 0.5388888888888889, + "recall": 0.5476190476190476, + "f1": 0.5354449472096531 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5714285714285714, + "precision": 0.5211940836940837, + "recall": 0.5292564578278864, + "f1": 0.5106135244066278 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.3265798284655706, + "js_divergence": 0.08538375545430645 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.20354076718889158, + "lr": 0.0004268918448998353, + "weight_decay": 1.2308254246176102e-05, + "backbone_lr_ratio": 0.26381730533474246, + "moe_n_experts": 4, + "moe_top_k": 2, + "moe_expert_hidden_mult": 1, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 9, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3749438730981019, + "rmse": 0.6123266065574008, + "mae": 0.48759276957605924, + "r2": 0.25949254974107383 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6684043536601668, + "rmse": 0.8175600000367966, + "mae": 0.5705895473016426, + "r2": 0.11023795482825682 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6258823529411764, + "recall": 0.656891495601173, + "f1": 0.625 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6145614035087719, + "recall": 0.6785714285714285, + "f1": 0.6310384332824726 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.2956162408392093, + "js_divergence": 0.07378991530775723 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.23728303298638598, + "lr": 0.0004047759209191932, + "weight_decay": 5.182159439874143e-05, + "backbone_lr_ratio": 0.1085910800603635, + "moe_n_experts": 2, + "moe_top_k": 2, + "moe_expert_hidden_mult": 2, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 11, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.7200170297409134, + "rmse": 1.3114941973721856, + "mae": 0.5979206100083798, + "r2": 0.027145258172342035 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6361517865107628, + "rmse": 0.7975912402419943, + "mae": 0.5384212874854772, + "r2": 0.3815848817414794 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6445623342175066, + "recall": 0.6598240469208211, + "f1": 0.6499999999999999 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6133770622142715, + "recall": 0.636827551533434, + "f1": 0.6194000264305538 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.32962043188143414, + "js_divergence": 0.08646305462156954 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.39916677910658704, + "lr": 0.0007466808018045293, + "weight_decay": 0.09860703586546646, + "backbone_lr_ratio": 0.2106309266636621, + "moe_n_experts": 2, + "moe_top_k": 1, + "moe_expert_hidden_mult": 1, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 16, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.6581787049205378, + "rmse": 0.8112821364485586, + "mae": 0.4666319036623463, + "r2": 0.11927513654933608 + }, + "delivery": { + "n_samples": 58, + "mse": 0.9902765079500601, + "rmse": 0.9951263778787396, + "mae": 0.668674697425088, + "r2": 0.04241896439784332 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6673469387755102, + "recall": 0.7104105571847508, + "f1": 0.6680891417733522 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6686507936507936, + "recall": 0.7316239316239317, + "f1": 0.6889123827144178 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.21681091408025321, + "js_divergence": 0.05498423634351381 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.9105140381563668, + "mse_std": 0.5583203783065406, + "rmse_mean": 0.9081213554959154, + "rmse_std": 0.2929669637495464, + "mae_mean": 0.5144287858175314, + "mae_std": 0.05222769965594899, + "r2_mean": 0.07824805140382134, + "r2_std": 0.13284472877537107 + }, + "delivery": { + "mse_mean": 0.7955927189450559, + "mse_std": 0.18139070929494158, + "rmse_mean": 0.8863389242948788, + "rmse_std": 0.09998014915398587, + "mae_mean": 0.6018270786490667, + "mae_std": 0.04510725796194226, + "r2_mean": 0.1861774443811016, + "r2_std": 0.11421660992070844 + }, + "pdi": { + "accuracy_mean": 0.6785714285714285, + "accuracy_std": 0.03912303982179759, + "precision_mean": 0.6283949264940283, + "precision_std": 0.04723947170460931, + "recall_mean": 0.6550060501351513, + "recall_std": 0.057755672220942474, + "f1_mean": 0.6293246461512715, + "f1_std": 0.04952765477213993 + }, + "ee": { + "accuracy_mean": 0.6714285714285714, + "accuracy_std": 0.054606404481808174, + "precision_mean": 0.6236029649098804, + "precision_std": 0.0609510201663861, + "recall_mean": 0.6648749215303836, + "recall_std": 0.07841896250718941, + "f1_mean": 0.630740239695576, + "f1_std": 0.06822260291411461 + }, + "toxic": { + "accuracy_mean": 0.9500396342534485, + "accuracy_std": 0.014290090778642328, + "precision_mean": 0.7457142857142858, + "precision_std": 0.03149343955006944, + "recall_mean": 0.9737706334802525, + "recall_std": 0.007575117962473199, + "f1_mean": 0.8148343102325404, + "f1_std": 0.0312513648447909 + }, + "biodist": { + "kl_divergence_mean": 0.27210450590411284, + "kl_divergence_std": 0.05713032818829422, + "js_divergence_mean": 0.06842654049228214, + "js_divergence_std": 0.017588239010530773 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/local_uncommitted.patch b/models/abl_full/s2_chemeleon/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_0/best_params.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..0400d7c --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.12602063719411183, + "lr": 0.000790261954970823, + "weight_decay": 0.07286653737491042, + "backbone_lr_ratio": 0.4138040112561014, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..17fb17e --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 10} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_0/history.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..4f8701e --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/history.json @@ -0,0 +1,216 @@ +{ + "train": [ + { + "loss": 5.285260134273106, + "loss_size": 0.8482893250054784, + "loss_pdi": 0.6870611641142104, + "loss_ee": 1.0359109143416088, + "loss_delivery": 1.0278510799010594, + "loss_biodist": 1.1177521016862657, + "loss_toxic": 0.579169288277626 + }, + { + "loss": 4.148798823356628, + "loss_size": 0.7426410723063681, + "loss_pdi": 0.6200439665052626, + "loss_ee": 0.9336232542991638, + "loss_delivery": 0.8263353763355149, + "loss_biodist": 0.6568089839484956, + "loss_toxic": 0.386286488837666 + }, + { + "loss": 3.6658001475863986, + "loss_size": 0.6794443743096458, + "loss_pdi": 0.5800942778587341, + "loss_ee": 0.8668871025244395, + "loss_delivery": 0.8636035397648811, + "loss_biodist": 0.41815533654557335, + "loss_toxic": 0.2757335470782386 + }, + { + "loss": 3.5344538423750134, + "loss_size": 0.7051591931117905, + "loss_pdi": 0.601922470662329, + "loss_ee": 0.8743431336349912, + "loss_delivery": 0.978050123486254, + "loss_biodist": 0.2605068079299397, + "loss_toxic": 0.1422263394213385 + }, + { + "loss": 3.1207798653178744, + "loss_size": 0.6103712353441451, + "loss_pdi": 0.5231392549143897, + "loss_ee": 0.8097399142053392, + "loss_delivery": 0.7929377208153406, + "loss_biodist": 0.22288972925808695, + "loss_toxic": 0.18296814611595538 + }, + { + "loss": 2.784302976396349, + "loss_size": 0.4818241202996837, + "loss_pdi": 0.4613555471102397, + "loss_ee": 0.7806387444337209, + "loss_delivery": 0.769555171744691, + "loss_biodist": 0.2374800563686424, + "loss_toxic": 0.07607505915479527 + }, + { + "loss": 2.6056828101476035, + "loss_size": 0.4244048107001517, + "loss_pdi": 0.4580276302165455, + "loss_ee": 0.7102734363741345, + "loss_delivery": 0.7408288216425313, + "loss_biodist": 0.16795415389868948, + "loss_toxic": 0.1232572913221601 + }, + { + "loss": 2.6307731601927014, + "loss_size": 0.421642880472872, + "loss_pdi": 0.4307679484287898, + "loss_ee": 0.7307489911715189, + "loss_delivery": 0.7876450129681163, + "loss_biodist": 0.14815937769081858, + "loss_toxic": 0.13371344547097883 + }, + { + "loss": 2.3338383899794684, + "loss_size": 0.35258390940725803, + "loss_pdi": 0.4384547687239117, + "loss_ee": 0.6911282688379288, + "loss_delivery": 0.6517496713333659, + "loss_biodist": 0.16141249901718563, + "loss_toxic": 0.059799047368061214 + }, + { + "loss": 2.4565338691075644, + "loss_size": 0.3968080004884137, + "loss_pdi": 0.43323442836602527, + "loss_ee": 0.682369644443194, + "loss_delivery": 0.7385766233007113, + "loss_biodist": 0.15648211621575886, + "loss_toxic": 0.07206950559177333 + } + ], + "val": [ + { + "loss": 4.354730447133382, + "loss_size": 0.43964676186442375, + "loss_pdi": 0.7755804260571798, + "loss_ee": 1.088438868522644, + "loss_delivery": 0.6213841922581196, + "loss_biodist": 0.8962039152781168, + "loss_toxic": 0.5518759687741598, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.36363636363636365, + "acc_toxic": 0.85 + }, + { + "loss": 4.060064395268758, + "loss_size": 0.3819542496154706, + "loss_pdi": 0.8415463368097941, + "loss_ee": 0.9214409391085306, + "loss_delivery": 0.5923714314897855, + "loss_biodist": 0.6646292408307394, + "loss_toxic": 0.6826483607292175, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 3.8892270723978677, + "loss_size": 0.38361061240235966, + "loss_pdi": 0.9251933495203654, + "loss_ee": 0.8008482853571574, + "loss_delivery": 0.5885031595826149, + "loss_biodist": 0.4812648097674052, + "loss_toxic": 0.7324025531609853, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 2.819441000620524, + "loss_size": 0.3312147652056107, + "loss_pdi": 1.0185934901237488, + "loss_ee": 0.7291810810565948, + "loss_delivery": 0.4949628822505474, + "loss_biodist": 0.2295511762301127, + "loss_toxic": 0.04531838372349739, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.5454545454545454, + "acc_toxic": 1.0 + }, + { + "loss": 3.645890394846598, + "loss_size": 0.301729327145343, + "loss_pdi": 0.9779017170270284, + "loss_ee": 0.8494539062182108, + "loss_delivery": 0.462815015266339, + "loss_biodist": 0.24748512109120688, + "loss_toxic": 0.8237533407906691, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.451145569483439, + "loss_size": 0.35736555854479474, + "loss_pdi": 1.1634698907534282, + "loss_ee": 0.769123762845993, + "loss_delivery": 0.49930944045384723, + "loss_biodist": 0.20060725013415018, + "loss_toxic": 0.49072895338758826, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.9 + }, + { + "loss": 2.7208495140075684, + "loss_size": 0.3272746553023656, + "loss_pdi": 1.0954238375027974, + "loss_ee": 0.6886191343267759, + "loss_delivery": 0.4005286218598485, + "loss_biodist": 0.18590620905160904, + "loss_toxic": 0.05904679590215286, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5757575757575758, + "acc_toxic": 1.0 + }, + { + "loss": 2.9803009033203125, + "loss_size": 0.3094409952561061, + "loss_pdi": 1.1497473915417988, + "loss_ee": 0.6807826533913612, + "loss_delivery": 0.3760540721317132, + "loss_biodist": 0.21330542862415314, + "loss_toxic": 0.28109059560423094, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + }, + { + "loss": 2.994708697001139, + "loss_size": 0.30109413464864093, + "loss_pdi": 1.261770228544871, + "loss_ee": 0.6454051757852236, + "loss_delivery": 0.38937478388349217, + "loss_biodist": 0.19490859160820642, + "loss_toxic": 0.23649322427809238, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5757575757575758, + "acc_toxic": 1.0 + }, + { + "loss": 3.0321125189463296, + "loss_size": 0.2871939241886139, + "loss_pdi": 1.2501991391181946, + "loss_ee": 0.6334217314918836, + "loss_delivery": 0.4008590653538704, + "loss_biodist": 0.19895515218377113, + "loss_toxic": 0.29296076965207857, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_0/splits.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..bfe262f --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.471601827675053, + "rmse": 1.2130959680400613, + "mae": 0.5563393922814404, + "r2": 0.09934345812791712 + }, + "delivery": { + "n_samples": 58, + "mse": 0.4724631310304712, + "rmse": 0.6873595354910494, + "mae": 0.5330853352387404, + "r2": 0.39947085018417017 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7473474801061009, + "recall": 0.7658588738417677, + "f1": 0.7551020408163265 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.7094907407407408, + "recall": 0.7547619047619047, + "f1": 0.7114887696283044 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.20546182921528536, + "js_divergence": 0.04152978832786755 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_1/best_params.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..18afce7 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.17344542655609113, + "lr": 0.000990523292089834, + "weight_decay": 0.00023896945371132538, + "backbone_lr_ratio": 0.0659378253278463, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..89e65d1 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 7} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_1/history.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..2ac5e26 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/history.json @@ -0,0 +1,153 @@ +{ + "train": [ + { + "loss": 5.497215761078729, + "loss_size": 1.238559374378787, + "loss_pdi": 0.6637252469857534, + "loss_ee": 1.0361920098463695, + "loss_delivery": 0.8803057248393694, + "loss_biodist": 1.0704467197259266, + "loss_toxic": 0.6131781505213844 + }, + { + "loss": 4.473760075039333, + "loss_size": 1.1555080281363592, + "loss_pdi": 0.5955737431844076, + "loss_ee": 0.9222913914256625, + "loss_delivery": 0.8166717812418938, + "loss_biodist": 0.5957858992947472, + "loss_toxic": 0.4019521002968152 + }, + { + "loss": 4.006705827183193, + "loss_size": 1.1578057962987158, + "loss_pdi": 0.5652243842681249, + "loss_ee": 0.8699402113755544, + "loss_delivery": 0.7664255458447669, + "loss_biodist": 0.3909074283308453, + "loss_toxic": 0.2735716253519058 + }, + { + "loss": 3.601810932159424, + "loss_size": 1.058875867889987, + "loss_pdi": 0.5260536488559511, + "loss_ee": 0.8250250584549375, + "loss_delivery": 0.7263078283932474, + "loss_biodist": 0.3216216696633233, + "loss_toxic": 0.16525613640745482 + }, + { + "loss": 3.3515598376592, + "loss_size": 0.9714946945508321, + "loss_pdi": 0.49829015632470447, + "loss_ee": 0.782288544707828, + "loss_delivery": 0.7407084902127584, + "loss_biodist": 0.2508629514939255, + "loss_toxic": 0.12868467666622666 + }, + { + "loss": 3.2299620310465493, + "loss_size": 0.9977678515844874, + "loss_pdi": 0.48572327031029594, + "loss_ee": 0.777500159210629, + "loss_delivery": 0.6011371289690336, + "loss_biodist": 0.24256972678833538, + "loss_toxic": 0.14417941806217036 + }, + { + "loss": 3.2051464319229126, + "loss_size": 0.9190782999826802, + "loss_pdi": 0.5053003943628736, + "loss_ee": 0.7398778647184372, + "loss_delivery": 0.6987031921744347, + "loss_biodist": 0.23150324200590452, + "loss_toxic": 0.1303689063837131 + } + ], + "val": [ + { + "loss": 3.4675613244374595, + "loss_size": 0.5646696214874586, + "loss_pdi": 0.6616734464963278, + "loss_ee": 0.9954537947972616, + "loss_delivery": 0.1359008171906074, + "loss_biodist": 0.7073989808559418, + "loss_toxic": 0.41338131825129193, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 2.7525809605916343, + "loss_size": 0.4412962421774864, + "loss_pdi": 0.6003059049447378, + "loss_ee": 0.883667786916097, + "loss_delivery": 0.21270578106244406, + "loss_biodist": 0.42633700370788574, + "loss_toxic": 0.1940087080001831, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 2.489575664202372, + "loss_size": 0.373347744345665, + "loss_pdi": 0.6019365986188253, + "loss_ee": 0.7849987943967184, + "loss_delivery": 0.323614497979482, + "loss_biodist": 0.31322917838891345, + "loss_toxic": 0.10109217589100201, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3652910391489663, + "loss_size": 0.3358682890733083, + "loss_pdi": 0.5906234979629517, + "loss_ee": 0.6491186221440634, + "loss_delivery": 0.420820156733195, + "loss_biodist": 0.33888034522533417, + "loss_toxic": 0.039403670467436314, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.322991053263346, + "loss_size": 0.323621208469073, + "loss_pdi": 0.6271981596946716, + "loss_ee": 0.6583196918169657, + "loss_delivery": 0.3789736032485962, + "loss_biodist": 0.32272788882255554, + "loss_toxic": 0.024396857246756554, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2429742018381753, + "loss_size": 0.32002802193164825, + "loss_pdi": 0.6090183854103088, + "loss_ee": 0.6231593787670135, + "loss_delivery": 0.356596440076828, + "loss_biodist": 0.32116002837816876, + "loss_toxic": 0.023266260512173176, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2523215611775718, + "loss_size": 0.33253899216651917, + "loss_pdi": 0.5913881063461304, + "loss_ee": 0.6256971557935079, + "loss_delivery": 0.36305899918079376, + "loss_biodist": 0.3304684857527415, + "loss_toxic": 0.01965037826448679, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_1/splits.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..893988e --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.33747921495294175, + "rmse": 0.5809296127354344, + "mae": 0.4476258881789233, + "r2": -0.0305415409527785 + }, + "delivery": { + "n_samples": 61, + "mse": 1.056582407147074, + "rmse": 1.02790194432498, + "mae": 0.6651162357054284, + "r2": 0.20024328568671268 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.5803571428571429, + "recall": 0.5952380952380952, + "f1": 0.5822328931572629 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.48787878787878797, + "recall": 0.4884639170353456, + "f1": 0.47598675833969956 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.2756725230675138, + "js_divergence": 0.07337178357522252 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_2/best_params.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..0a62c1c --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.1604095508874329, + "lr": 0.0007982830900656446, + "weight_decay": 0.003723201974617767, + "backbone_lr_ratio": 0.17219709492855953, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..89e65d1 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 7} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_2/history.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..a006e93 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/history.json @@ -0,0 +1,153 @@ +{ + "train": [ + { + "loss": 5.293221155802409, + "loss_size": 0.8738495475716062, + "loss_pdi": 0.6709721088409424, + "loss_ee": 1.041092465321223, + "loss_delivery": 0.986368279490206, + "loss_biodist": 1.138993051317003, + "loss_toxic": 0.5943174560864767 + }, + { + "loss": 4.427705592579311, + "loss_size": 0.8138664729065366, + "loss_pdi": 0.6234788828425937, + "loss_ee": 0.9460418687926399, + "loss_delivery": 0.8766684002346463, + "loss_biodist": 0.7579970061779022, + "loss_toxic": 0.43050836357805466 + }, + { + "loss": 3.9286386834250555, + "loss_size": 0.7800179306003783, + "loss_pdi": 0.591834275258912, + "loss_ee": 0.8904408117135366, + "loss_delivery": 0.8427721874581443, + "loss_biodist": 0.4978388249874115, + "loss_toxic": 0.346620279053847 + }, + { + "loss": 3.5529117716683283, + "loss_size": 0.7533401416407691, + "loss_pdi": 0.55246069530646, + "loss_ee": 0.8064984811676873, + "loss_delivery": 0.7536759111616347, + "loss_biodist": 0.40354600962665343, + "loss_toxic": 0.30078188495503533 + }, + { + "loss": 3.0735544893476696, + "loss_size": 0.6324190083477232, + "loss_pdi": 0.5298841645320257, + "loss_ee": 0.7635318769348992, + "loss_delivery": 0.7103645296560394, + "loss_biodist": 0.27723173134856754, + "loss_toxic": 0.17250674818125036 + }, + { + "loss": 2.900318125883738, + "loss_size": 0.6194978058338165, + "loss_pdi": 0.490980530778567, + "loss_ee": 0.746425148513582, + "loss_delivery": 0.6356161079472966, + "loss_biodist": 0.25586767660246956, + "loss_toxic": 0.1611623706089126 + }, + { + "loss": 2.5009213354852466, + "loss_size": 0.32754091173410416, + "loss_pdi": 0.506138746937116, + "loss_ee": 0.7528270151880052, + "loss_delivery": 0.5496006939146254, + "loss_biodist": 0.24005841546588474, + "loss_toxic": 0.1312204148206446 + } + ], + "val": [ + { + "loss": 7.377736727396647, + "loss_size": 3.4549278219540915, + "loss_pdi": 0.6956153710683187, + "loss_ee": 1.050623893737793, + "loss_delivery": 1.2436020026604335, + "loss_biodist": 0.70782870054245, + "loss_toxic": 0.2624746759732564, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.45454545454545453, + "acc_toxic": 1.0 + }, + { + "loss": 7.056961218516032, + "loss_size": 3.5379001100858054, + "loss_pdi": 0.6841452717781067, + "loss_ee": 1.0350538889567058, + "loss_delivery": 1.3021840552488964, + "loss_biodist": 0.3892892201741536, + "loss_toxic": 0.1595792273680369, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 6.815336147944133, + "loss_size": 3.3996301889419556, + "loss_pdi": 0.6882216533025106, + "loss_ee": 1.0121318697929382, + "loss_delivery": 1.365590900182724, + "loss_biodist": 0.28842557470003766, + "loss_toxic": 0.12509913742542267, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.803635120391846, + "loss_size": 3.355134646097819, + "loss_pdi": 0.6965762376785278, + "loss_ee": 1.0357285340627034, + "loss_delivery": 1.4386078119277954, + "loss_biodist": 0.21627347668011984, + "loss_toxic": 0.13115248084068298, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 6.318798542022705, + "loss_size": 3.1733636458714805, + "loss_pdi": 0.647947351137797, + "loss_ee": 1.017485539118449, + "loss_delivery": 1.2863492369651794, + "loss_biodist": 0.15712002416451773, + "loss_toxic": 0.09978837023178737, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 6.561662356058757, + "loss_size": 3.3887079656124115, + "loss_pdi": 0.654294510682424, + "loss_ee": 1.011616011460622, + "loss_delivery": 1.3291132251421611, + "loss_biodist": 0.1565810590982437, + "loss_toxic": 0.0877065658569336, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.443899790445964, + "loss_size": 3.2868941525618234, + "loss_pdi": 0.6418727238972982, + "loss_ee": 1.006811221440633, + "loss_delivery": 1.331853409608205, + "loss_biodist": 0.15077072381973267, + "loss_toxic": 0.09063555300235748, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_2/splits.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..2fc8786 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3563573633813051, + "rmse": 0.5969567516841611, + "mae": 0.4678801386506252, + "r2": 0.29620057434719094 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6372581091688564, + "rmse": 0.7982844788475199, + "mae": 0.5258262845454738, + "r2": 0.15169900463478958 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.6612903225806452, + "recall": 0.6612903225806452, + "f1": 0.6612903225806452 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6301044634377968, + "recall": 0.6944444444444443, + "f1": 0.6462962962962963 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.2169966152183106, + "js_divergence": 0.056219459172710165 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_3/best_params.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..48538f8 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.19585998114210643, + "lr": 0.0008949481903172137, + "weight_decay": 0.0848478556523433, + "backbone_lr_ratio": 0.7944603821606866, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..54e2f4a --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 15} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_3/history.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..1a5b0a1 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/history.json @@ -0,0 +1,321 @@ +{ + "train": [ + { + "loss": 4.877047578493754, + "loss_size": 0.5160872787237167, + "loss_pdi": 0.6769441465536753, + "loss_ee": 1.054495073027081, + "loss_delivery": 0.9331362810399797, + "loss_biodist": 1.1203168133894603, + "loss_toxic": 0.5870049430264367 + }, + { + "loss": 3.974336451954312, + "loss_size": 0.4827609087030093, + "loss_pdi": 0.6387679908010695, + "loss_ee": 0.9514428112241957, + "loss_delivery": 0.865541306634744, + "loss_biodist": 0.6691573411226273, + "loss_toxic": 0.3850750219490793 + }, + { + "loss": 3.4385289351145425, + "loss_size": 0.4558026235964563, + "loss_pdi": 0.611519326766332, + "loss_ee": 0.8998696737819247, + "loss_delivery": 0.7746825288567278, + "loss_biodist": 0.443904020720058, + "loss_toxic": 0.27405493209759396 + }, + { + "loss": 3.638728764322069, + "loss_size": 0.5039074967304865, + "loss_pdi": 0.658436182472441, + "loss_ee": 0.9860923621389601, + "loss_delivery": 0.8393854962454902, + "loss_biodist": 0.359807513654232, + "loss_toxic": 0.32585104492803413 + }, + { + "loss": 3.0948339104652405, + "loss_size": 0.3847643584012985, + "loss_pdi": 0.5921697600020303, + "loss_ee": 0.8589457538392808, + "loss_delivery": 0.8626010177863969, + "loss_biodist": 0.3064725291397836, + "loss_toxic": 0.12608042059259283 + }, + { + "loss": 3.047362526257833, + "loss_size": 0.475696485903528, + "loss_pdi": 0.5295594599511888, + "loss_ee": 0.8240170925855637, + "loss_delivery": 0.7474887540770901, + "loss_biodist": 0.2500852280192905, + "loss_toxic": 0.24874706737076244 + }, + { + "loss": 2.698602875073751, + "loss_size": 0.39990924464331734, + "loss_pdi": 0.5182451357444128, + "loss_ee": 0.8392596079243554, + "loss_delivery": 0.6877126635776626, + "loss_biodist": 0.23384054584635627, + "loss_toxic": 0.061559199982891895 + }, + { + "loss": 2.5906746983528137, + "loss_size": 0.43534108623862267, + "loss_pdi": 0.5255114734172821, + "loss_ee": 0.7078029016653696, + "loss_delivery": 0.7214333001110289, + "loss_biodist": 0.16936907710300553, + "loss_toxic": 0.07163613054177 + }, + { + "loss": 2.378484752443102, + "loss_size": 0.34424962600072223, + "loss_pdi": 0.4685098131497701, + "loss_ee": 0.6976344353622861, + "loss_delivery": 0.7044676749242677, + "loss_biodist": 0.15822450775239202, + "loss_toxic": 0.05092207123784141 + }, + { + "loss": 2.230667379167345, + "loss_size": 0.28387810703780914, + "loss_pdi": 0.4529809471633699, + "loss_ee": 0.6813441432184644, + "loss_delivery": 0.6097359971867667, + "loss_biodist": 0.1405077978140778, + "loss_toxic": 0.10602367523178044 + }, + { + "loss": 2.1377934879726834, + "loss_size": 0.31546879187226295, + "loss_pdi": 0.4809791296720505, + "loss_ee": 0.6532502273718516, + "loss_delivery": 0.49466993204421467, + "loss_biodist": 0.15251990945802796, + "loss_toxic": 0.08514828470328616 + }, + { + "loss": 2.0065866576300726, + "loss_size": 0.27124866222341854, + "loss_pdi": 0.45105230311552685, + "loss_ee": 0.5816902038123872, + "loss_delivery": 0.5515489454070727, + "loss_biodist": 0.13602180199490654, + "loss_toxic": 0.06089971063192934 + }, + { + "loss": 2.0219208796819053, + "loss_size": 0.2708370820101764, + "loss_pdi": 0.45572879662116367, + "loss_ee": 0.6045874754587809, + "loss_delivery": 0.5562257944709725, + "loss_biodist": 0.1305832401331928, + "loss_toxic": 0.054253940535191864 + }, + { + "loss": 1.917932841512892, + "loss_size": 0.2729579230977429, + "loss_pdi": 0.40481269194020164, + "loss_ee": 0.5663824296659894, + "loss_delivery": 0.5413378009365665, + "loss_biodist": 0.12807152710027164, + "loss_toxic": 0.050803636317141354 + }, + { + "loss": 1.845623128943973, + "loss_size": 0.20389476294318834, + "loss_pdi": 0.4060694459411833, + "loss_ee": 0.5746412045425839, + "loss_delivery": 0.5193566564056609, + "loss_biodist": 0.12893499516778523, + "loss_toxic": 0.06072323180786851 + } + ], + "val": [ + { + "loss": 5.451762676239014, + "loss_size": 2.2513775527477264, + "loss_pdi": 0.6668930848439535, + "loss_ee": 0.9120040933291117, + "loss_delivery": 0.7144341766834259, + "loss_biodist": 0.5719954371452332, + "loss_toxic": 0.34413284063339233, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.893146435419719, + "loss_size": 2.2625857293605804, + "loss_pdi": 0.6632154583930969, + "loss_ee": 0.7542756001154581, + "loss_delivery": 0.674502452214559, + "loss_biodist": 0.28514232238133747, + "loss_toxic": 0.25372493267059326, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.566011468569438, + "loss_size": 2.1803265462319055, + "loss_pdi": 0.5951946377754211, + "loss_ee": 0.6897228062152863, + "loss_delivery": 0.66606372098128, + "loss_biodist": 0.1846990535656611, + "loss_toxic": 0.24451390902201334, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.76610807577769, + "loss_size": 2.1758130316932998, + "loss_pdi": 0.6043814818064371, + "loss_ee": 0.915194034576416, + "loss_delivery": 0.7086990972359976, + "loss_biodist": 0.15476309756437936, + "loss_toxic": 0.2165234386920929, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.526420911153157, + "loss_size": 2.248420218626658, + "loss_pdi": 0.5955942471822103, + "loss_ee": 0.6889543930689493, + "loss_delivery": 0.6457807719707489, + "loss_biodist": 0.0908353825410207, + "loss_toxic": 0.2496122419834137, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 4.301612138748169, + "loss_size": 2.088031599919001, + "loss_pdi": 0.5196075439453125, + "loss_ee": 0.7105923493703207, + "loss_delivery": 0.7234477897485098, + "loss_biodist": 0.14264862736066183, + "loss_toxic": 0.118401234348615, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.275029182434082, + "loss_size": 2.2658486614624658, + "loss_pdi": 0.4748808940251668, + "loss_ee": 0.7165942192077637, + "loss_delivery": 0.5567513555288315, + "loss_biodist": 0.1007009893655777, + "loss_toxic": 0.15001767873764038, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.152410924434662, + "loss_size": 2.1213103036085763, + "loss_pdi": 0.4485825300216675, + "loss_ee": 0.7211305697758993, + "loss_delivery": 0.6130298376083374, + "loss_biodist": 0.0979425460100174, + "loss_toxic": 0.14603536327679953, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.018795748551686, + "loss_size": 1.992437074581782, + "loss_pdi": 0.4341380794843038, + "loss_ee": 0.6616915861765543, + "loss_delivery": 0.6001796126365662, + "loss_biodist": 0.18502837419509888, + "loss_toxic": 0.13852361838022867, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.7075981895128884, + "loss_size": 1.6902028620243073, + "loss_pdi": 0.4858029286066691, + "loss_ee": 0.7888809045155843, + "loss_delivery": 0.56619260708491, + "loss_biodist": 0.10667811334133148, + "loss_toxic": 0.08264601230621338, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.753101348876953, + "loss_size": 1.8522021919488907, + "loss_pdi": 0.4587676028410594, + "loss_ee": 0.6862801810105642, + "loss_delivery": 0.5222934434811274, + "loss_biodist": 0.10495267311731975, + "loss_toxic": 0.1235429694255193, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 3.754199802875519, + "loss_size": 1.8855314006408055, + "loss_pdi": 0.4229443470637004, + "loss_ee": 0.7204631467660269, + "loss_delivery": 0.4727766513824463, + "loss_biodist": 0.10504775742689769, + "loss_toxic": 0.13874550660451254, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 3.675182024637858, + "loss_size": 1.782601684331894, + "loss_pdi": 0.4083559811115265, + "loss_ee": 0.7194095452626547, + "loss_delivery": 0.5416366855303446, + "loss_biodist": 0.10696236789226532, + "loss_toxic": 0.11340554058551788, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 3.558975080649058, + "loss_size": 1.7309049367904663, + "loss_pdi": 0.39421146114667255, + "loss_ee": 0.7334019541740417, + "loss_delivery": 0.5174508194128672, + "loss_biodist": 0.10624407728513081, + "loss_toxic": 0.07796404014031093, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.557615319887797, + "loss_size": 1.723906973997752, + "loss_pdi": 0.39810313781102497, + "loss_ee": 0.7387908299763998, + "loss_delivery": 0.5228954354921976, + "loss_biodist": 0.1072155237197876, + "loss_toxic": 0.06948821991682053, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.9130434782608695 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_3/splits.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..111b773 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.7538634470342749, + "rmse": 1.3243350962027227, + "mae": 0.5489391729976218, + "r2": 0.008001466577043592 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6291525449659798, + "rmse": 0.7931913671781734, + "mae": 0.49696772067286704, + "r2": 0.38838897610923717 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6746031746031746, + "recall": 0.6693548387096775, + "f1": 0.671813953488372 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5720588235294118, + "recall": 0.5813222724987431, + "f1": 0.5575374705809488 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.15879110087233053, + "js_divergence": 0.0399465436977698 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_4/best_params.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..0dd4931 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.26919128361241457, + "lr": 0.0008909017692547573, + "weight_decay": 9.871919386761893e-05, + "backbone_lr_ratio": 0.10881403588853521, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..0ac5b47 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 13} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_4/history.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..c1f4487 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/history.json @@ -0,0 +1,279 @@ +{ + "train": [ + { + "loss": 5.593286752700806, + "loss_size": 1.1522638814316855, + "loss_pdi": 0.6810931596491072, + "loss_ee": 1.0522979299227397, + "loss_delivery": 0.907092921435833, + "loss_biodist": 1.1547635429435306, + "loss_toxic": 0.6582773245043225 + }, + { + "loss": 4.400246342023213, + "loss_size": 0.816069638563527, + "loss_pdi": 0.636558774444792, + "loss_ee": 0.9466021557648977, + "loss_delivery": 0.8451711369885339, + "loss_biodist": 0.7034806344244215, + "loss_toxic": 0.47414599027898574 + }, + { + "loss": 4.06938021712833, + "loss_size": 1.1017240153418646, + "loss_pdi": 0.6016443504227532, + "loss_ee": 0.9191590613789029, + "loss_delivery": 0.6765606842107244, + "loss_biodist": 0.42495539204941857, + "loss_toxic": 0.3667068878809611 + }, + { + "loss": 3.6887812879350452, + "loss_size": 1.0596939126650493, + "loss_pdi": 0.5786203559901979, + "loss_ee": 0.8682356774806976, + "loss_delivery": 0.684086498286989, + "loss_biodist": 0.3165626948078473, + "loss_toxic": 0.2050813879403803 + }, + { + "loss": 3.270499441358778, + "loss_size": 0.9255747770269712, + "loss_pdi": 0.5264098147551218, + "loss_ee": 0.8104728990130954, + "loss_delivery": 0.662855209575759, + "loss_biodist": 0.2398720122873783, + "loss_toxic": 0.12522833918531737 + }, + { + "loss": 3.1126370893584356, + "loss_size": 0.8507173740201526, + "loss_pdi": 0.5150539560450448, + "loss_ee": 0.7518450187312232, + "loss_delivery": 0.6648872610595491, + "loss_biodist": 0.20566106215119362, + "loss_toxic": 0.1437727525933749 + }, + { + "loss": 3.007680700884925, + "loss_size": 0.8391999022828208, + "loss_pdi": 0.5328151997592714, + "loss_ee": 0.7328316188520856, + "loss_delivery": 0.5704672427641021, + "loss_biodist": 0.21365330616633096, + "loss_toxic": 0.13921538792136642 + }, + { + "loss": 2.6879217094845242, + "loss_size": 0.5717127356264327, + "loss_pdi": 0.5373727811707391, + "loss_ee": 0.7407811217837863, + "loss_delivery": 0.5647157298194038, + "loss_biodist": 0.1865466365383731, + "loss_toxic": 0.10796113146675958 + }, + { + "loss": 2.7228385342492, + "loss_size": 0.7556685184439024, + "loss_pdi": 0.4843711256980896, + "loss_ee": 0.6883988976478577, + "loss_delivery": 0.5686811556418737, + "loss_biodist": 0.1783730685710907, + "loss_toxic": 0.06944999269520243 + }, + { + "loss": 2.819238669342465, + "loss_size": 0.6772578615281317, + "loss_pdi": 0.5077211144897673, + "loss_ee": 0.7369547933340073, + "loss_delivery": 0.636433278520902, + "loss_biodist": 0.19615852336088815, + "loss_toxic": 0.09273201325494382 + }, + { + "loss": 2.728736069467333, + "loss_size": 0.7300130137138896, + "loss_pdi": 0.47152279317379, + "loss_ee": 0.7051345904668173, + "loss_delivery": 0.5630546220474772, + "loss_biodist": 0.1990521123839749, + "loss_toxic": 0.08493880642991927 + }, + { + "loss": 2.6530000832345753, + "loss_size": 0.6296322171886762, + "loss_pdi": 0.48101158605681527, + "loss_ee": 0.6979177726639642, + "loss_delivery": 0.5979261969526609, + "loss_biodist": 0.16486467379662725, + "loss_toxic": 0.10580135131668714 + }, + { + "loss": 2.5722858905792236, + "loss_size": 0.6603978921969732, + "loss_pdi": 0.4381684015194575, + "loss_ee": 0.6920326583915286, + "loss_delivery": 0.5448799911472533, + "loss_biodist": 0.19440163340833452, + "loss_toxic": 0.06565039258243309 + } + ], + "val": [ + { + "loss": 4.528995116551717, + "loss_size": 0.5928779741128286, + "loss_pdi": 0.668253481388092, + "loss_ee": 0.9588931401570638, + "loss_delivery": 0.7188142901042435, + "loss_biodist": 1.0328028003374736, + "loss_toxic": 0.5784413317839304, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.5960989793141684, + "loss_size": 0.42100543280442554, + "loss_pdi": 0.5341920256614685, + "loss_ee": 0.744291881720225, + "loss_delivery": 0.7163168489933014, + "loss_biodist": 0.5773676435152689, + "loss_toxic": 0.6174789518117905, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.3066213925679526, + "loss_size": 0.3377349277337392, + "loss_pdi": 0.4840940733750661, + "loss_ee": 0.6869609554608663, + "loss_delivery": 0.6950856000185013, + "loss_biodist": 0.3982633451620738, + "loss_toxic": 0.7122542709112167, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.355605204900106, + "loss_size": 0.350691556930542, + "loss_pdi": 0.4555836096405983, + "loss_ee": 0.6946760875483354, + "loss_delivery": 0.8058002615968386, + "loss_biodist": 0.15379980206489563, + "loss_toxic": 0.8970225974917412, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.2014876206715903, + "loss_size": 0.35499922434488934, + "loss_pdi": 0.43952317039171857, + "loss_ee": 0.6743865994115671, + "loss_delivery": 0.7687829248607159, + "loss_biodist": 0.11065779874722163, + "loss_toxic": 0.8499690145254135, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.7239990631739297, + "loss_size": 0.38330880800882977, + "loss_pdi": 0.4710337817668915, + "loss_ee": 0.6634041151652733, + "loss_delivery": 0.6771996222281208, + "loss_biodist": 0.10694380849599838, + "loss_toxic": 0.42431745616098243, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.294163386027018, + "loss_size": 0.33383633693059284, + "loss_pdi": 0.424884428580602, + "loss_ee": 0.682399474705259, + "loss_delivery": 0.774541012942791, + "loss_biodist": 0.08204513043165207, + "loss_toxic": 0.9861969463527203, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.0252016385396323, + "loss_size": 0.34247593581676483, + "loss_pdi": 0.4209580073753993, + "loss_ee": 0.6675520030160745, + "loss_delivery": 0.8396629517277082, + "loss_biodist": 0.07748851800958316, + "loss_toxic": 0.6753135534624258, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.914623975753784, + "loss_size": 0.3573928078015645, + "loss_pdi": 0.41213346024354297, + "loss_ee": 0.68049605935812, + "loss_delivery": 0.8413711835940679, + "loss_biodist": 0.07422126457095146, + "loss_toxic": 0.5521621070802212, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8671627839406333, + "loss_size": 0.33660104870796204, + "loss_pdi": 0.4156315053502719, + "loss_ee": 0.6883987144877514, + "loss_delivery": 0.8510319416721662, + "loss_biodist": 0.0741106594602267, + "loss_toxic": 0.5071616619825363, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8659873406092324, + "loss_size": 0.30614758531252545, + "loss_pdi": 0.4234091142813365, + "loss_ee": 0.6790659483522177, + "loss_delivery": 0.8723968292276064, + "loss_biodist": 0.07454797873894374, + "loss_toxic": 0.5161521422366301, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.803225874900818, + "loss_size": 0.2983423223098119, + "loss_pdi": 0.41666126002868015, + "loss_ee": 0.6870583643515905, + "loss_delivery": 0.8574838091929754, + "loss_biodist": 0.07380721221367519, + "loss_toxic": 0.47704040569563705, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.7635382413864136, + "loss_size": 0.2966768145561218, + "loss_pdi": 0.4068991467356682, + "loss_ee": 0.6894313724090656, + "loss_delivery": 0.8422336292763551, + "loss_biodist": 0.07217028054098289, + "loss_toxic": 0.4632088014235099, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_4/splits.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..f1557f0 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.5997113614479599, + "rmse": 0.7744103314444868, + "mae": 0.44359141796095564, + "r2": 0.19751170468993862 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8951411735312095, + "rmse": 0.9461190060088686, + "mae": 0.6304082777351141, + "r2": 0.13441326227707218 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7738095238095238, + "precision": 0.7122033898305085, + "recall": 0.7294721407624634, + "f1": 0.7193599437313171 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6642401021711367, + "recall": 0.6547008547008547, + "f1": 0.6501603453002569 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.1783098455009319, + "js_divergence": 0.0476989602963162 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/pip_freeze.txt b/models/abl_full/s2_chemeleon/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s2_chemeleon/seed42/repro.txt b/models/abl_full/s2_chemeleon/seed42/repro.txt new file mode 100644 index 0000000..aae194f --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T04:39:31+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=1 --batch-size 16 --use-chemeleon --chemeleon-cache data/processed/chemeleon_embeddings.npz diff --git a/models/abl_full/s2_chemeleon/seed42/strata_info.json b/models/abl_full/s2_chemeleon/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s2_chemeleon/seed42/summary.json b/models/abl_full/s2_chemeleon/seed42/summary.json new file mode 100644 index 0000000..7edac13 --- /dev/null +++ b/models/abl_full/s2_chemeleon/seed42/summary.json @@ -0,0 +1,352 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.12602063719411183, + "lr": 0.000790261954970823, + "weight_decay": 0.07286653737491042, + "backbone_lr_ratio": 0.4138040112561014, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 10, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.471601827675053, + "rmse": 1.2130959680400613, + "mae": 0.5563393922814404, + "r2": 0.09934345812791712 + }, + "delivery": { + "n_samples": 58, + "mse": 0.4724631310304712, + "rmse": 0.6873595354910494, + "mae": 0.5330853352387404, + "r2": 0.39947085018417017 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7473474801061009, + "recall": 0.7658588738417677, + "f1": 0.7551020408163265 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.7094907407407408, + "recall": 0.7547619047619047, + "f1": 0.7114887696283044 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.20546182921528536, + "js_divergence": 0.04152978832786755 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.17344542655609113, + "lr": 0.000990523292089834, + "weight_decay": 0.00023896945371132538, + "backbone_lr_ratio": 0.0659378253278463, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 7, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.33747921495294175, + "rmse": 0.5809296127354344, + "mae": 0.4476258881789233, + "r2": -0.0305415409527785 + }, + "delivery": { + "n_samples": 61, + "mse": 1.056582407147074, + "rmse": 1.02790194432498, + "mae": 0.6651162357054284, + "r2": 0.20024328568671268 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6547619047619048, + "precision": 0.5803571428571429, + "recall": 0.5952380952380952, + "f1": 0.5822328931572629 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.48787878787878797, + "recall": 0.4884639170353456, + "f1": 0.47598675833969956 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.2756725230675138, + "js_divergence": 0.07337178357522252 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.1604095508874329, + "lr": 0.0007982830900656446, + "weight_decay": 0.003723201974617767, + "backbone_lr_ratio": 0.17219709492855953, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 7, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3563573633813051, + "rmse": 0.5969567516841611, + "mae": 0.4678801386506252, + "r2": 0.29620057434719094 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6372581091688564, + "rmse": 0.7982844788475199, + "mae": 0.5258262845454738, + "r2": 0.15169900463478958 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.6612903225806452, + "recall": 0.6612903225806452, + "f1": 0.6612903225806452 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6301044634377968, + "recall": 0.6944444444444443, + "f1": 0.6462962962962963 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.2169966152183106, + "js_divergence": 0.056219459172710165 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.19585998114210643, + "lr": 0.0008949481903172137, + "weight_decay": 0.0848478556523433, + "backbone_lr_ratio": 0.7944603821606866, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 15, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.7538634470342749, + "rmse": 1.3243350962027227, + "mae": 0.5489391729976218, + "r2": 0.008001466577043592 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6291525449659798, + "rmse": 0.7931913671781734, + "mae": 0.49696772067286704, + "r2": 0.38838897610923717 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6746031746031746, + "recall": 0.6693548387096775, + "f1": 0.671813953488372 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5720588235294118, + "recall": 0.5813222724987431, + "f1": 0.5575374705809488 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.15879110087233053, + "js_divergence": 0.0399465436977698 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.26919128361241457, + "lr": 0.0008909017692547573, + "weight_decay": 9.871919386761893e-05, + "backbone_lr_ratio": 0.10881403588853521, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 13, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.5997113614479599, + "rmse": 0.7744103314444868, + "mae": 0.44359141796095564, + "r2": 0.19751170468993862 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8951411735312095, + "rmse": 0.9461190060088686, + "mae": 0.6304082777351141, + "r2": 0.13441326227707218 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7738095238095238, + "precision": 0.7122033898305085, + "recall": 0.7294721407624634, + "f1": 0.7193599437313171 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6642401021711367, + "recall": 0.6547008547008547, + "f1": 0.6501603453002569 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.1783098455009319, + "js_divergence": 0.0476989602963162 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.903802642898307, + "mse_std": 0.5929400225184294, + "rmse_mean": 0.8979455520213733, + "rmse_std": 0.3122441808958788, + "mae_mean": 0.4928752020139133, + "mae_std": 0.0495419362851832, + "r2_mean": 0.11410313255786235, + "r2_std": 0.1204275394579768 + }, + "delivery": { + "mse_mean": 0.7381194731687182, + "mse_std": 0.2091384962224589, + "rmse_mean": 0.8505712663701182, + "rmse_std": 0.12102889735204397, + "mae_mean": 0.5702807707795248, + "mae_std": 0.06533542314510579, + "r2_mean": 0.2548430757783964, + "r2_std": 0.1156502287890857 + }, + "pdi": { + "accuracy_mean": 0.7428571428571429, + "accuracy_std": 0.04856209060564558, + "precision_mean": 0.6751603019955145, + "precision_std": 0.05614891760744137, + "recall_mean": 0.6842428542265299, + "recall_std": 0.05895283174871104, + "f1_mean": 0.6779598307547847, + "f1_std": 0.05855626494166107 + }, + "ee": { + "accuracy_mean": 0.6595238095238095, + "accuracy_std": 0.06370994362028405, + "precision_mean": 0.6127545835515749, + "precision_std": 0.07688923240091776, + "recall_mean": 0.6347386786882585, + "recall_std": 0.09232384316051383, + "f1_mean": 0.6082939280291012, + "f1_std": 0.08237421604559148 + }, + "toxic": { + "accuracy_mean": 0.9500396342534485, + "accuracy_std": 0.014290090778642328, + "precision_mean": 0.7457142857142858, + "precision_std": 0.03149343955006944, + "recall_mean": 0.9737706334802525, + "recall_std": 0.007575117962473199, + "f1_mean": 0.8148343102325404, + "f1_std": 0.0312513648447909 + }, + "biodist": { + "kl_divergence_mean": 0.20704638277487444, + "kl_divergence_std": 0.03991347109214457, + "js_divergence_mean": 0.05175330701397725, + "js_divergence_std": 0.012228350384015424 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/local_uncommitted.patch b/models/abl_full/s2_unimol/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_0/best_params.json b/models/abl_full/s2_unimol/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..17a2f2e --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_0/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.19443413675775473, + "lr": 0.0009635836112341388, + "weight_decay": 0.009070781299297507, + "backbone_lr_ratio": 0.1734075036613793, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s2_unimol/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..9c322f6 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 8} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_0/history.json b/models/abl_full/s2_unimol/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..71c7ffe --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_0/history.json @@ -0,0 +1,174 @@ +{ + "train": [ + { + "loss": 5.187239156828986, + "loss_size": 0.7696442363990678, + "loss_pdi": 0.6747307810518477, + "loss_ee": 1.0656630827320948, + "loss_delivery": 1.0259458786911435, + "loss_biodist": 1.0847381717628903, + "loss_toxic": 0.5773923115597831 + }, + { + "loss": 4.269440929094951, + "loss_size": 0.8349678706791666, + "loss_pdi": 0.6321950819757249, + "loss_ee": 0.9590215351846483, + "loss_delivery": 0.8256754866904683, + "loss_biodist": 0.6322159750594033, + "loss_toxic": 0.40335247417291004 + }, + { + "loss": 3.827047692404853, + "loss_size": 0.8013477250933647, + "loss_pdi": 0.5951595173941718, + "loss_ee": 0.9192740188704597, + "loss_delivery": 0.8324025558928648, + "loss_biodist": 0.41210590220159954, + "loss_toxic": 0.28789762821462417 + }, + { + "loss": 3.5353048774931164, + "loss_size": 0.7567801078160604, + "loss_pdi": 0.5648964494466782, + "loss_ee": 0.8682580656475491, + "loss_delivery": 0.9127325134144889, + "loss_biodist": 0.28787578600976205, + "loss_toxic": 0.17205503065552977 + }, + { + "loss": 3.0409794052441916, + "loss_size": 0.4465755530529552, + "loss_pdi": 0.5438254177570343, + "loss_ee": 0.8179416623380449, + "loss_delivery": 0.8686872625516521, + "loss_biodist": 0.2516762539744377, + "loss_toxic": 0.1395340801941024 + }, + { + "loss": 2.9117773042784796, + "loss_size": 0.7065168470144272, + "loss_pdi": 0.5096431887812085, + "loss_ee": 0.7855657504664527, + "loss_delivery": 0.6846461080842547, + "loss_biodist": 0.1972540985378954, + "loss_toxic": 0.052411989205413394 + }, + { + "loss": 2.8392823735872903, + "loss_size": 0.6285548855861028, + "loss_pdi": 0.4511272327767478, + "loss_ee": 0.7531296610832214, + "loss_delivery": 0.7268874102996455, + "loss_biodist": 0.20590136531326506, + "loss_toxic": 0.0957739965007123 + }, + { + "loss": 2.7759587698512607, + "loss_size": 0.6346019523011314, + "loss_pdi": 0.4734300838576423, + "loss_ee": 0.7367230090830061, + "loss_delivery": 0.7454512301418517, + "loss_biodist": 0.16933058657579952, + "loss_toxic": 0.04111788372716142 + } + ], + "val": [ + { + "loss": 4.175712505976359, + "loss_size": 0.3918853972184782, + "loss_pdi": 0.7006883223851522, + "loss_ee": 1.0073793927828472, + "loss_delivery": 0.6429544538259506, + "loss_biodist": 0.9230297009150187, + "loss_toxic": 0.5301049053668976, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 3.777998208999634, + "loss_size": 0.3794145807623863, + "loss_pdi": 0.7736206452051798, + "loss_ee": 0.9212398330370585, + "loss_delivery": 0.5789165645837784, + "loss_biodist": 0.6232059399286906, + "loss_toxic": 0.5272738436857859, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.519968112309774, + "loss_size": 0.3770350515842438, + "loss_pdi": 0.833997905254364, + "loss_ee": 0.8243682781855265, + "loss_delivery": 0.48997174700101215, + "loss_biodist": 0.429710586865743, + "loss_toxic": 0.5882608493169149, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.0751039187113443, + "loss_size": 0.3759036536018054, + "loss_pdi": 0.9273538589477539, + "loss_ee": 0.735403964916865, + "loss_delivery": 0.46361534142245847, + "loss_biodist": 0.2091308037439982, + "loss_toxic": 0.3868071176111698, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 4.075463771820068, + "loss_size": 0.3826041022936503, + "loss_pdi": 1.3591596086819966, + "loss_ee": 0.7388648502528667, + "loss_delivery": 0.5028358995914459, + "loss_biodist": 0.21962479129433632, + "loss_toxic": 0.9044310399331152, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.2470056215922036, + "loss_size": 0.37037088970343274, + "loss_pdi": 1.2471286257108052, + "loss_ee": 0.6846881856520971, + "loss_delivery": 0.4902557631333669, + "loss_biodist": 0.15061227728923163, + "loss_toxic": 0.34206206584349275, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.0764809449513755, + "loss_size": 0.4065028727054596, + "loss_pdi": 1.2687981128692627, + "loss_ee": 0.6997925514976183, + "loss_delivery": 0.4562946396569411, + "loss_biodist": 0.15444844340284666, + "loss_toxic": 0.13676806151246032, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + }, + { + "loss": 3.0754563013712564, + "loss_size": 0.4129226704438527, + "loss_pdi": 1.2822547554969788, + "loss_ee": 0.6949745664993922, + "loss_delivery": 0.4519372197488944, + "loss_biodist": 0.1532252791027228, + "loss_toxic": 0.12703302890683213, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.48484848484848486, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_0/splits.json b/models/abl_full/s2_unimol/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s2_unimol/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..4d6f09e --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.4033825219031228, + "rmse": 1.184644470675959, + "mae": 0.5112627011286207, + "r2": 0.14109535247187277 + }, + "delivery": { + "n_samples": 58, + "mse": 0.6141288950726891, + "rmse": 0.7836637640421363, + "mae": 0.5980733223901741, + "r2": 0.21940511541936314 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7473474801061009, + "recall": 0.7658588738417677, + "f1": 0.7551020408163265 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.698529411764706, + "recall": 0.7414285714285714, + "f1": 0.6940035273368607 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9827586206896551, + "precision": 0.9912280701754386, + "recall": 0.75, + "f1": 0.8289085545722714 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.26304271116747596, + "js_divergence": 0.052775195852787095 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_1/best_params.json b/models/abl_full/s2_unimol/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..5016396 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_1/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.15817546303903499, + "lr": 0.00021145265298328845, + "weight_decay": 0.0012812824514978503, + "backbone_lr_ratio": 0.22619857682753952, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s2_unimol/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..82d35d4 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 14} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_1/history.json b/models/abl_full/s2_unimol/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..2001d90 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_1/history.json @@ -0,0 +1,300 @@ +{ + "train": [ + { + "loss": 5.8861484792497425, + "loss_size": 1.2648199150959651, + "loss_pdi": 0.6979216469658746, + "loss_ee": 1.0783753593762715, + "loss_delivery": 0.9229585114452574, + "loss_biodist": 1.2922170360883076, + "loss_toxic": 0.6331689953804016 + }, + { + "loss": 5.5769435034857855, + "loss_size": 1.2293999675247405, + "loss_pdi": 0.6757366789711846, + "loss_ee": 1.046430574523078, + "loss_delivery": 0.8893167368239827, + "loss_biodist": 1.1584657099511888, + "loss_toxic": 0.5879834194978079 + }, + { + "loss": 5.404140260484484, + "loss_size": 1.2321450954510107, + "loss_pdi": 0.6561033758852217, + "loss_ee": 1.0200605988502502, + "loss_delivery": 0.922073534793324, + "loss_biodist": 1.0622302393118541, + "loss_toxic": 0.5265452182955213 + }, + { + "loss": 4.4652151929007635, + "loss_size": 0.8399236421618197, + "loss_pdi": 0.6309444440735711, + "loss_ee": 0.9596586989031898, + "loss_delivery": 0.7778824551237954, + "loss_biodist": 0.8187991910510592, + "loss_toxic": 0.45100270377265084 + }, + { + "loss": 4.138010130988227, + "loss_size": 1.0955682148536046, + "loss_pdi": 0.5820424126254188, + "loss_ee": 0.8989119728406271, + "loss_delivery": 0.7001863809095489, + "loss_biodist": 0.5683201236857308, + "loss_toxic": 0.30220475710100597 + }, + { + "loss": 4.004462718963623, + "loss_size": 1.131999295618799, + "loss_pdi": 0.573401250773006, + "loss_ee": 0.846469928820928, + "loss_delivery": 0.7795501657658153, + "loss_biodist": 0.47548123035166, + "loss_toxic": 0.20596983614895079 + }, + { + "loss": 3.408888088332282, + "loss_size": 0.7272834868894683, + "loss_pdi": 0.5633808076381683, + "loss_ee": 0.8331564962863922, + "loss_delivery": 0.6732726014322705, + "loss_biodist": 0.43113059136602616, + "loss_toxic": 0.18675298574897978 + }, + { + "loss": 3.6706577009624906, + "loss_size": 0.9918137085106637, + "loss_pdi": 0.5543151249488195, + "loss_ee": 0.8081690702173445, + "loss_delivery": 0.7460916158225801, + "loss_biodist": 0.4270142689347267, + "loss_toxic": 0.15139459549552864 + }, + { + "loss": 3.636997448073493, + "loss_size": 1.0178299339281187, + "loss_pdi": 0.5450812859667672, + "loss_ee": 0.8218720025486417, + "loss_delivery": 0.7393611508111159, + "loss_biodist": 0.39017683184809154, + "loss_toxic": 0.13133156361679235 + }, + { + "loss": 3.528058727582296, + "loss_size": 0.931744741068946, + "loss_pdi": 0.5101119180520376, + "loss_ee": 0.7879018038511276, + "loss_delivery": 0.7625755071640015, + "loss_biodist": 0.42403854346937603, + "loss_toxic": 0.12029459234327078 + }, + { + "loss": 3.499878168106079, + "loss_size": 0.9521185565325949, + "loss_pdi": 0.5183579077323278, + "loss_ee": 0.7689021627108256, + "loss_delivery": 0.7316870234078832, + "loss_biodist": 0.3952118241124683, + "loss_toxic": 0.14191501463452974 + }, + { + "loss": 3.3614937133259244, + "loss_size": 0.8624740454057852, + "loss_pdi": 0.5201014131307602, + "loss_ee": 0.7881932821538713, + "loss_delivery": 0.702976675497161, + "loss_biodist": 0.3724016613430447, + "loss_toxic": 0.12342091577334537 + }, + { + "loss": 3.446310559908549, + "loss_size": 0.9640827381776439, + "loss_pdi": 0.5240868495570289, + "loss_ee": 0.7586253235737482, + "loss_delivery": 0.7054183905323347, + "loss_biodist": 0.3892553473512332, + "loss_toxic": 0.11338126348952453 + }, + { + "loss": 3.452818340725369, + "loss_size": 0.9326009220547147, + "loss_pdi": 0.5153350085020065, + "loss_ee": 0.7544030414687263, + "loss_delivery": 0.7501355053650008, + "loss_biodist": 0.3927485371629397, + "loss_toxic": 0.11628590575936767 + } + ], + "val": [ + { + "loss": 4.089354038238525, + "loss_size": 0.4771044595787923, + "loss_pdi": 0.7049460013707479, + "loss_ee": 1.044113039970398, + "loss_delivery": 0.26339441537857056, + "loss_biodist": 1.094573179880778, + "loss_toxic": 0.5095643798510233, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 3.8421709537506104, + "loss_size": 0.45317415526369587, + "loss_pdi": 0.7072440584500631, + "loss_ee": 0.9968905051549276, + "loss_delivery": 0.2253306321799755, + "loss_biodist": 0.9962432384490967, + "loss_toxic": 0.4703582425912221, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 3.602015654246012, + "loss_size": 0.43574040026093525, + "loss_pdi": 0.7032821178436279, + "loss_ee": 0.9653432369232178, + "loss_delivery": 0.19078408631806573, + "loss_biodist": 0.8990056117375692, + "loss_toxic": 0.4160816768805186, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.967649300893148, + "loss_size": 0.4561977982521057, + "loss_pdi": 0.6702666878700256, + "loss_ee": 0.7982151309649149, + "loss_delivery": 0.3552462657292684, + "loss_biodist": 0.5411491990089417, + "loss_toxic": 0.14877363046010336, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.590599536895752, + "loss_size": 0.4373619208733241, + "loss_pdi": 0.6486015915870667, + "loss_ee": 0.7310833136240641, + "loss_delivery": 0.3361049046119054, + "loss_biodist": 0.3773827354113261, + "loss_toxic": 0.059004521618286766, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.4501171112060547, + "loss_size": 0.4238513261079788, + "loss_pdi": 0.613071988026301, + "loss_ee": 0.6803855001926422, + "loss_delivery": 0.3370961646238963, + "loss_biodist": 0.36027247707049054, + "loss_toxic": 0.033963048830628395, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.4167064428329468, + "loss_size": 0.3834708631038666, + "loss_pdi": 0.6207810938358307, + "loss_ee": 0.6310348113377889, + "loss_delivery": 0.3756028215090434, + "loss_biodist": 0.38400764266649884, + "loss_toxic": 0.021304513638218243, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.217272957166036, + "loss_size": 0.3611900160710017, + "loss_pdi": 0.6122443377971649, + "loss_ee": 0.6106126308441162, + "loss_delivery": 0.2532430539528529, + "loss_biodist": 0.362660030523936, + "loss_toxic": 0.015940878229836624, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.266296704610189, + "loss_size": 0.39024733503659564, + "loss_pdi": 0.6065952380498251, + "loss_ee": 0.6041284402211508, + "loss_delivery": 0.2921869109074275, + "loss_biodist": 0.3578822761774063, + "loss_toxic": 0.014828029088675976, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2329221963882446, + "loss_size": 0.3768630623817444, + "loss_pdi": 0.603254516919454, + "loss_ee": 0.587930848201116, + "loss_delivery": 0.3015740116437276, + "loss_biodist": 0.35130757590134937, + "loss_toxic": 0.011830735951662064, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.233369827270508, + "loss_size": 0.37156378229459125, + "loss_pdi": 0.6088180840015411, + "loss_ee": 0.5797138512134552, + "loss_delivery": 0.3145054231087367, + "loss_biodist": 0.3480344812075297, + "loss_toxic": 0.010933995557328066, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2588858604431152, + "loss_size": 0.3667546560366948, + "loss_pdi": 0.6103008190790812, + "loss_ee": 0.5830359160900116, + "loss_delivery": 0.3304785390694936, + "loss_biodist": 0.3577955613533656, + "loss_toxic": 0.011242985414961973, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2678388754526773, + "loss_size": 0.37279245754082996, + "loss_pdi": 0.6135078072547913, + "loss_ee": 0.5849139193693796, + "loss_delivery": 0.32947330673535663, + "loss_biodist": 0.35775192081928253, + "loss_toxic": 0.010321720192829767, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.273550192515055, + "loss_size": 0.37937626242637634, + "loss_pdi": 0.6126285394032797, + "loss_ee": 0.583802709976832, + "loss_delivery": 0.33832454681396484, + "loss_biodist": 0.34984084963798523, + "loss_toxic": 0.01050834512958924, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_1/splits.json b/models/abl_full/s2_unimol/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s2_unimol/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..93947e0 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.36049523533955935, + "rmse": 0.600412554282103, + "mae": 0.46337680354537, + "r2": -0.10082428449635605 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0121646453815876, + "rmse": 1.0060639370246742, + "mae": 0.63121185546405, + "r2": 0.23386432931418888 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.5886939571150097, + "recall": 0.6031746031746031, + "f1": 0.5916666666666667 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.4867204867204868, + "recall": 0.4884639170353456, + "f1": 0.4767781170881946 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.5355506530924755, + "js_divergence": 0.1321267498778987 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_2/best_params.json b/models/abl_full/s2_unimol/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..c436de2 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_2/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.2371232874491625, + "lr": 0.000984410243075745, + "weight_decay": 0.0020407855107584254, + "backbone_lr_ratio": 0.13271813760612877, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s2_unimol/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..9c322f6 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 8} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_2/history.json b/models/abl_full/s2_unimol/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..75832be --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_2/history.json @@ -0,0 +1,174 @@ +{ + "train": [ + { + "loss": 5.105031953917609, + "loss_size": 0.8618467955125703, + "loss_pdi": 0.6800479888916016, + "loss_ee": 1.0417145060168371, + "loss_delivery": 0.8042113292548392, + "loss_biodist": 1.1005381445089977, + "loss_toxic": 0.6268649962213304 + }, + { + "loss": 4.287324547767639, + "loss_size": 0.8218989678555064, + "loss_pdi": 0.6248503261142306, + "loss_ee": 0.9482094314363267, + "loss_delivery": 0.8228444887532128, + "loss_biodist": 0.6527321123414569, + "loss_toxic": 0.4360435340139601 + }, + { + "loss": 3.750355349646674, + "loss_size": 0.7770733402834998, + "loss_pdi": 0.6010817637046179, + "loss_ee": 0.8663112123807272, + "loss_delivery": 0.776582678159078, + "loss_biodist": 0.4183846678998735, + "loss_toxic": 0.32979091505209607 + }, + { + "loss": 3.1335573461320667, + "loss_size": 0.4476685623327891, + "loss_pdi": 0.577113194598092, + "loss_ee": 0.8412600093417697, + "loss_delivery": 0.7625170225898424, + "loss_biodist": 0.304584080974261, + "loss_toxic": 0.22058944072988299 + }, + { + "loss": 3.0688576565848456, + "loss_size": 0.7149461847212579, + "loss_pdi": 0.5520558936728371, + "loss_ee": 0.7707289987140231, + "loss_delivery": 0.6732048218448957, + "loss_biodist": 0.2555515584018495, + "loss_toxic": 0.1209629685100582 + }, + { + "loss": 2.9053824411498175, + "loss_size": 0.6487632356584072, + "loss_pdi": 0.5028467939959632, + "loss_ee": 0.7727956374486288, + "loss_delivery": 0.6563823152747419, + "loss_biodist": 0.21237656101584435, + "loss_toxic": 0.12990931411170298 + }, + { + "loss": 2.977839628855387, + "loss_size": 0.6411374592118793, + "loss_pdi": 0.5062911245557997, + "loss_ee": 0.7589789496527778, + "loss_delivery": 0.653669986459944, + "loss_biodist": 0.25805110732714337, + "loss_toxic": 0.17837292752746078 + }, + { + "loss": 2.7079690429899426, + "loss_size": 0.5522702005174425, + "loss_pdi": 0.48864299555619556, + "loss_ee": 0.7366291582584381, + "loss_delivery": 0.6324923055039512, + "loss_biodist": 0.21830385964777735, + "loss_toxic": 0.09709469053066438 + } + ], + "val": [ + { + "loss": 7.33768367767334, + "loss_size": 3.328894019126892, + "loss_pdi": 0.682314395904541, + "loss_ee": 1.0119376977284749, + "loss_delivery": 1.3694863418738048, + "loss_biodist": 0.6053362488746643, + "loss_toxic": 0.36080121994018555, + "acc_pdi": 0.3939393939393939, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.965406576792399, + "loss_size": 3.447270005941391, + "loss_pdi": 0.7128164172172546, + "loss_ee": 0.9805428187052408, + "loss_delivery": 1.3597116470336914, + "loss_biodist": 0.3167558014392853, + "loss_toxic": 0.1905043621857961, + "acc_pdi": 0.3939393939393939, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9 + }, + { + "loss": 6.772581736246745, + "loss_size": 3.3885902166366577, + "loss_pdi": 0.7006813883781433, + "loss_ee": 1.009836216767629, + "loss_delivery": 1.3562003473440807, + "loss_biodist": 0.24924174944559732, + "loss_toxic": 0.12670029203097025, + "acc_pdi": 0.42424242424242425, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.489878972371419, + "loss_size": 3.2154032786687217, + "loss_pdi": 0.710199773311615, + "loss_ee": 1.0961629350980122, + "loss_delivery": 1.276216189066569, + "loss_biodist": 0.16526911656061807, + "loss_toxic": 0.09702061365048091, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.22051215171814, + "loss_size": 3.0917157729466758, + "loss_pdi": 0.6724400719006857, + "loss_ee": 1.0874229470888774, + "loss_delivery": 1.2452914615472157, + "loss_biodist": 0.1256255954504013, + "loss_toxic": 0.0682052094489336, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.082905133565267, + "loss_size": 2.973799159129461, + "loss_pdi": 0.663221001625061, + "loss_ee": 1.062674919764201, + "loss_delivery": 1.2840925256411235, + "loss_biodist": 0.1137135773897171, + "loss_toxic": 0.056651302302877106, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.060564279556274, + "loss_size": 2.9915042022864022, + "loss_pdi": 0.6658509969711304, + "loss_ee": 1.0768516461054485, + "loss_delivery": 1.2346592247486115, + "loss_biodist": 0.11471132934093475, + "loss_toxic": 0.04897596128284931, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.050561507542928, + "loss_size": 2.9964838922023773, + "loss_pdi": 0.658420999844869, + "loss_ee": 1.0895307262738545, + "loss_delivery": 1.2154717445373535, + "loss_biodist": 0.11510242770115535, + "loss_toxic": 0.047729249422748886, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_2/splits.json b/models/abl_full/s2_unimol/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s2_unimol/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..17fa9f6 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.39488302386535035, + "rmse": 0.6283971863919748, + "mae": 0.5041336017727319, + "r2": 0.2201130832279079 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6639023201045673, + "rmse": 0.8148020128255498, + "mae": 0.5500516577080513, + "r2": 0.11623094180077842 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6309523809523809, + "precision": 0.6253545093590471, + "recall": 0.6620234604105573, + "f1": 0.6063492063492063 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5890688259109312, + "recall": 0.6442577030812324, + "f1": 0.6008846183177 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.17713039513740622, + "js_divergence": 0.043962000154917115 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_3/best_params.json b/models/abl_full/s2_unimol/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..411b5b4 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_3/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.2132958125365665, + "lr": 0.000901227341517981, + "weight_decay": 0.007185030174274687, + "backbone_lr_ratio": 0.646326144537216, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s2_unimol/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..6aa3930 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 9} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_3/history.json b/models/abl_full/s2_unimol/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..1dd8f5b --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_3/history.json @@ -0,0 +1,195 @@ +{ + "train": [ + { + "loss": 4.85384808646308, + "loss_size": 0.5304673322372966, + "loss_pdi": 0.6782779892285665, + "loss_ee": 1.052869415945477, + "loss_delivery": 0.8743063542577956, + "loss_biodist": 1.116288635465834, + "loss_toxic": 0.6125207957294252 + }, + { + "loss": 3.973538875579834, + "loss_size": 0.4611119164360894, + "loss_pdi": 0.6157994700802697, + "loss_ee": 0.9670915173159705, + "loss_delivery": 0.844789907336235, + "loss_biodist": 0.6584382818804847, + "loss_toxic": 0.4449553042650223 + }, + { + "loss": 3.449112547768487, + "loss_size": 0.447244534889857, + "loss_pdi": 0.6001923812760247, + "loss_ee": 0.8963918917708926, + "loss_delivery": 0.8316530030634668, + "loss_biodist": 0.3986650150683191, + "loss_toxic": 0.2941175252199173 + }, + { + "loss": 3.5391667551464505, + "loss_size": 0.4779077023267746, + "loss_pdi": 0.6386423077848222, + "loss_ee": 0.8875465989112854, + "loss_delivery": 0.9178204933802286, + "loss_biodist": 0.4204117390844557, + "loss_toxic": 0.2285885065793991 + }, + { + "loss": 3.027322106891208, + "loss_size": 0.42462943080398774, + "loss_pdi": 0.5557086384958692, + "loss_ee": 0.8344376020961337, + "loss_delivery": 0.7948778246839842, + "loss_biodist": 0.27809671064217883, + "loss_toxic": 0.16520885393644372 + }, + { + "loss": 2.756260189745161, + "loss_size": 0.4320901363260216, + "loss_pdi": 0.5466750280724632, + "loss_ee": 0.7779312365584903, + "loss_delivery": 0.7311447949873077, + "loss_biodist": 0.20892969394723573, + "loss_toxic": 0.08401670379357205 + }, + { + "loss": 2.435137450695038, + "loss_size": 0.3598042246368196, + "loss_pdi": 0.5013349933756722, + "loss_ee": 0.7024384886026382, + "loss_delivery": 0.6228765803906653, + "loss_biodist": 0.18548153796129757, + "loss_toxic": 0.08287990564066502 + }, + { + "loss": 2.3501212464438543, + "loss_size": 0.322905495762825, + "loss_pdi": 0.4917607837253147, + "loss_ee": 0.6367348333199819, + "loss_delivery": 0.6712490154637231, + "loss_biodist": 0.19435077201988962, + "loss_toxic": 0.053721130489268236 + }, + { + "loss": 2.1953759127193027, + "loss_size": 0.2966780426601569, + "loss_pdi": 0.4589258117808236, + "loss_ee": 0.6048549115657806, + "loss_delivery": 0.6002533932526907, + "loss_biodist": 0.16818933271699482, + "loss_toxic": 0.08194489867633416 + } + ], + "val": [ + { + "loss": 5.656533559163411, + "loss_size": 2.239702731370926, + "loss_pdi": 0.6931489308675131, + "loss_ee": 0.9368929862976074, + "loss_delivery": 0.7838856528202692, + "loss_biodist": 0.6133894522984823, + "loss_toxic": 0.40593292315800983, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.7391304347826086 + }, + { + "loss": 5.0603712399800616, + "loss_size": 2.2598052322864532, + "loss_pdi": 0.6902784705162048, + "loss_ee": 0.7684059143066406, + "loss_delivery": 0.7157798856496811, + "loss_biodist": 0.29564260443051654, + "loss_toxic": 0.33897582689921063, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.773324688275655, + "loss_size": 2.254566783706347, + "loss_pdi": 0.6781467795372009, + "loss_ee": 0.69752436876297, + "loss_delivery": 0.6239212503035864, + "loss_biodist": 0.1875811517238617, + "loss_toxic": 0.3323324720064799, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.703591386477153, + "loss_size": 2.1999765088160834, + "loss_pdi": 0.6231130560239156, + "loss_ee": 0.8074050744374593, + "loss_delivery": 0.6818648874759674, + "loss_biodist": 0.1559434781471888, + "loss_toxic": 0.23985187212626138, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.604441324869792, + "loss_size": 2.28312419851621, + "loss_pdi": 0.597948948542277, + "loss_ee": 0.7360944350560507, + "loss_delivery": 0.6912261545658112, + "loss_biodist": 0.13807379702727, + "loss_toxic": 0.158668319384257, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6666666666666666, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.435192982355754, + "loss_size": 2.148078352212906, + "loss_pdi": 0.6032910744349161, + "loss_ee": 0.7382761538028717, + "loss_delivery": 0.5852413972218832, + "loss_biodist": 0.12191660702228546, + "loss_toxic": 0.23684715231259665, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.165479858716329, + "loss_size": 2.1009850899378457, + "loss_pdi": 0.5359489321708679, + "loss_ee": 0.6872343420982361, + "loss_delivery": 0.5975562930107117, + "loss_biodist": 0.12308756013711293, + "loss_toxic": 0.11677447458108266, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 3.9943244457244873, + "loss_size": 1.95501243074735, + "loss_pdi": 0.5454426805178324, + "loss_ee": 0.7047649323940277, + "loss_delivery": 0.5871375650167465, + "loss_biodist": 0.1081474373737971, + "loss_toxic": 0.09357463816801707, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.0144515832265215, + "loss_size": 2.016772230466207, + "loss_pdi": 0.5390238563219706, + "loss_ee": 0.692948450644811, + "loss_delivery": 0.5727551529804865, + "loss_biodist": 0.11341713865598042, + "loss_toxic": 0.07748642315467198, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.8695652173913043 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_3/splits.json b/models/abl_full/s2_unimol/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s2_unimol/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..b67447f --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.809584545418648, + "rmse": 1.345207993367066, + "mae": 0.5733086775472186, + "r2": -0.023514811370069832 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6906153896813075, + "rmse": 0.831032724795665, + "mae": 0.5065565865518431, + "r2": 0.32863978858967746 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6423197492163009, + "recall": 0.6664222873900294, + "f1": 0.6480643539467068 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6309523809523809, + "precision": 0.5562917474682181, + "recall": 0.5724736048265461, + "f1": 0.5527777777777779 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.17438377943424227, + "js_divergence": 0.043887965508778506 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_4/best_params.json b/models/abl_full/s2_unimol/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..eccb338 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_4/best_params.json @@ -0,0 +1,12 @@ +{ + "dropout": 0.20496607857127885, + "lr": 0.0009573095972231165, + "weight_decay": 0.00038069869878401156, + "backbone_lr_ratio": 0.04121720375781922, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s2_unimol/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..82d35d4 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 14} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_4/history.json b/models/abl_full/s2_unimol/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..6b252c6 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_4/history.json @@ -0,0 +1,300 @@ +{ + "train": [ + { + "loss": 5.421504537264506, + "loss_size": 1.1537336674001482, + "loss_pdi": 0.6830224560366737, + "loss_ee": 1.0468118488788605, + "loss_delivery": 0.9501521007882224, + "loss_biodist": 1.0048997700214386, + "loss_toxic": 0.5963597397009531 + }, + { + "loss": 4.449524376127455, + "loss_size": 0.993106797337532, + "loss_pdi": 0.6362830003102621, + "loss_ee": 0.9526686569054922, + "loss_delivery": 0.8889643665817049, + "loss_biodist": 0.5908945318725374, + "loss_toxic": 0.41077685521708596 + }, + { + "loss": 4.131177147229512, + "loss_size": 1.0180273577570915, + "loss_pdi": 0.598820663160748, + "loss_ee": 0.8815676503711276, + "loss_delivery": 0.9149711835715506, + "loss_biodist": 0.3958510094218784, + "loss_toxic": 0.3510601297020912 + }, + { + "loss": 3.742984506818983, + "loss_size": 1.0210792471965153, + "loss_pdi": 0.5817280577288734, + "loss_ee": 0.8705410526858436, + "loss_delivery": 0.79205807712343, + "loss_biodist": 0.28695205350716907, + "loss_toxic": 0.22291093692183495 + }, + { + "loss": 3.1491733723216586, + "loss_size": 0.6440206911000941, + "loss_pdi": 0.529501693116294, + "loss_ee": 0.8398936688899994, + "loss_delivery": 0.7495003648930125, + "loss_biodist": 0.24423393689923817, + "loss_toxic": 0.170122058234281 + }, + { + "loss": 3.2650341590245566, + "loss_size": 0.8811703580949042, + "loss_pdi": 0.5462711056073507, + "loss_ee": 0.7889859510792626, + "loss_delivery": 0.7210898051659266, + "loss_biodist": 0.22286627234684098, + "loss_toxic": 0.13850223842180437 + }, + { + "loss": 3.0248229371176825, + "loss_size": 0.8422413186894523, + "loss_pdi": 0.5122667451699575, + "loss_ee": 0.764793852965037, + "loss_delivery": 0.6501813497808244, + "loss_biodist": 0.19190800686677298, + "loss_toxic": 0.09718515910208225 + }, + { + "loss": 3.046507623460558, + "loss_size": 0.8384543268216981, + "loss_pdi": 0.5017328759034475, + "loss_ee": 0.7557257314523061, + "loss_delivery": 0.6305794931120343, + "loss_biodist": 0.19950001935164133, + "loss_toxic": 0.15458241011947393 + }, + { + "loss": 2.808406743738386, + "loss_size": 0.7161515632437335, + "loss_pdi": 0.48697350753678215, + "loss_ee": 0.7209011962016424, + "loss_delivery": 0.6326989483916097, + "loss_biodist": 0.17804397394259772, + "loss_toxic": 0.1091082827705476 + }, + { + "loss": 2.8213864829805164, + "loss_size": 0.763423465192318, + "loss_pdi": 0.4935748527447383, + "loss_ee": 0.7591790424452888, + "loss_delivery": 0.6051601072152456, + "loss_biodist": 0.17582429904076788, + "loss_toxic": 0.0669920173370176 + }, + { + "loss": 2.7698264519373574, + "loss_size": 0.7267611026763916, + "loss_pdi": 0.47616514894697404, + "loss_ee": 0.739420430527793, + "loss_delivery": 0.5965258330106735, + "loss_biodist": 0.1872284540699588, + "loss_toxic": 0.08473403317232926 + }, + { + "loss": 2.880350795057085, + "loss_size": 0.7385810986161232, + "loss_pdi": 0.48559243645932937, + "loss_ee": 0.7851959185467826, + "loss_delivery": 0.6060560395320257, + "loss_biodist": 0.17703697664870155, + "loss_toxic": 0.13133627186632818 + }, + { + "loss": 2.645332713921865, + "loss_size": 0.6772321156329579, + "loss_pdi": 0.4576547791560491, + "loss_ee": 0.7259440819422404, + "loss_delivery": 0.5957699939608574, + "loss_biodist": 0.15330418219996822, + "loss_toxic": 0.07656414905149075 + }, + { + "loss": 2.643335501352946, + "loss_size": 0.7081426804264387, + "loss_pdi": 0.4740050774481561, + "loss_ee": 0.7295397288269467, + "loss_delivery": 0.5657880024777519, + "loss_biodist": 0.16803453904059198, + "loss_toxic": 0.04170111033858524 + } + ], + "val": [ + { + "loss": 4.4288709958394366, + "loss_size": 0.6092501580715179, + "loss_pdi": 0.6143778363863627, + "loss_ee": 1.0217326482137044, + "loss_delivery": 0.7007972672581673, + "loss_biodist": 0.93202672402064, + "loss_toxic": 0.5716310938199362, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.6598966916402182, + "loss_size": 0.4610227743784587, + "loss_pdi": 0.5553895533084869, + "loss_ee": 0.8489663203557333, + "loss_delivery": 0.6284207346810339, + "loss_biodist": 0.6679331461588541, + "loss_toxic": 0.5168040841817856, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.0679943561553955, + "loss_size": 0.36025339861710864, + "loss_pdi": 0.49258874853452045, + "loss_ee": 0.7255080938339233, + "loss_delivery": 0.5599162929380933, + "loss_biodist": 0.4390268127123515, + "loss_toxic": 0.4978405237197876, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.7826274236043296, + "loss_size": 0.2866621216138204, + "loss_pdi": 0.4207704613606135, + "loss_ee": 0.6739425311485926, + "loss_delivery": 0.6580668700238069, + "loss_biodist": 0.2532552828391393, + "loss_toxic": 0.4908155103524526, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.600564122200012, + "loss_size": 0.2849576969941457, + "loss_pdi": 0.40478798002004623, + "loss_ee": 0.6373845462997755, + "loss_delivery": 0.7084014837940534, + "loss_biodist": 0.18121630450089773, + "loss_toxic": 0.38583918660879135, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.5508745511372886, + "loss_size": 0.2672439416249593, + "loss_pdi": 0.3966321622331937, + "loss_ee": 0.6340759346882502, + "loss_delivery": 0.6717547799150149, + "loss_biodist": 0.13482833902041116, + "loss_toxic": 0.4464091279854377, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.512038767337799, + "loss_size": 0.25777774552504223, + "loss_pdi": 0.3881516568362713, + "loss_ee": 0.6401492978135744, + "loss_delivery": 0.6903823812802633, + "loss_biodist": 0.10836844146251678, + "loss_toxic": 0.42984796439607936, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.691701591014862, + "loss_size": 0.2743271092573802, + "loss_pdi": 0.38379549235105515, + "loss_ee": 0.6504867896437645, + "loss_delivery": 0.7050022948533297, + "loss_biodist": 0.09383765235543251, + "loss_toxic": 0.5829646351436774, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.513889253139496, + "loss_size": 0.27829912304878235, + "loss_pdi": 0.38411176825563115, + "loss_ee": 0.6498314837614695, + "loss_delivery": 0.7175276130437851, + "loss_biodist": 0.08744232604900996, + "loss_toxic": 0.4056480222692092, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.552726984024048, + "loss_size": 0.27286267777283985, + "loss_pdi": 0.3838208143909772, + "loss_ee": 0.6552211033801237, + "loss_delivery": 0.7384032867848873, + "loss_biodist": 0.08597217748562495, + "loss_toxic": 0.42657374901076156, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.5845937728881836, + "loss_size": 0.2655172447363536, + "loss_pdi": 0.38223496203621227, + "loss_ee": 0.6459284660716852, + "loss_delivery": 0.7514186725020409, + "loss_biodist": 0.08584994139770667, + "loss_toxic": 0.46227701380848885, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.719092051188151, + "loss_size": 0.2778390596310298, + "loss_pdi": 0.39072030161817867, + "loss_ee": 0.6598144384721915, + "loss_delivery": 0.7588092088699341, + "loss_biodist": 0.08536687741676967, + "loss_toxic": 0.5520244864746928, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.687789797782898, + "loss_size": 0.2629248648881912, + "loss_pdi": 0.38274893412987393, + "loss_ee": 0.6638968450327715, + "loss_delivery": 0.7456763349473476, + "loss_biodist": 0.083411930128932, + "loss_toxic": 0.5538754621520638, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.6666282216707864, + "loss_size": 0.2607542425394058, + "loss_pdi": 0.38222972800334293, + "loss_ee": 0.6568689495325089, + "loss_delivery": 0.7624136917293072, + "loss_biodist": 0.08512332538763683, + "loss_toxic": 0.5258233845233917, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_4/splits.json b/models/abl_full/s2_unimol/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s2_unimol/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..d054d45 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.683318604999295, + "rmse": 0.8266308759048956, + "mae": 0.4608367311080829, + "r2": 0.08563482746838524 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8554360260820959, + "rmse": 0.9248978462955225, + "mae": 0.6080092672130157, + "r2": 0.17280748440374305 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6890838206627681, + "recall": 0.7133431085043989, + "f1": 0.6974789915966386 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6239858906525573, + "recall": 0.6696581196581196, + "f1": 0.6372471762542684 + }, + "toxic": { + "n_samples": 59, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.15632725438935907, + "js_divergence": 0.042977887683408614 + } +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/pip_freeze.txt b/models/abl_full/s2_unimol/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s2_unimol/seed42/repro.txt b/models/abl_full/s2_unimol/seed42/repro.txt new file mode 100644 index 0000000..8b576a6 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T04:39:31+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=0 --batch-size 16 --use-unimol --unimol-cache data/processed/unimol_embeddings.npz diff --git a/models/abl_full/s2_unimol/seed42/strata_info.json b/models/abl_full/s2_unimol/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s2_unimol/seed42/summary.json b/models/abl_full/s2_unimol/seed42/summary.json new file mode 100644 index 0000000..1d22d59 --- /dev/null +++ b/models/abl_full/s2_unimol/seed42/summary.json @@ -0,0 +1,352 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.19443413675775473, + "lr": 0.0009635836112341388, + "weight_decay": 0.009070781299297507, + "backbone_lr_ratio": 0.1734075036613793, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 8, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.4033825219031228, + "rmse": 1.184644470675959, + "mae": 0.5112627011286207, + "r2": 0.14109535247187277 + }, + "delivery": { + "n_samples": 58, + "mse": 0.6141288950726891, + "rmse": 0.7836637640421363, + "mae": 0.5980733223901741, + "r2": 0.21940511541936314 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7976190476190477, + "precision": 0.7473474801061009, + "recall": 0.7658588738417677, + "f1": 0.7551020408163265 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.698529411764706, + "recall": 0.7414285714285714, + "f1": 0.6940035273368607 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9827586206896551, + "precision": 0.9912280701754386, + "recall": 0.75, + "f1": 0.8289085545722714 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.26304271116747596, + "js_divergence": 0.052775195852787095 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.15817546303903499, + "lr": 0.00021145265298328845, + "weight_decay": 0.0012812824514978503, + "backbone_lr_ratio": 0.22619857682753952, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 14, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.36049523533955935, + "rmse": 0.600412554282103, + "mae": 0.46337680354537, + "r2": -0.10082428449635605 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0121646453815876, + "rmse": 1.0060639370246742, + "mae": 0.63121185546405, + "r2": 0.23386432931418888 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.5886939571150097, + "recall": 0.6031746031746031, + "f1": 0.5916666666666667 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5476190476190477, + "precision": 0.4867204867204868, + "recall": 0.4884639170353456, + "f1": 0.4767781170881946 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.5355506530924755, + "js_divergence": 0.1321267498778987 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.2371232874491625, + "lr": 0.000984410243075745, + "weight_decay": 0.0020407855107584254, + "backbone_lr_ratio": 0.13271813760612877, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 8, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.39488302386535035, + "rmse": 0.6283971863919748, + "mae": 0.5041336017727319, + "r2": 0.2201130832279079 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6639023201045673, + "rmse": 0.8148020128255498, + "mae": 0.5500516577080513, + "r2": 0.11623094180077842 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6309523809523809, + "precision": 0.6253545093590471, + "recall": 0.6620234604105573, + "f1": 0.6063492063492063 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5890688259109312, + "recall": 0.6442577030812324, + "f1": 0.6008846183177 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.17713039513740622, + "js_divergence": 0.043962000154917115 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.2132958125365665, + "lr": 0.000901227341517981, + "weight_decay": 0.007185030174274687, + "backbone_lr_ratio": 0.646326144537216, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 9, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.809584545418648, + "rmse": 1.345207993367066, + "mae": 0.5733086775472186, + "r2": -0.023514811370069832 + }, + "delivery": { + "n_samples": 59, + "mse": 0.6906153896813075, + "rmse": 0.831032724795665, + "mae": 0.5065565865518431, + "r2": 0.32863978858967746 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6423197492163009, + "recall": 0.6664222873900294, + "f1": 0.6480643539467068 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6309523809523809, + "precision": 0.5562917474682181, + "recall": 0.5724736048265461, + "f1": 0.5527777777777779 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.17438377943424227, + "js_divergence": 0.043887965508778506 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.20496607857127885, + "lr": 0.0009573095972231165, + "weight_decay": 0.00038069869878401156, + "backbone_lr_ratio": 0.04121720375781922, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 14, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.683318604999295, + "rmse": 0.8266308759048956, + "mae": 0.4608367311080829, + "r2": 0.08563482746838524 + }, + "delivery": { + "n_samples": 58, + "mse": 0.8554360260820959, + "rmse": 0.9248978462955225, + "mae": 0.6080092672130157, + "r2": 0.17280748440374305 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6890838206627681, + "recall": 0.7133431085043989, + "f1": 0.6974789915966386 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6239858906525573, + "recall": 0.6696581196581196, + "f1": 0.6372471762542684 + }, + "toxic": { + "n_samples": 59, + "accuracy": 1.0, + "precision": 1.0, + "recall": 1.0, + "f1": 1.0 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.15632725438935907, + "js_divergence": 0.042977887683408614 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.9303327863051951, + "mse_std": 0.5778056760896338, + "rmse_mean": 0.9170586161243998, + "rmse_std": 0.29889175448177907, + "mae_mean": 0.5025837030204048, + "mae_std": 0.0408894603691881, + "r2_mean": 0.064500833460348, + "r2_std": 0.11454927907706133 + }, + "delivery": { + "mse_mean": 0.7672494552644494, + "mse_std": 0.14680574779598, + "rmse_mean": 0.8720920569967096, + "rmse_std": 0.08188345002317256, + "mae_mean": 0.5787805378654268, + "mae_std": 0.044759850128355844, + "r2_mean": 0.21418953190555018, + "r2_std": 0.07045781780651408 + }, + "pdi": { + "accuracy_mean": 0.7095238095238094, + "accuracy_std": 0.05909368402852792, + "precision_mean": 0.6585599032918454, + "precision_std": 0.054886308955929025, + "recall_mean": 0.6821644666642712, + "recall_std": 0.05453390940528367, + "f1_mean": 0.659732251875109, + "f1_std": 0.060231264777942696 + }, + "ee": { + "accuracy_mean": 0.6428571428571429, + "accuracy_std": 0.05583828285504082, + "precision_mean": 0.5909192725033799, + "precision_std": 0.07033238217058627, + "recall_mean": 0.623256383205963, + "recall_std": 0.08637909720283998, + "f1_mean": 0.5923382433549603, + "f1_std": 0.07395249281228188 + }, + "toxic": { + "accuracy_mean": 0.9602675711324664, + "accuracy_std": 0.02670956425027978, + "precision_mean": 0.8339598997493735, + "precision_std": 0.1326617340600562, + "recall_mean": 0.9309134906231094, + "recall_std": 0.09135023416434847, + "f1_mean": 0.8425857181166915, + "f1_std": 0.08101827820431802 + }, + "biodist": { + "kl_divergence_mean": 0.2612869586441918, + "kl_divergence_std": 0.14203850605710744, + "js_divergence_mean": 0.06314595981555801, + "js_divergence_std": 0.03467433612718449 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/local_uncommitted.patch b/models/abl_full/s3_biot5/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_0/best_params.json b/models/abl_full/s3_biot5/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..972eaa9 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_0/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.36120126405768543, + "lr": 0.0009943285546676244, + "weight_decay": 0.004534870859101433, + "backbone_lr_ratio": 0.09819347379144983, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s3_biot5/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..9c322f6 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 8} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_0/history.json b/models/abl_full/s3_biot5/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..abe30b5 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_0/history.json @@ -0,0 +1,174 @@ +{ + "train": [ + { + "loss": 5.134456290139092, + "loss_size": 0.5926392219132848, + "loss_pdi": 0.682026250494851, + "loss_ee": 1.061998085843192, + "loss_delivery": 1.0510077741410997, + "loss_biodist": 1.1512646244631872, + "loss_toxic": 0.607572595278422 + }, + { + "loss": 4.484073705143398, + "loss_size": 0.7406690749857161, + "loss_pdi": 0.6571276717715793, + "loss_ee": 0.9686582187811533, + "loss_delivery": 0.974076449043221, + "loss_biodist": 0.738115002711614, + "loss_toxic": 0.42847016122606063 + }, + { + "loss": 3.879401789771186, + "loss_size": 0.785791071338786, + "loss_pdi": 0.608721223142412, + "loss_ee": 0.9247000482347276, + "loss_delivery": 0.8264015027218394, + "loss_biodist": 0.43167321218384636, + "loss_toxic": 0.3228144471844037 + }, + { + "loss": 3.5380964279174805, + "loss_size": 0.7234913955132166, + "loss_pdi": 0.5770279467105865, + "loss_ee": 0.8817546202076806, + "loss_delivery": 0.9317294574446149, + "loss_biodist": 0.28448913991451263, + "loss_toxic": 0.16476022659076583 + }, + { + "loss": 3.173352082570394, + "loss_size": 0.6876770953337351, + "loss_pdi": 0.5320529192686081, + "loss_ee": 0.8194798794057634, + "loss_delivery": 0.8194607074062029, + "loss_biodist": 0.23754879211386046, + "loss_toxic": 0.10021763232847054 + }, + { + "loss": 3.290941741731432, + "loss_size": 0.7561133421129651, + "loss_pdi": 0.5157531185282601, + "loss_ee": 0.7996398939026726, + "loss_delivery": 0.9228444306386842, + "loss_biodist": 0.22005567534102333, + "loss_toxic": 0.10507579303036134 + }, + { + "loss": 3.0617527961730957, + "loss_size": 0.7230907529592514, + "loss_pdi": 0.48917194373077816, + "loss_ee": 0.7743528617752923, + "loss_delivery": 0.7992851783831915, + "loss_biodist": 0.18584619462490082, + "loss_toxic": 0.11408223967171377 + }, + { + "loss": 2.880976233217451, + "loss_size": 0.721924338903692, + "loss_pdi": 0.4804530524545246, + "loss_ee": 0.7487788481844796, + "loss_delivery": 0.6577635962102149, + "loss_biodist": 0.190216193596522, + "loss_toxic": 0.1017316372340752 + } + ], + "val": [ + { + "loss": 4.311466058095296, + "loss_size": 0.3766769606154412, + "loss_pdi": 0.7066917816797892, + "loss_ee": 1.01579753557841, + "loss_delivery": 0.5817607368032137, + "loss_biodist": 1.0006053447723389, + "loss_toxic": 0.65352863073349, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.8 + }, + { + "loss": 3.7185896237691245, + "loss_size": 0.37106954228753847, + "loss_pdi": 0.7938916881879171, + "loss_ee": 0.8914792736371359, + "loss_delivery": 0.5315878093242645, + "loss_biodist": 0.5546096364657084, + "loss_toxic": 0.5998180309931437, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 3.6967700322469077, + "loss_size": 0.3408985783656438, + "loss_pdi": 0.9561855792999268, + "loss_ee": 0.8029743234316508, + "loss_delivery": 0.516589067876339, + "loss_biodist": 0.3482811947663625, + "loss_toxic": 0.7576993107795715, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.7849678993225098, + "loss_size": 0.34107857445875805, + "loss_pdi": 1.068358600139618, + "loss_ee": 0.6928516154487928, + "loss_delivery": 0.5808670669794083, + "loss_biodist": 0.2510837639371554, + "loss_toxic": 0.8746471752723058, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.850276549657186, + "loss_size": 0.3799547503391902, + "loss_pdi": 1.174236575762431, + "loss_ee": 0.6735533153017362, + "loss_delivery": 0.5763809730609258, + "loss_biodist": 0.22724919393658638, + "loss_toxic": 0.8445519929130872, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.7286954720815024, + "loss_size": 0.3991684863964717, + "loss_pdi": 1.2386419971783955, + "loss_ee": 0.6731353253126144, + "loss_delivery": 0.5923327108224233, + "loss_biodist": 0.17962136988838515, + "loss_toxic": 0.6764415204524994, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.9 + }, + { + "loss": 3.6530116399129233, + "loss_size": 0.4060150782267253, + "loss_pdi": 1.2516757448514302, + "loss_ee": 0.6774595640599728, + "loss_delivery": 0.5849624822537104, + "loss_biodist": 0.19719474638501802, + "loss_toxic": 0.570046958203117, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + }, + { + "loss": 3.6504185994466147, + "loss_size": 0.4134421149889628, + "loss_pdi": 1.2544621030489604, + "loss_ee": 0.6817407533526421, + "loss_delivery": 0.565689280629158, + "loss_biodist": 0.19334064175685248, + "loss_toxic": 0.5756473684062561, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.9 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_0/splits.json b/models/abl_full/s3_biot5/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s3_biot5/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..3458d43 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.455186983895059, + "rmse": 1.2063113130096472, + "mae": 0.5686195082064852, + "r2": 0.10938974657104639 + }, + "delivery": { + "n_samples": 58, + "mse": 0.657963240459347, + "rmse": 0.8111493330203428, + "mae": 0.6435203616475237, + "r2": 0.16368901729680851 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6752136752136753, + "recall": 0.7191732002851033, + "f1": 0.6676810712111991 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.6959027993510752, + "recall": 0.7547619047619047, + "f1": 0.7078250840566112 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.2596632373195518, + "js_divergence": 0.050668348241854885 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_1/best_params.json b/models/abl_full/s3_biot5/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..2b2bad2 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_1/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.16065362373053327, + "lr": 0.0003827125972903083, + "weight_decay": 0.0010457496747445269, + "backbone_lr_ratio": 0.018093644223914483, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s3_biot5/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..0af0e3e --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 16} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_1/history.json b/models/abl_full/s3_biot5/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..bccfd81 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_1/history.json @@ -0,0 +1,342 @@ +{ + "train": [ + { + "loss": 5.74450699488322, + "loss_size": 1.244999586708016, + "loss_pdi": 0.687405933936437, + "loss_ee": 1.049346490038766, + "loss_delivery": 0.9355419394042757, + "loss_biodist": 1.1975946426391602, + "loss_toxic": 0.634956396288342 + }, + { + "loss": 4.852819336785211, + "loss_size": 0.856327585875988, + "loss_pdi": 0.660250206788381, + "loss_ee": 0.9871283802721236, + "loss_delivery": 0.8475907974772983, + "loss_biodist": 0.9653918213314481, + "loss_toxic": 0.5491642554601034 + }, + { + "loss": 4.6862548854615955, + "loss_size": 1.143327189816369, + "loss_pdi": 0.6343820227517022, + "loss_ee": 0.9440895451439751, + "loss_delivery": 0.7994353729817603, + "loss_biodist": 0.7292244533697764, + "loss_toxic": 0.45129018194145626 + }, + { + "loss": 4.3050122658411665, + "loss_size": 1.1146142342024379, + "loss_pdi": 0.6204807096057467, + "loss_ee": 0.8941047257847257, + "loss_delivery": 0.7706604815191693, + "loss_biodist": 0.5523247453901503, + "loss_toxic": 0.36798889769448173 + }, + { + "loss": 3.8301688697603016, + "loss_size": 0.7325109185443984, + "loss_pdi": 0.5998438662952847, + "loss_ee": 0.8684192001819611, + "loss_delivery": 0.8599779158830643, + "loss_biodist": 0.4726476768652598, + "loss_toxic": 0.31074950844049454 + }, + { + "loss": 3.967061850759718, + "loss_size": 1.11394256601731, + "loss_pdi": 0.5839571605126063, + "loss_ee": 0.834775275654263, + "loss_delivery": 0.8020654800865386, + "loss_biodist": 0.393103720413314, + "loss_toxic": 0.2546963240537379 + }, + { + "loss": 3.7419747644000583, + "loss_size": 1.0614000434676807, + "loss_pdi": 0.5619734691249, + "loss_ee": 0.8105353878604041, + "loss_delivery": 0.7809083196851943, + "loss_biodist": 0.33492931806378895, + "loss_toxic": 0.2077283039689064 + }, + { + "loss": 3.6789219114515515, + "loss_size": 1.052630850010448, + "loss_pdi": 0.5477499514818192, + "loss_ee": 0.795405752129025, + "loss_delivery": 0.8184272448221842, + "loss_biodist": 0.304640445444319, + "loss_toxic": 0.177426898231109 + }, + { + "loss": 3.429939217037625, + "loss_size": 0.9850862994790077, + "loss_pdi": 0.5186284780502319, + "loss_ee": 0.7686234381463792, + "loss_delivery": 0.7167264272769293, + "loss_biodist": 0.2647647062937419, + "loss_toxic": 0.1915500308904383 + }, + { + "loss": 3.3812325729264154, + "loss_size": 1.0171198836631246, + "loss_pdi": 0.49914656910631394, + "loss_ee": 0.7518894937303331, + "loss_delivery": 0.7484977067344718, + "loss_biodist": 0.22718746297889286, + "loss_toxic": 0.1545559254785379 + }, + { + "loss": 3.4015745719273887, + "loss_size": 1.0067216199305322, + "loss_pdi": 0.49295658038722145, + "loss_ee": 0.7741719053851234, + "loss_delivery": 0.7554860512415568, + "loss_biodist": 0.23504611435863706, + "loss_toxic": 0.15650354139506817 + }, + { + "loss": 3.2821761104795666, + "loss_size": 0.9331918896900283, + "loss_pdi": 0.49126682844426894, + "loss_ee": 0.76547352804078, + "loss_delivery": 0.7605470559663243, + "loss_biodist": 0.22692520212796, + "loss_toxic": 0.1249045811386572 + }, + { + "loss": 3.1671065158314176, + "loss_size": 0.9552405857377582, + "loss_pdi": 0.4923471096489165, + "loss_ee": 0.7192365179459254, + "loss_delivery": 0.6551926740341716, + "loss_biodist": 0.21940930601623324, + "loss_toxic": 0.14329656886143816 + }, + { + "loss": 3.2490438421567283, + "loss_size": 1.0167642715904448, + "loss_pdi": 0.48426752620273167, + "loss_ee": 0.7295333395401636, + "loss_delivery": 0.6935455467965868, + "loss_biodist": 0.21475926041603088, + "loss_toxic": 0.12986919739180142 + }, + { + "loss": 3.3091213173336453, + "loss_size": 0.9846939858463075, + "loss_pdi": 0.5014325959814919, + "loss_ee": 0.7332563764519162, + "loss_delivery": 0.7507173890868822, + "loss_biodist": 0.21717913366026348, + "loss_toxic": 0.14272746526532704 + }, + { + "loss": 3.0355032947328358, + "loss_size": 0.7039011460211542, + "loss_pdi": 0.5061149597167969, + "loss_ee": 0.7458481887976328, + "loss_delivery": 0.7541388339466519, + "loss_biodist": 0.22092421021726397, + "loss_toxic": 0.12397784894953172 + } + ], + "val": [ + { + "loss": 3.792435089747111, + "loss_size": 0.4787151246484124, + "loss_pdi": 0.6469978094100952, + "loss_ee": 0.9969024658203125, + "loss_delivery": 0.27635689576466876, + "loss_biodist": 0.8766662875811259, + "loss_toxic": 0.5226969718933105, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 3.2050705750783286, + "loss_size": 0.4514176577019195, + "loss_pdi": 0.6261960864067078, + "loss_ee": 0.9002314408620199, + "loss_delivery": 0.20602107583545148, + "loss_biodist": 0.6296464304129282, + "loss_toxic": 0.3963288565476735, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.743619163831075, + "loss_size": 0.4213643887390693, + "loss_pdi": 0.6193778812885284, + "loss_ee": 0.841147263844808, + "loss_delivery": 0.21879234910011292, + "loss_biodist": 0.40848591923713684, + "loss_toxic": 0.23517069220542908, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.4995402097702026, + "loss_size": 0.4061935320496559, + "loss_pdi": 0.5932995776335398, + "loss_ee": 0.7550861438115438, + "loss_delivery": 0.3075169324874878, + "loss_biodist": 0.3083999703327815, + "loss_toxic": 0.12742901841799417, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.4822678565979004, + "loss_size": 0.422980859875679, + "loss_pdi": 0.5893671214580536, + "loss_ee": 0.6902795433998108, + "loss_delivery": 0.4003771146138509, + "loss_biodist": 0.3025292803843816, + "loss_toxic": 0.07643153953055541, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.449392557144165, + "loss_size": 0.43963945905367535, + "loss_pdi": 0.6005929609139761, + "loss_ee": 0.6532433927059174, + "loss_delivery": 0.395735631386439, + "loss_biodist": 0.30700069665908813, + "loss_toxic": 0.054643504011134304, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3934797445933023, + "loss_size": 0.44205203155676526, + "loss_pdi": 0.6044122080008189, + "loss_ee": 0.6267981926600138, + "loss_delivery": 0.3771698276201884, + "loss_biodist": 0.3092842251062393, + "loss_toxic": 0.03700013101721803, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3316369454065957, + "loss_size": 0.4121408015489578, + "loss_pdi": 0.6191647052764893, + "loss_ee": 0.6392259001731873, + "loss_delivery": 0.33251280585924786, + "loss_biodist": 0.3055846070249875, + "loss_toxic": 0.028408002263555925, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3395246267318726, + "loss_size": 0.4185730069875717, + "loss_pdi": 0.6298844814300537, + "loss_ee": 0.6163119971752167, + "loss_delivery": 0.35298120975494385, + "loss_biodist": 0.30635526527961093, + "loss_toxic": 0.022789270461847384, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3269131183624268, + "loss_size": 0.402207612991333, + "loss_pdi": 0.6320225397745768, + "loss_ee": 0.6283045808474222, + "loss_delivery": 0.34505655368169147, + "loss_biodist": 0.3072126085559527, + "loss_toxic": 0.021278114058077335, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.306652228037516, + "loss_size": 0.40383147199948627, + "loss_pdi": 0.623699963092804, + "loss_ee": 0.6138593653837839, + "loss_delivery": 0.3424276113510132, + "loss_biodist": 0.31763167679309845, + "loss_toxic": 0.015255675185471773, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.311849315961202, + "loss_size": 0.4097662717103958, + "loss_pdi": 0.6233347555001577, + "loss_ee": 0.5915290911992391, + "loss_delivery": 0.3701024154822032, + "loss_biodist": 0.31468579173088074, + "loss_toxic": 0.013259835929299394, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.3101778427759805, + "loss_size": 0.41092900435129803, + "loss_pdi": 0.637591669956843, + "loss_ee": 0.5939464966456095, + "loss_delivery": 0.3522563874721527, + "loss_biodist": 0.3136734714110692, + "loss_toxic": 0.013307037996128201, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.28903337319692, + "loss_size": 0.40902849038441974, + "loss_pdi": 0.6323841909567515, + "loss_ee": 0.5890713234742483, + "loss_delivery": 0.339587797721227, + "loss_biodist": 0.31771931797266006, + "loss_toxic": 0.012644858177130422, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.298385659853617, + "loss_size": 0.4320973704258601, + "loss_pdi": 0.6271213889122009, + "loss_ee": 0.5890949467817942, + "loss_delivery": 0.3377600808938344, + "loss_biodist": 0.311499963204066, + "loss_toxic": 0.012359853445862731, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + }, + { + "loss": 2.2913973728815713, + "loss_size": 0.4155810823043187, + "loss_pdi": 0.6289720435937246, + "loss_ee": 0.59339706103007, + "loss_delivery": 0.34760451316833496, + "loss_biodist": 0.3059312825401624, + "loss_toxic": 0.0116437211787949, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.7575757575757576, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_1/splits.json b/models/abl_full/s3_biot5/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s3_biot5/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..0540d17 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.3409589679976698, + "rmse": 0.583916918745869, + "mae": 0.45027055373897645, + "r2": -0.04116746962026441 + }, + "delivery": { + "n_samples": 61, + "mse": 1.1068753279267725, + "rmse": 1.0520814264717215, + "mae": 0.6685854428921079, + "r2": 0.16217517021941497 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.5886939571150097, + "recall": 0.6031746031746031, + "f1": 0.5916666666666667 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5357142857142857, + "precision": 0.46129309287204023, + "recall": 0.46282289139432, + "f1": 0.45226267984888674 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.2958067591273321, + "js_divergence": 0.07873601208459458 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_2/best_params.json b/models/abl_full/s3_biot5/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..a534117 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_2/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.21582761240051862, + "lr": 0.0009868479883958295, + "weight_decay": 0.09203244519568063, + "backbone_lr_ratio": 0.5839980659600624, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s3_biot5/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..9c322f6 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 8} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_2/history.json b/models/abl_full/s3_biot5/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..06afd15 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_2/history.json @@ -0,0 +1,174 @@ +{ + "train": [ + { + "loss": 5.205608858002557, + "loss_size": 0.8596560632189115, + "loss_pdi": 0.6950723065270318, + "loss_ee": 1.04819941189554, + "loss_delivery": 0.9894277966684766, + "loss_biodist": 1.0626857115162744, + "loss_toxic": 0.5643642991781235 + }, + { + "loss": 4.189070290989346, + "loss_size": 0.7911380082368851, + "loss_pdi": 0.6421096788512336, + "loss_ee": 0.9634458522001902, + "loss_delivery": 0.8081452465719647, + "loss_biodist": 0.6456678691837523, + "loss_toxic": 0.3603792132602798 + }, + { + "loss": 3.693140162361993, + "loss_size": 0.7771964917580286, + "loss_pdi": 0.606373644537396, + "loss_ee": 0.8728714618417952, + "loss_delivery": 0.7693305810292562, + "loss_biodist": 0.45120348864131504, + "loss_toxic": 0.24005808474289048 + }, + { + "loss": 3.6371556520462036, + "loss_size": 0.8380425406826867, + "loss_pdi": 0.5874518305063248, + "loss_ee": 0.855892171462377, + "loss_delivery": 0.8499362708793746, + "loss_biodist": 0.35302433205975425, + "loss_toxic": 0.18494211851308742 + }, + { + "loss": 3.123739971054925, + "loss_size": 0.7027281994620959, + "loss_pdi": 0.5046584705511729, + "loss_ee": 0.7659490870104896, + "loss_delivery": 0.8249366208910942, + "loss_biodist": 0.26605237689283157, + "loss_toxic": 0.08778342043256594 + }, + { + "loss": 2.7948334018389382, + "loss_size": 0.6255374376972517, + "loss_pdi": 0.49100328650739455, + "loss_ee": 0.7221563673681684, + "loss_delivery": 0.6909683446089426, + "loss_biodist": 0.2037835137711631, + "loss_toxic": 0.08548967835182945 + }, + { + "loss": 2.5858742462264166, + "loss_size": 0.5656783820854293, + "loss_pdi": 0.4778153879774941, + "loss_ee": 0.6305689348114861, + "loss_delivery": 0.6540086873703532, + "loss_biodist": 0.19913623688949478, + "loss_toxic": 0.07857713783677253 + }, + { + "loss": 2.2975318961673312, + "loss_size": 0.4641274760166804, + "loss_pdi": 0.41271130906211007, + "loss_ee": 0.6499402655495538, + "loss_delivery": 0.5275735143158171, + "loss_biodist": 0.19007262794507873, + "loss_toxic": 0.06773341770490839 + } + ], + "val": [ + { + "loss": 7.524101972579956, + "loss_size": 3.433514575163523, + "loss_pdi": 0.69611789782842, + "loss_ee": 1.201956291993459, + "loss_delivery": 1.3856913795073826, + "loss_biodist": 0.5558517376581827, + "loss_toxic": 0.30123483141263324, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.95 + }, + { + "loss": 7.03015661239624, + "loss_size": 3.385285238424937, + "loss_pdi": 0.6603805820147196, + "loss_ee": 1.2173503438631694, + "loss_delivery": 1.3574435810248058, + "loss_biodist": 0.3431905011336009, + "loss_toxic": 0.13147871692975363, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 6.768274545669556, + "loss_size": 3.377841701110204, + "loss_pdi": 0.649711807568868, + "loss_ee": 1.1461957891782124, + "loss_delivery": 1.3183811108271282, + "loss_biodist": 0.26559250553448993, + "loss_toxic": 0.09187134355306625, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 6.736390590667725, + "loss_size": 3.584103266398112, + "loss_pdi": 0.6175831953684489, + "loss_ee": 1.149601678053538, + "loss_delivery": 1.2314526736736298, + "loss_biodist": 0.15284614264965057, + "loss_toxic": 0.0913150484363238, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 5.903022766113281, + "loss_size": 2.9109666645526886, + "loss_pdi": 0.6325104137261709, + "loss_ee": 1.037282148996989, + "loss_delivery": 1.1939074496428173, + "loss_biodist": 0.12611671288808188, + "loss_toxic": 0.08607440441846848, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.67532475789388, + "loss_size": 3.4338259994983673, + "loss_pdi": 0.7378036777178446, + "loss_ee": 1.1577109893163045, + "loss_delivery": 1.2553395827611287, + "loss_biodist": 0.11471599092086156, + "loss_toxic": 0.07991148329650362, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.95 + }, + { + "loss": 6.335200309753418, + "loss_size": 3.1091595888137817, + "loss_pdi": 0.6983328859011332, + "loss_ee": 1.13884033759435, + "loss_delivery": 1.2790675163269043, + "loss_biodist": 0.13619191447893778, + "loss_toxic": 0.07347698633869489, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + }, + { + "loss": 6.265249967575073, + "loss_size": 3.1018802920977273, + "loss_pdi": 0.7165749867757162, + "loss_ee": 1.1332438389460247, + "loss_delivery": 1.2073686321576436, + "loss_biodist": 0.13073434432347616, + "loss_toxic": 0.07346683057645957, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_2/splits.json b/models/abl_full/s3_biot5/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s3_biot5/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..c9490b3 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.4175255522433261, + "rmse": 0.6461621717830023, + "mae": 0.46772397933195214, + "r2": 0.1753944942347141 + }, + "delivery": { + "n_samples": 60, + "mse": 0.5916828875801762, + "rmse": 0.7692092612418133, + "mae": 0.5171970275618757, + "r2": 0.2123675238445204 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6503347534996957, + "recall": 0.6810850439882699, + "f1": 0.6554552912223134 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6424501424501424, + "recall": 0.7103174603174603, + "f1": 0.6601851851851852 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9180327868852459, + "precision": 0.6875, + "recall": 0.9568965517241379, + "f1": 0.7502047502047502 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.16762949265428556, + "js_divergence": 0.04296474968084666 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_3/best_params.json b/models/abl_full/s3_biot5/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..7847019 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_3/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.34828519345906805, + "lr": 0.0004833716789421718, + "weight_decay": 0.011208992423316006, + "backbone_lr_ratio": 0.049467723646538654, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s3_biot5/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..82d35d4 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 14} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_3/history.json b/models/abl_full/s3_biot5/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..de5c1d5 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_3/history.json @@ -0,0 +1,300 @@ +{ + "train": [ + { + "loss": 5.143805159462823, + "loss_size": 0.5373324255148569, + "loss_pdi": 0.6748173402415382, + "loss_ee": 1.0937603049808078, + "loss_delivery": 0.9246428973144956, + "loss_biodist": 1.25449628300137, + "loss_toxic": 0.6660070187515683 + }, + { + "loss": 4.673279682795207, + "loss_size": 0.480872906330559, + "loss_pdi": 0.6591882672574785, + "loss_ee": 1.0512664516766865, + "loss_delivery": 0.8922622435622745, + "loss_biodist": 1.0410734547509088, + "loss_toxic": 0.5661088360680474 + }, + { + "loss": 4.16486914952596, + "loss_size": 0.4790949101249377, + "loss_pdi": 0.63458584745725, + "loss_ee": 1.0232787397172716, + "loss_delivery": 0.7660587289267116, + "loss_biodist": 0.8203943239318, + "loss_toxic": 0.4613314734564887 + }, + { + "loss": 3.8674900929133096, + "loss_size": 0.4411560748186376, + "loss_pdi": 0.6086067524221208, + "loss_ee": 0.9737700985537635, + "loss_delivery": 0.8867345410916541, + "loss_biodist": 0.6058569451173147, + "loss_toxic": 0.37028054810232586 + }, + { + "loss": 3.582075556119283, + "loss_size": 0.4696706400977241, + "loss_pdi": 0.5940259910292096, + "loss_ee": 0.9490517907672458, + "loss_delivery": 0.869463238451216, + "loss_biodist": 0.462047826912668, + "loss_toxic": 0.2541286192006535 + }, + { + "loss": 3.438481648763021, + "loss_size": 0.46740900973478955, + "loss_pdi": 0.5871867189804713, + "loss_ee": 0.8961273498005338, + "loss_delivery": 0.8416304902897941, + "loss_biodist": 0.45480697933170533, + "loss_toxic": 0.20800557360053062 + }, + { + "loss": 3.2350238694085016, + "loss_size": 0.44749943084186977, + "loss_pdi": 0.5303817590077718, + "loss_ee": 0.8858637577957578, + "loss_delivery": 0.823937653667397, + "loss_biodist": 0.4103195360965199, + "loss_toxic": 0.15332972030672762 + }, + { + "loss": 3.1007592413160534, + "loss_size": 0.42707579334576923, + "loss_pdi": 0.5660466502110163, + "loss_ee": 0.8621865014235178, + "loss_delivery": 0.6925753661327891, + "loss_biodist": 0.39570532904730904, + "loss_toxic": 0.173800609798895 + }, + { + "loss": 3.036324057314131, + "loss_size": 0.4268115998970138, + "loss_pdi": 0.5127967629167769, + "loss_ee": 0.8324930204285516, + "loss_delivery": 0.7941775040494071, + "loss_biodist": 0.35138627886772156, + "loss_toxic": 0.13570888143860632 + }, + { + "loss": 2.997904512617323, + "loss_size": 0.42026829967896145, + "loss_pdi": 0.5052520914210213, + "loss_ee": 0.818364656633801, + "loss_delivery": 0.796693848239051, + "loss_biodist": 0.3356085485882229, + "loss_toxic": 0.13933175202045175 + }, + { + "loss": 2.965634372499254, + "loss_size": 0.42366551276710296, + "loss_pdi": 0.5104654547240999, + "loss_ee": 0.7946207688914405, + "loss_delivery": 0.7854959335592058, + "loss_biodist": 0.3117079296045833, + "loss_toxic": 0.15674477143006194 + }, + { + "loss": 2.8551157315572104, + "loss_size": 0.4142034351825714, + "loss_pdi": 0.503616503543324, + "loss_ee": 0.7724204593234592, + "loss_delivery": 0.7852109240161048, + "loss_biodist": 0.28903448002205956, + "loss_toxic": 0.10778713329798645 + }, + { + "loss": 2.872894161277347, + "loss_size": 0.40143640091021854, + "loss_pdi": 0.5070408003197776, + "loss_ee": 0.7846290502283308, + "loss_delivery": 0.794930880682336, + "loss_biodist": 0.28276868330107796, + "loss_toxic": 0.12016090978350905 + }, + { + "loss": 2.7558568120002747, + "loss_size": 0.4158237932456864, + "loss_pdi": 0.49284104506174725, + "loss_ee": 0.7882199651665158, + "loss_delivery": 0.6639567332135307, + "loss_biodist": 0.3067050195402569, + "loss_toxic": 0.10459281659374635 + } + ], + "val": [ + { + "loss": 5.769057790438334, + "loss_size": 2.2050774320960045, + "loss_pdi": 0.6599070231119791, + "loss_ee": 1.0268221298853557, + "loss_delivery": 0.8002089361349741, + "loss_biodist": 0.7230390906333923, + "loss_toxic": 0.36391552289326984, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 5.419292171796163, + "loss_size": 2.222287322084109, + "loss_pdi": 0.6454710761706034, + "loss_ee": 0.917282223701477, + "loss_delivery": 0.7580427577098211, + "loss_biodist": 0.5415765245755514, + "loss_toxic": 0.34792401393254596, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 5.1561001141866045, + "loss_size": 2.247951259215673, + "loss_pdi": 0.6430793404579163, + "loss_ee": 0.844984769821167, + "loss_delivery": 0.7508849948644638, + "loss_biodist": 0.3861488898595174, + "loss_toxic": 0.2954038381576538, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.7575757575757576, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.979605754216512, + "loss_size": 2.3761579195658364, + "loss_pdi": 0.639975925286611, + "loss_ee": 0.7327792346477509, + "loss_delivery": 0.7737427055835724, + "loss_biodist": 0.23577102025349936, + "loss_toxic": 0.2273117502530416, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.853756944338481, + "loss_size": 2.3513248761494956, + "loss_pdi": 0.6131516893704733, + "loss_ee": 0.6792342762152354, + "loss_delivery": 0.7596632242202759, + "loss_biodist": 0.23701879382133484, + "loss_toxic": 0.2176358997821808, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.69988473256429, + "loss_size": 2.264869620402654, + "loss_pdi": 0.5808791915575663, + "loss_ee": 0.6565108398596445, + "loss_delivery": 0.7339032789071401, + "loss_biodist": 0.24357972542444864, + "loss_toxic": 0.22373420000076294, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.714042584101359, + "loss_size": 2.2548497319221497, + "loss_pdi": 0.5930370489756266, + "loss_ee": 0.6508887112140656, + "loss_delivery": 0.7236940860748291, + "loss_biodist": 0.23831879099210104, + "loss_toxic": 0.25665928920110065, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.653831084569295, + "loss_size": 2.267926270763079, + "loss_pdi": 0.5525973637898763, + "loss_ee": 0.6344220042228699, + "loss_delivery": 0.7010429203510284, + "loss_biodist": 0.23465038339296976, + "loss_toxic": 0.2639862795670827, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.646187424659729, + "loss_size": 2.2546125253041587, + "loss_pdi": 0.5662389596303304, + "loss_ee": 0.6295912762482961, + "loss_delivery": 0.6963233252366384, + "loss_biodist": 0.23694100975990295, + "loss_toxic": 0.2633620897928874, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.638806780179341, + "loss_size": 2.254671593507131, + "loss_pdi": 0.559669295946757, + "loss_ee": 0.6260634064674377, + "loss_delivery": 0.7031502922375997, + "loss_biodist": 0.23651681343714395, + "loss_toxic": 0.25913023948669434, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.60017466545105, + "loss_size": 2.2478468865156174, + "loss_pdi": 0.5510533054669698, + "loss_ee": 0.6289563179016113, + "loss_delivery": 0.6861385405063629, + "loss_biodist": 0.22732292612393698, + "loss_toxic": 0.258315642674764, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.593336979548137, + "loss_size": 2.2466767728328705, + "loss_pdi": 0.5322003960609436, + "loss_ee": 0.6258041163285574, + "loss_delivery": 0.6966004967689514, + "loss_biodist": 0.22875810662905374, + "loss_toxic": 0.26214324434598285, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.608372608820598, + "loss_size": 2.2505796253681183, + "loss_pdi": 0.5417159795761108, + "loss_ee": 0.6252343058586121, + "loss_delivery": 0.7088958422342936, + "loss_biodist": 0.21872506539026895, + "loss_toxic": 0.2622225185235341, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.611302455266316, + "loss_size": 2.268490637342135, + "loss_pdi": 0.536396712064743, + "loss_ee": 0.6206964552402496, + "loss_delivery": 0.7077163656552633, + "loss_biodist": 0.2216364542643229, + "loss_toxic": 0.2550736169020335, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.7272727272727273, + "acc_toxic": 0.8695652173913043 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_3/splits.json b/models/abl_full/s3_biot5/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s3_biot5/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..710e2d3 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.7307133310877267, + "rmse": 1.315565783641292, + "mae": 0.624267839804202, + "r2": 0.021095348604392883 + }, + "delivery": { + "n_samples": 59, + "mse": 0.7183388426661984, + "rmse": 0.8475487258359831, + "mae": 0.6008900250387141, + "r2": 0.3016892984397991 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6165865384615384, + "recall": 0.6422287390029326, + "f1": 0.6179337231968811 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6275132275132275, + "recall": 0.6534942182001006, + "f1": 0.6330903901253936 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.3472778691473637, + "js_divergence": 0.08908498366865715 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_4/best_params.json b/models/abl_full/s3_biot5/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..74fb382 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_4/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.19855067735079376, + "lr": 0.0009737458085538766, + "weight_decay": 0.0873793743404466, + "backbone_lr_ratio": 0.1323301118513924, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s3_biot5/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..9c322f6 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 8} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_4/history.json b/models/abl_full/s3_biot5/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..a48d307 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_4/history.json @@ -0,0 +1,174 @@ +{ + "train": [ + { + "loss": 5.356312288178338, + "loss_size": 1.1483653576837645, + "loss_pdi": 0.6915714707639482, + "loss_ee": 1.0641863081190321, + "loss_delivery": 0.8506392074955834, + "loss_biodist": 1.0332666801081762, + "loss_toxic": 0.5815036445856094 + }, + { + "loss": 4.458085497220357, + "loss_size": 1.0649780370295048, + "loss_pdi": 0.6285979515976376, + "loss_ee": 0.9600657224655151, + "loss_delivery": 0.8235585283901956, + "loss_biodist": 0.6210369517405828, + "loss_toxic": 0.38262884732749725 + }, + { + "loss": 3.8573156860139637, + "loss_size": 1.045414359205299, + "loss_pdi": 0.5853341718514761, + "loss_ee": 0.8562841051154666, + "loss_delivery": 0.7458280324935913, + "loss_biodist": 0.40625907563500935, + "loss_toxic": 0.24046062098609078 + }, + { + "loss": 3.555015206336975, + "loss_size": 1.0004351089398067, + "loss_pdi": 0.5790170911285613, + "loss_ee": 0.8093414836459689, + "loss_delivery": 0.7055584738651911, + "loss_biodist": 0.3062741623984443, + "loss_toxic": 0.1803631985353099 + }, + { + "loss": 3.0565633376439414, + "loss_size": 0.9030418420831362, + "loss_pdi": 0.5295060508781009, + "loss_ee": 0.7614735497368706, + "loss_delivery": 0.5554603230622079, + "loss_biodist": 0.23803851753473282, + "loss_toxic": 0.09083098695716924 + }, + { + "loss": 2.9884926875432334, + "loss_size": 0.8214494105842378, + "loss_pdi": 0.49878033995628357, + "loss_ee": 0.7490900953610738, + "loss_delivery": 0.6467898984750112, + "loss_biodist": 0.19877772943841088, + "loss_toxic": 0.09713902003649208 + }, + { + "loss": 2.93084270424313, + "loss_size": 0.8355337700082196, + "loss_pdi": 0.483965122865306, + "loss_ee": 0.7635665734608968, + "loss_delivery": 0.6066722874012258, + "loss_biodist": 0.18997766450047493, + "loss_toxic": 0.07632380584254861 + }, + { + "loss": 2.7660585840543113, + "loss_size": 0.8263149965140555, + "loss_pdi": 0.4905700551138984, + "loss_ee": 0.7105636994043986, + "loss_delivery": 0.5128629348344274, + "loss_biodist": 0.17787945891420046, + "loss_toxic": 0.06911703168104093 + } + ], + "val": [ + { + "loss": 4.311645905176799, + "loss_size": 0.6761404722929001, + "loss_pdi": 0.6328997214635214, + "loss_ee": 0.9421179493268331, + "loss_delivery": 0.656822137379398, + "loss_biodist": 0.9065945347150167, + "loss_toxic": 0.5158622960249583, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.563213030497233, + "loss_size": 0.5077676127354304, + "loss_pdi": 0.5488789677619934, + "loss_ee": 0.7365255753199259, + "loss_delivery": 0.6567995542184993, + "loss_biodist": 0.6504547894001007, + "loss_toxic": 0.47706348448991776, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.1338044007619223, + "loss_size": 0.395975003639857, + "loss_pdi": 0.4664340317249298, + "loss_ee": 0.6601237704356512, + "loss_delivery": 0.6767638809978962, + "loss_biodist": 0.38021591305732727, + "loss_toxic": 0.5580367594957352, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.227930784225464, + "loss_size": 0.4129555324713389, + "loss_pdi": 0.4271622995535533, + "loss_ee": 0.6398155316710472, + "loss_delivery": 0.6973200092713038, + "loss_biodist": 0.1896363099416097, + "loss_toxic": 0.8545619981984297, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.8718036810557046, + "loss_size": 0.3531857281923294, + "loss_pdi": 0.3803909694155057, + "loss_ee": 0.6375304609537125, + "loss_delivery": 0.7740727265675863, + "loss_biodist": 0.13061377654472986, + "loss_toxic": 0.5917687422285477, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.696483095486959, + "loss_size": 0.3003964126110077, + "loss_pdi": 0.39366820206244785, + "loss_ee": 0.6245720585187277, + "loss_delivery": 0.7829093591620525, + "loss_biodist": 0.1178439309199651, + "loss_toxic": 0.47549466354151565, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.6850845416386924, + "loss_size": 0.35300640265146893, + "loss_pdi": 0.411489633222421, + "loss_ee": 0.6222584980229536, + "loss_delivery": 0.779989113410314, + "loss_biodist": 0.11674035340547562, + "loss_toxic": 0.40390451221416396, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 2.6714081366856894, + "loss_size": 0.33070053656895954, + "loss_pdi": 0.40491651246945065, + "loss_ee": 0.6311438083648682, + "loss_delivery": 0.7844246583990753, + "loss_biodist": 0.11533247431119283, + "loss_toxic": 0.4072407546142737, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_4/splits.json b/models/abl_full/s3_biot5/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s3_biot5/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..d296511 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.6823610498253468, + "rmse": 0.8260514813408102, + "mae": 0.467143061653977, + "r2": 0.08691615523471552 + }, + "delivery": { + "n_samples": 58, + "mse": 0.95594764711874, + "rmse": 0.9777257525087186, + "mae": 0.5984285688991177, + "r2": 0.07561440611739534 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.6758977480219112, + "recall": 0.7118768328445748, + "f1": 0.6830188679245284 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6279735019572418, + "recall": 0.676068376068376, + "f1": 0.6401063285071521 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.17553375664728565, + "js_divergence": 0.047453497763602526 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/pip_freeze.txt b/models/abl_full/s3_biot5/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s3_biot5/seed42/repro.txt b/models/abl_full/s3_biot5/seed42/repro.txt new file mode 100644 index 0000000..19a9292 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T05:43:50+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=0 --batch-size 16 --use-mpnn --use-llm --use-rag --rag-top-k 4 --use-soft-prompt --no-llm-freeze --llm-use-lora --llm-model-path models/biot5-plus-base diff --git a/models/abl_full/s3_biot5/seed42/strata_info.json b/models/abl_full/s3_biot5/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s3_biot5/seed42/summary.json b/models/abl_full/s3_biot5/seed42/summary.json new file mode 100644 index 0000000..d9d134e --- /dev/null +++ b/models/abl_full/s3_biot5/seed42/summary.json @@ -0,0 +1,357 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.36120126405768543, + "lr": 0.0009943285546676244, + "weight_decay": 0.004534870859101433, + "backbone_lr_ratio": 0.09819347379144983, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 8, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.455186983895059, + "rmse": 1.2063113130096472, + "mae": 0.5686195082064852, + "r2": 0.10938974657104639 + }, + "delivery": { + "n_samples": 58, + "mse": 0.657963240459347, + "rmse": 0.8111493330203428, + "mae": 0.6435203616475237, + "r2": 0.16368901729680851 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6752136752136753, + "recall": 0.7191732002851033, + "f1": 0.6676810712111991 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.6959027993510752, + "recall": 0.7547619047619047, + "f1": 0.7078250840566112 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.2596632373195518, + "js_divergence": 0.050668348241854885 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.16065362373053327, + "lr": 0.0003827125972903083, + "weight_decay": 0.0010457496747445269, + "backbone_lr_ratio": 0.018093644223914483, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 16, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.3409589679976698, + "rmse": 0.583916918745869, + "mae": 0.45027055373897645, + "r2": -0.04116746962026441 + }, + "delivery": { + "n_samples": 61, + "mse": 1.1068753279267725, + "rmse": 1.0520814264717215, + "mae": 0.6685854428921079, + "r2": 0.16217517021941497 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.5886939571150097, + "recall": 0.6031746031746031, + "f1": 0.5916666666666667 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5357142857142857, + "precision": 0.46129309287204023, + "recall": 0.46282289139432, + "f1": 0.45226267984888674 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.2958067591273321, + "js_divergence": 0.07873601208459458 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.21582761240051862, + "lr": 0.0009868479883958295, + "weight_decay": 0.09203244519568063, + "backbone_lr_ratio": 0.5839980659600624, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 8, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.4175255522433261, + "rmse": 0.6461621717830023, + "mae": 0.46772397933195214, + "r2": 0.1753944942347141 + }, + "delivery": { + "n_samples": 60, + "mse": 0.5916828875801762, + "rmse": 0.7692092612418133, + "mae": 0.5171970275618757, + "r2": 0.2123675238445204 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7023809523809523, + "precision": 0.6503347534996957, + "recall": 0.6810850439882699, + "f1": 0.6554552912223134 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6424501424501424, + "recall": 0.7103174603174603, + "f1": 0.6601851851851852 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9180327868852459, + "precision": 0.6875, + "recall": 0.9568965517241379, + "f1": 0.7502047502047502 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.16762949265428556, + "js_divergence": 0.04296474968084666 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.34828519345906805, + "lr": 0.0004833716789421718, + "weight_decay": 0.011208992423316006, + "backbone_lr_ratio": 0.049467723646538654, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 14, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.7307133310877267, + "rmse": 1.315565783641292, + "mae": 0.624267839804202, + "r2": 0.021095348604392883 + }, + "delivery": { + "n_samples": 59, + "mse": 0.7183388426661984, + "rmse": 0.8475487258359831, + "mae": 0.6008900250387141, + "r2": 0.3016892984397991 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.6165865384615384, + "recall": 0.6422287390029326, + "f1": 0.6179337231968811 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6275132275132275, + "recall": 0.6534942182001006, + "f1": 0.6330903901253936 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.3472778691473637, + "js_divergence": 0.08908498366865715 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.19855067735079376, + "lr": 0.0009737458085538766, + "weight_decay": 0.0873793743404466, + "backbone_lr_ratio": 0.1323301118513924, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 8, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.6823610498253468, + "rmse": 0.8260514813408102, + "mae": 0.467143061653977, + "r2": 0.08691615523471552 + }, + "delivery": { + "n_samples": 58, + "mse": 0.95594764711874, + "rmse": 0.9777257525087186, + "mae": 0.5984285688991177, + "r2": 0.07561440611739534 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.6758977480219112, + "recall": 0.7118768328445748, + "f1": 0.6830188679245284 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6904761904761905, + "precision": 0.6279735019572418, + "recall": 0.676068376068376, + "f1": 0.6401063285071521 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.17553375664728565, + "js_divergence": 0.047453497763602526 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.9253491770098258, + "mse_std": 0.5635209849670987, + "rmse_mean": 0.9156015337041241, + "rmse_std": 0.29499662453743664, + "mae_mean": 0.5156049885471186, + "mae_std": 0.06859721905644692, + "r2_mean": 0.0703256550049209, + "r2_std": 0.07442452395794621 + }, + "delivery": { + "mse_mean": 0.8061615891502468, + "mse_std": 0.1941861553420283, + "rmse_mean": 0.8915428998157159, + "rmse_std": 0.10636186787769025, + "mae_mean": 0.6057242852078679, + "mae_std": 0.05156305156562382, + "r2_mean": 0.18310708318358765, + "r2_std": 0.07387529634285352 + }, + "pdi": { + "accuracy_mean": 0.6904761904761905, + "accuracy_std": 0.022587697572631283, + "precision_mean": 0.6413453344623661, + "precision_std": 0.03407905209553118, + "recall_mean": 0.6715076838590968, + "recall_std": 0.04363499054826829, + "f1_mean": 0.6431511240443177, + "f1_std": 0.03355328448013278 + }, + "ee": { + "accuracy_mean": 0.669047619047619, + "accuracy_std": 0.06917066212539978, + "precision_mean": 0.6110265528287455, + "precision_std": 0.07895636486811598, + "recall_mean": 0.6514929701484322, + "recall_std": 0.10032860777148758, + "f1_mean": 0.6186939335446457, + "f1_std": 0.0872135273694844 + }, + "toxic": { + "accuracy_mean": 0.9467609457288584, + "accuracy_std": 0.018697295798137017, + "precision_mean": 0.7403571428571428, + "precision_std": 0.03799167470563487, + "recall_mean": 0.972046495549218, + "recall_std": 0.009885999763715384, + "f1_mean": 0.8084466888449189, + "f1_std": 0.03946512235537587 + }, + "biodist": { + "kl_divergence_mean": 0.24918222297916376, + "kl_divergence_std": 0.0692551792233217, + "js_divergence_mean": 0.06178151828791116, + "js_divergence_std": 0.018524576017435603 + } + } +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/local_uncommitted.patch b/models/abl_full/s3_molt5/seed42/local_uncommitted.patch new file mode 100644 index 0000000..5396d10 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/local_uncommitted.patch @@ -0,0 +1,647 @@ +diff --git a/lnp_ml/interpretability/token_importance.py b/lnp_ml/interpretability/token_importance.py +index ee0d1d8..605a19b 100644 +--- a/lnp_ml/interpretability/token_importance.py ++++ b/lnp_ml/interpretability/token_importance.py +@@ -40,10 +40,7 @@ BIODIST_ORGANS = ["lymph_nodes", "heart", "liver", "spleen", "lung", "kidney", " + + + def get_token_names(model: Union[LNPModel, LNPModelWithoutMPNN]) -> List[str]: +- if model.use_mpnn: +- names = ["mpnn", "morgan", "maccs", "desc", "comp", "phys", "help", "exp"] +- else: +- names = ["morgan", "maccs", "desc", "comp", "phys", "help", "exp"] ++ names = list(model.token_order) + if getattr(model, "moe", None) is not None: + names.append("moe") + return names +@@ -300,7 +297,8 @@ def plot_token_importance( + vals_sorted = normed[order] + + n_tokens = len(token_names) +- split_idx = 4 if "mpnn" in token_names else 3 ++ _mol_tokens = {"mpnn", "chemeleon", "unimol", "morgan", "maccs", "desc"} ++ split_idx = sum(1 for n in token_names if n in _mol_tokens) + channel_a_set = set(token_names[:split_idx]) + colors = [color_a if n in channel_a_set else color_b for n in names_sorted] + +diff --git a/lnp_ml/modeling/benchmark.py b/lnp_ml/modeling/benchmark.py +index 6ac6b20..af9cba0 100644 +--- a/lnp_ml/modeling/benchmark.py ++++ b/lnp_ml/modeling/benchmark.py +@@ -34,7 +34,7 @@ def find_mpnn_ensemble_paths(base_dir: Path = DEFAULT_MPNN_ENSEMBLE_DIR) -> List + + + from lnp_ml.modeling.models import LNPModel, LNPModelWithoutMPNN +- ++from lnp_ml.utils.seed import set_global_seed + + app = typer.Typer() + +@@ -172,6 +172,8 @@ def train_fold( + early_stopping = EarlyStopping(patience=patience) + + best_val_loss = float("inf") ++ best_val_rmse = 0.0 ++ best_val_r2 = 0.0 + best_state = None + history = [] + +@@ -202,6 +204,8 @@ def train_fold( + + if val_metrics["loss"] < best_val_loss: + best_val_loss = val_metrics["loss"] ++ best_val_rmse = val_metrics.get("rmse", 0) ++ best_val_r2 = val_metrics.get("r2", 0) + best_state = {k: v.cpu().clone() for k, v in model.state_dict().items()} + logger.info(f" -> New best val_loss: {best_val_loss:.4f}") + +@@ -239,8 +243,8 @@ def train_fold( + return { + "fold_idx": fold_idx, + "best_val_loss": best_val_loss, +- "best_val_rmse": history[-1]["val_rmse"] if history else 0, +- "best_val_r2": history[-1]["val_r2"] if history else 0, ++ "best_val_rmse": best_val_rmse, ++ "best_val_r2": best_val_r2, + "epochs_trained": len(history), + } + +@@ -255,6 +259,8 @@ def create_model( + use_mpnn: bool = False, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + ) -> nn.Module: + """创建模型实例""" + if use_mpnn: +@@ -267,6 +273,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=mpnn_ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + else: + return LNPModelWithoutMPNN( +@@ -276,6 +284,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + ) + + +@@ -295,12 +305,18 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, + weight_decay: float = 1e-5, + epochs: int = 50, + patience: int = 10, ++ # 随机种子 ++ seed: int = 42, + # 设备 + device: str = "cuda" if torch.cuda.is_available() else "cpu", + ): +@@ -311,6 +327,8 @@ def main( + 使用 --use-mpnn 启用 MPNN encoder。 + """ + logger.info(f"Using device: {device}") ++ set_global_seed(seed) ++ logger.info(f"Global seed set to {seed}") + device = torch.device(device) + + # 解析 MPNN 参数 +@@ -349,6 +367,11 @@ def main( + "dropout": dropout, + "use_mpnn": use_mpnn, + "mpnn_ensemble_paths": mpnn_paths, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, ++ "seed": seed, + "lr": lr, + "weight_decay": weight_decay, + "batch_size": batch_size, +@@ -405,6 +428,8 @@ def main( + use_mpnn=use_mpnn, + mpnn_ensemble_paths=mpnn_paths, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + ) + model = model.to(device) + +diff --git a/lnp_ml/modeling/encoders/__init__.py b/lnp_ml/modeling/encoders/__init__.py +index 2ab762a..eb78d5c 100644 +--- a/lnp_ml/modeling/encoders/__init__.py ++++ b/lnp_ml/modeling/encoders/__init__.py +@@ -1,5 +1,11 @@ + from lnp_ml.modeling.encoders.rdkit_encoder import CachedRDKitEncoder + from lnp_ml.modeling.encoders.mpnn_encoder import CachedMPNNEncoder ++from lnp_ml.modeling.encoders.chemeleon_encoder import CheMeleonEmbeddingEncoder ++from lnp_ml.modeling.encoders.unimol_encoder import UniMolEmbeddingEncoder + +-__all__ = ["CachedRDKitEncoder", "CachedMPNNEncoder"] +- ++__all__ = [ ++ "CachedRDKitEncoder", ++ "CachedMPNNEncoder", ++ "CheMeleonEmbeddingEncoder", ++ "UniMolEmbeddingEncoder", ++] +\ No newline at end of file +diff --git a/lnp_ml/modeling/final_train_optuna_cv.py b/lnp_ml/modeling/final_train_optuna_cv.py +index d3c7a97..4b0a8b8 100644 +--- a/lnp_ml/modeling/final_train_optuna_cv.py ++++ b/lnp_ml/modeling/final_train_optuna_cv.py +@@ -176,6 +176,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + # ============ MoE 相关(新增) ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -203,6 +205,8 @@ def create_model( + dropout=dropout, + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + else: +@@ -213,6 +217,8 @@ def create_model( + fusion_strategy=fusion_strategy, + head_hidden_dim=head_hidden_dim, + dropout=dropout, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **moe_kwargs, + ) + +@@ -258,6 +264,8 @@ def run_optuna_cv( + batch_size: int = 32, + n_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -355,6 +363,8 @@ def run_optuna_cv( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -451,7 +461,12 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, +- # MoE(新增) ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", ++ # MoE + use_moe: bool = False, + moe_n_experts: int = 4, + moe_top_k: int = 2, +@@ -531,6 +546,8 @@ def main( + batch_size=batch_size, + n_folds=n_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -599,6 +616,8 @@ def main( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + use_moe=use_moe, + moe_n_experts=moe_n_experts, + moe_top_k=moe_top_k, +@@ -651,6 +670,10 @@ def main( + "head_hidden_dim": best_params["head_hidden_dim"], + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "chemeleon_cache": chemeleon_cache if use_chemeleon else None, ++ "use_unimol": use_unimol, ++ "unimol_cache": unimol_cache if use_unimol else None, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +diff --git a/lnp_ml/modeling/layers/llm_prompt.py b/lnp_ml/modeling/layers/llm_prompt.py +index 21b7e65..b5c6987 100644 +--- a/lnp_ml/modeling/layers/llm_prompt.py ++++ b/lnp_ml/modeling/layers/llm_prompt.py +@@ -54,9 +54,14 @@ class LLMPromptEncoder(nn.Module): + _is_t5 = "t5" in _name_l + _is_qwen = "qwen" in _name_l + self._is_qwen = _is_qwen ++ _is_biot5 = "biot5" in _name_l ++ self._is_biot5 = _is_biot5 + + self.tokenizer = AutoTokenizer.from_pretrained( +- model_name_or_path, trust_remote_code=_is_qwen) ++ model_name_or_path, ++ trust_remote_code=_is_qwen, ++ use_fast=not _is_biot5, ++ ) + if _is_qwen and self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + +@@ -208,6 +213,19 @@ class LLMPromptEncoder(nn.Module): + return "[" + ", ".join(f"{x:.3f}" for x in v) + "]" + return f"{float(v):.3f}" + ++ def _fmt_mol(self, smiles: str) -> str: ++ """按 backbone 期望格式化分子。 ++ BioT5:SMILES -> SELFIES,用 ... 紧贴包裹(官方格式,token 间无空格); ++ 其他 backbone:原样返回 SMILES。""" ++ if not getattr(self, "_is_biot5", False): ++ return smiles ++ try: ++ import selfies as sf ++ sfs = sf.encoder(smiles) # CCO -> [C][C][O] ++ except Exception: ++ return smiles # 转换失败退回 SMILES,避免整批中断 ++ return f"{sfs}" ++ + def _build_rag_prompt(self, target_smiles: str, neighbors) -> str: + """构造 RAG prompt:原始 SMILES + 邻居多任务结果(numeric)。""" + blocks = [] +@@ -215,7 +233,7 @@ class LLMPromptEncoder(nn.Module): + ex = nb["extra"] + blocks.append( + f"Retrieved sample {rank}:\n" +- f"SMILES: {nb['smiles']}\n" ++ f"Molecule: {self._fmt_mol(nb['smiles'])}\n" + f"Similarity score: {nb['sim']:.3f}\n" + f"delivery_log: {self._fmt(nb['delivery'])}\n" + f"size_z: {self._fmt(ex.get('size'))}\n" +@@ -228,7 +246,7 @@ class LLMPromptEncoder(nn.Module): + return ( + "Task: Encode the target LNP molecule into a retrieval-aware representation " + "for downstream multi-task property prediction. Do not output predictions.\n\n" +- f"[Target Molecule]\nSMILES: {target_smiles}\n\n" ++ f"[Target Molecule]\nMolecule: {self._fmt_mol(target_smiles)}\n\n" + "[Retrieved Similar LNP Samples]\n" + "Retrieved from the training set by fingerprint similarity, with their known " + "multi-task outcomes (delivery_log, size_z, pdi_class, ee_class, toxic, biodist; " +@@ -241,7 +259,7 @@ class LLMPromptEncoder(nn.Module): + + def _get_prompt(self, s: str) -> str: + if not self.use_rag: +- return s ++ return self._fmt_mol(s) + key = f"{self._rag_pool_id}::{s}" + if key not in self._prompt_cache: + self._prompt_cache[key] = self._build_rag_prompt(s, self._retrieve_topk(s)) +@@ -326,7 +344,8 @@ class LLMPromptEncoder(nn.Module): + uniq = list(dict.fromkeys(missing)) + for i in range(0, len(uniq), 256): + chunk = uniq[i:i + 256] +- enc = self.tokenizer(chunk, padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in chunk] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + pooled = self._mean_pool(out, enc["attention_mask"]) +@@ -335,7 +354,8 @@ class LLMPromptEncoder(nn.Module): + return torch.stack([self._cache[s] for s in smiles]).to(device) + + def _encode_trainable(self, smiles, device): +- enc = self.tokenizer(list(smiles), padding=True, truncation=True, ++ mols = [self._fmt_mol(s) for s in smiles] ++ enc = self.tokenizer(mols, padding=True, truncation=True, + max_length=self.max_length, return_tensors="pt").to(device) + out = self.encoder(**enc).last_hidden_state + return self._mean_pool(out, enc["attention_mask"]) +diff --git a/lnp_ml/modeling/models.py b/lnp_ml/modeling/models.py +index 1428075..87e6643 100644 +--- a/lnp_ml/modeling/models.py ++++ b/lnp_ml/modeling/models.py +@@ -4,7 +4,12 @@ import torch + import torch.nn as nn + from typing import Dict, List, Optional, Literal + +-from lnp_ml.modeling.encoders import CachedRDKitEncoder, CachedMPNNEncoder ++from lnp_ml.modeling.encoders import ( ++ CachedRDKitEncoder, ++ CachedMPNNEncoder, ++ CheMeleonEmbeddingEncoder, ++ UniMolEmbeddingEncoder, ++) + from lnp_ml.modeling.layers import ( + TokenProjector, + SetTransformer, +@@ -91,6 +96,10 @@ class LNPModel(nn.Module): + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[List[str]] = None, + mpnn_device: str = "cpu", ++ # CheMeleon encoder ++ chemeleon_cache_path: Optional[str] = None, ++ # UniMol encoder ++ unimol_cache_path: Optional[str] = None, + # 输入维度配置 + input_dims: Optional[Dict[str, int]] = None, + # ============ MoE 相关 ============ +@@ -121,6 +130,8 @@ class LNPModel(nn.Module): + self.input_dims = input_dims or DEFAULT_INPUT_DIMS + self.d_model = d_model + self.use_mpnn = mpnn_checkpoint is not None or mpnn_ensemble_paths is not None ++ self.use_chemeleon = chemeleon_cache_path is not None ++ self.use_unimol = unimol_cache_path is not None + + # ============ Encoders ============ + self.rdkit_encoder = CachedRDKitEncoder() +@@ -133,6 +144,18 @@ class LNPModel(nn.Module): + else: + self.mpnn_encoder = None + ++ if self.use_chemeleon: ++ self.chemeleon_encoder = CheMeleonEmbeddingEncoder(cache_path=chemeleon_cache_path) ++ self.input_dims = {**self.input_dims, "chemeleon": self.chemeleon_encoder.embed_dim} ++ else: ++ self.chemeleon_encoder = None ++ ++ if self.use_unimol: ++ self.unimol_encoder = UniMolEmbeddingEncoder(cache_path=unimol_cache_path) ++ self.input_dims = {**self.input_dims, "unimol": self.unimol_encoder.embed_dim} ++ else: ++ self.unimol_encoder = None ++ + # ============ Token Projector ============ + proj_input_dims = {k: v for k, v in self.input_dims.items()} + if not self.use_mpnn: +@@ -143,8 +166,16 @@ class LNPModel(nn.Module): + dropout=dropout, + ) + +- # token 顺序与化学侧 token 数 +- self.chem_keys = CHEM_KEYS_WITH_MPNN if self.use_mpnn else CHEM_KEYS_NO_MPNN ++ # token 顺序:可选 embedding(mpnn/chemeleon)排在指纹类 token 之前 ++ chem_keys: List[str] = [] ++ if self.use_mpnn: ++ chem_keys.append("mpnn") ++ if self.use_chemeleon: ++ chem_keys.append("chemeleon") ++ if self.use_unimol: ++ chem_keys.append("unimol") ++ chem_keys += ["morgan", "maccs", "desc"] ++ self.chem_keys = chem_keys + self.tab_keys = TAB_KEYS + self.token_order = self.chem_keys + self.tab_keys + self.split_idx = len(self.chem_keys) +@@ -233,6 +264,10 @@ class LNPModel(nn.Module): + if self.use_mpnn: + mpnn_features = self.mpnn_encoder(smiles) + all_features["mpnn"] = mpnn_features["mpnn"].to(device) ++ if self.use_chemeleon: ++ all_features["chemeleon"] = self.chemeleon_encoder(smiles)["chemeleon"].to(device) ++ if self.use_unimol: ++ all_features["unimol"] = self.unimol_encoder(smiles)["unimol"].to(device) + all_features["morgan"] = rdkit_features["morgan"].to(device) + all_features["maccs"] = rdkit_features["maccs"].to(device) + all_features["desc"] = rdkit_features["desc"].to(device) +@@ -297,6 +332,15 @@ class LNPModel(nn.Module): + if task is None: + task = "delivery" + ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ x_for = { ++ "size": x_reg if x_reg is not None else fused, ++ "pdi": fused, ++ "ee": fused, ++ "delivery": x_reg if x_reg is not None else fused, ++ "biodist": fused, ++ "toxic": fused, ++ } + task_heads = { + "size": self.head.size_head, + "pdi": self.head.pdi_head, +@@ -305,7 +349,7 @@ class LNPModel(nn.Module): + "biodist": self.head.biodist_head, + "toxic": self.head.toxic_head, + } +- return task_heads[task](fused) ++ return task_heads[task](x_for[task]) + + def forward_replacing_token( + self, +@@ -347,7 +391,8 @@ class LNPModel(nn.Module): + ) -> torch.Tensor: + """仅预测 delivery(用于 pretrain)。返回 [B, 1]。""" + fused = self.forward_backbone(smiles, tabular) +- return self.head.delivery_head(fused) ++ x_reg = getattr(self, "_last_pooled", None) if getattr(self, "reg_bypass", True) else None ++ return self.head.delivery_head(x_reg if x_reg is not None else fused) + + def forward( + self, +@@ -369,6 +414,10 @@ class LNPModel(nn.Module): + self.rdkit_encoder.clear_cache() + if self.mpnn_encoder is not None: + self.mpnn_encoder.clear_cache() ++ if self.chemeleon_encoder is not None: ++ self.chemeleon_encoder.clear_cache() ++ if self.unimol_encoder is not None: ++ self.unimol_encoder.clear_cache() + if self.llm_prompt is not None and hasattr(self.llm_prompt, "clear_cache"): + self.llm_prompt.clear_cache() + +@@ -442,6 +491,8 @@ class LNPModelWithoutMPNN(LNPModel): + head_hidden_dim: int = 128, + dropout: float = 0.1, + input_dims: Optional[Dict[str, int]] = None, ++ chemeleon_cache_path: Optional[str] = None, ++ unimol_cache_path: Optional[str] = None, + # ============ MoE 相关 ============ + use_moe: bool = False, + moe_n_experts: int = 4, +@@ -478,6 +529,8 @@ class LNPModelWithoutMPNN(LNPModel): + dropout=dropout, + mpnn_checkpoint=None, + mpnn_ensemble_paths=None, ++ chemeleon_cache_path=chemeleon_cache_path, ++ unimol_cache_path=unimol_cache_path, + input_dims=dims, + reg_bypass=reg_bypass, + use_moe=use_moe, +diff --git a/lnp_ml/modeling/nested_cv_optuna.py b/lnp_ml/modeling/nested_cv_optuna.py +index 7c34e63..6b0a72c 100644 +--- a/lnp_ml/modeling/nested_cv_optuna.py ++++ b/lnp_ml/modeling/nested_cv_optuna.py +@@ -195,6 +195,8 @@ def create_model( + dropout: float = 0.1, + use_mpnn: bool = False, + mpnn_device: str = "cpu", ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + set_transformer_block: str = "sab", + # MoE + use_moe: bool = False, +@@ -218,6 +220,8 @@ def create_model( + moe_jitter_noise=moe_jitter_noise, + use_retrieval=use_retrieval, + retr_feature_dim=retr_feature_dim, ++ chemeleon_cache_path=chemeleon_cache, ++ unimol_cache_path=unimol_cache, + **(llm_kwargs or {}), + ) + +@@ -418,6 +422,8 @@ def run_inner_optuna( + batch_size: int = 32, + n_inner_folds: int = 3, + use_mpnn: bool = False, ++ chemeleon_cache: Optional[str] = None, ++ unimol_cache: Optional[str] = None, + seed: int = 42, + study_path: Optional[Path] = None, + pretrain_state_dict: Optional[Dict] = None, +@@ -536,6 +542,8 @@ def run_inner_optuna( + dropout=dropout, + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=moe_ne_t, + moe_top_k=moe_tk_t, +@@ -631,6 +639,8 @@ def _run_single_outer_fold( + batch_size: int, + n_inner_folds: int, + use_mpnn: bool, ++ chemeleon_cache: Optional[str], ++ unimol_cache: Optional[str], + seed: int, + pretrain_state_dict: Optional[Dict], + pretrain_config: Optional[Dict], +@@ -732,6 +742,8 @@ def _run_single_outer_fold( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + seed=seed + outer_fold, + study_path=study_path, + pretrain_state_dict=pretrain_state_dict, +@@ -789,6 +801,8 @@ def _run_single_outer_fold( + dropout=best_params["dropout"], + use_mpnn=use_mpnn, + mpnn_device=device.type, ++ chemeleon_cache=chemeleon_cache, ++ unimol_cache=unimol_cache, + use_moe=use_moe, + moe_n_experts=best_params.get("moe_n_experts", moe_n_experts), + moe_top_k=best_params.get("moe_top_k", moe_top_k), +@@ -853,6 +867,10 @@ def _run_single_outer_fold( + "set_transformer_block": best_params.get("set_transformer_block", "sab"), + "dropout": best_params["dropout"], + "use_mpnn": use_mpnn, ++ "use_chemeleon": chemeleon_cache is not None, ++ "chemeleon_cache": chemeleon_cache, ++ "use_unimol": unimol_cache is not None, ++ "unimol_cache": unimol_cache, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, +@@ -920,6 +938,11 @@ def main( + load_delivery_head: bool = False, + # MPNN + use_mpnn: bool = False, ++ # CheMeleon ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + n_repeats: int = 1, + repeat_seed_step: int = 1000, + # MoE(消融开关) +@@ -1050,6 +1073,8 @@ def main( + batch_size=batch_size, + n_inner_folds=n_inner_folds, + use_mpnn=use_mpnn, ++ chemeleon_cache=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache=(unimol_cache if use_unimol else None), + seed=seed, + pretrain_state_dict=pretrain_state_dict, + pretrain_config=pretrain_config, +diff --git a/lnp_ml/modeling/predict.py b/lnp_ml/modeling/predict.py +index a5cf836..4b02f44 100644 +--- a/lnp_ml/modeling/predict.py ++++ b/lnp_ml/modeling/predict.py +@@ -64,6 +64,8 @@ def load_model( + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), + mpnn_ensemble_paths=ensemble_paths, + mpnn_device=mpnn_device, ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + else: + model = LNPModelWithoutMPNN( +@@ -80,6 +82,8 @@ def load_model( + llm_lora_r=config.get("llm_lora_r", 8), + llm_lora_alpha=config.get("llm_lora_alpha", 16), + llm_lora_dropout=config.get("llm_lora_dropout", 0.05), ++ chemeleon_cache_path=config.get("chemeleon_cache"), ++ unimol_cache_path=config.get("unimol_cache"), + ) + + model.load_state_dict(checkpoint["model_state_dict"], strict=False) +diff --git a/lnp_ml/modeling/pretrain.py b/lnp_ml/modeling/pretrain.py +index 54a39ea..48154ad 100644 +--- a/lnp_ml/modeling/pretrain.py ++++ b/lnp_ml/modeling/pretrain.py +@@ -243,6 +243,10 @@ def main( + mpnn_checkpoint: Optional[str] = None, + mpnn_ensemble_paths: Optional[str] = None, + mpnn_device: str = "cpu", ++ use_chemeleon: bool = False, ++ chemeleon_cache: str = "data/processed/chemeleon_embeddings.npz", ++ use_unimol: bool = False, ++ unimol_cache: str = "data/processed/unimol_embeddings.npz", + # 训练参数 + batch_size: int = 64, + lr: float = 1e-4, +@@ -324,6 +328,8 @@ def main( + llm_lora_r=llm_lora_r, + llm_lora_alpha=llm_lora_alpha, + llm_lora_dropout=llm_lora_dropout, ++ chemeleon_cache_path=(chemeleon_cache if use_chemeleon else None), ++ unimol_cache_path=(unimol_cache if use_unimol else None), + ) + if enable_mpnn: + model = LNPModel( +@@ -373,6 +379,8 @@ def main( + "head_hidden_dim": head_hidden_dim, + "dropout": dropout, + "use_mpnn": enable_mpnn, ++ "use_chemeleon": use_chemeleon, ++ "use_unimol": use_unimol, + "use_moe": use_moe, + "moe_n_experts": moe_n_experts, + "moe_top_k": moe_top_k, diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_0/best_params.json b/models/abl_full/s3_molt5/seed42/outer_fold_0/best_params.json new file mode 100644 index 0000000..896863b --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_0/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.2845619357947551, + "lr": 0.0004819359652743826, + "weight_decay": 0.00047650193099672556, + "backbone_lr_ratio": 0.450086667071011, + "llm_lora_r": 16, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_0/epoch_mean.json b/models/abl_full/s3_molt5/seed42/outer_fold_0/epoch_mean.json new file mode 100644 index 0000000..17fb17e --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_0/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 10} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_0/history.json b/models/abl_full/s3_molt5/seed42/outer_fold_0/history.json new file mode 100644 index 0000000..090559b --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_0/history.json @@ -0,0 +1,216 @@ +{ + "train": [ + { + "loss": 5.556526846355862, + "loss_size": 0.8991158654292425, + "loss_pdi": 0.6861987445089552, + "loss_ee": 1.0851742426554363, + "loss_delivery": 1.024882556663619, + "loss_biodist": 1.2102841469976637, + "loss_toxic": 0.6586260563797421 + }, + { + "loss": 5.041954795519511, + "loss_size": 0.8640213128593233, + "loss_pdi": 0.6625392735004425, + "loss_ee": 1.0443220569027796, + "loss_delivery": 0.9386365893814299, + "loss_biodist": 0.9745548069477081, + "loss_toxic": 0.5763844980133904 + }, + { + "loss": 4.293523669242859, + "loss_size": 0.5104391020205286, + "loss_pdi": 0.6438237097528245, + "loss_ee": 1.0198722514841292, + "loss_delivery": 0.8974144922362434, + "loss_biodist": 0.7495970692899492, + "loss_toxic": 0.4935843315389421 + }, + { + "loss": 4.058620532353719, + "loss_size": 0.7833249022563299, + "loss_pdi": 0.6057508918974135, + "loss_ee": 0.9564559658368429, + "loss_delivery": 0.9421134202016724, + "loss_biodist": 0.4955597420533498, + "loss_toxic": 0.2931239397989379 + }, + { + "loss": 3.5809857315487332, + "loss_size": 0.7916464259227117, + "loss_pdi": 0.5756959997945361, + "loss_ee": 0.8608005344867706, + "loss_delivery": 0.8213866576552391, + "loss_biodist": 0.37591153052118087, + "loss_toxic": 0.16657394336329567 + }, + { + "loss": 3.449769801563687, + "loss_size": 0.747885080675284, + "loss_pdi": 0.5420350001917945, + "loss_ee": 0.8048009673754374, + "loss_delivery": 0.8599380668666627, + "loss_biodist": 0.3574216125739945, + "loss_toxic": 0.14898050824801126 + }, + { + "loss": 3.19424569606781, + "loss_size": 0.6520877538455857, + "loss_pdi": 0.5210104402568605, + "loss_ee": 0.80044776863522, + "loss_delivery": 0.7867912004391352, + "loss_biodist": 0.3209441958202256, + "loss_toxic": 0.12306845208836927 + }, + { + "loss": 3.1074710223409863, + "loss_size": 0.6566825579437945, + "loss_pdi": 0.514172805680169, + "loss_ee": 0.7740652196937137, + "loss_delivery": 0.7650143081943194, + "loss_biodist": 0.3010670385426945, + "loss_toxic": 0.10616488651269013 + }, + { + "loss": 3.030456304550171, + "loss_size": 0.5601292790638076, + "loss_pdi": 0.5181815375884374, + "loss_ee": 0.7569834921095107, + "loss_delivery": 0.8034750777814124, + "loss_biodist": 0.2880238898926311, + "loss_toxic": 0.11363375497361024 + }, + { + "loss": 3.0741440653800964, + "loss_size": 0.6289268864525689, + "loss_pdi": 0.5028329872422748, + "loss_ee": 0.774807420041826, + "loss_delivery": 0.7826980232364602, + "loss_biodist": 0.28544897130793995, + "loss_toxic": 0.10975301855554183 + } + ], + "val": [ + { + "loss": 4.582854111989339, + "loss_size": 0.3843433478226264, + "loss_pdi": 0.723524292310079, + "loss_ee": 1.0921978155771892, + "loss_delivery": 0.6161372729887565, + "loss_biodist": 1.1530116597811382, + "loss_toxic": 0.6273026069005331, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.21212121212121213, + "acc_toxic": 0.9 + }, + { + "loss": 4.299257914225261, + "loss_size": 0.36524524994698976, + "loss_pdi": 0.7539960145950317, + "loss_ee": 1.0175021092096965, + "loss_delivery": 0.5774166981379191, + "loss_biodist": 0.9603716135025024, + "loss_toxic": 0.6463838815689087, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.42424242424242425, + "acc_toxic": 0.85 + }, + { + "loss": 4.067449331283569, + "loss_size": 0.3706280204157035, + "loss_pdi": 0.8177115718523661, + "loss_ee": 0.9429177443186442, + "loss_delivery": 0.5792791942755381, + "loss_biodist": 0.7550159494082133, + "loss_toxic": 0.6263341108957926, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.48484848484848486, + "acc_toxic": 0.85 + }, + { + "loss": 4.284558534622192, + "loss_size": 0.347299512475729, + "loss_pdi": 1.01819642384847, + "loss_ee": 0.7384543269872665, + "loss_delivery": 0.6549153129259745, + "loss_biodist": 0.5275435050328573, + "loss_toxic": 1.026445984840393, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.45454545454545453, + "acc_toxic": 0.85 + }, + { + "loss": 4.112729787826538, + "loss_size": 0.34835073549766093, + "loss_pdi": 1.1420668164889018, + "loss_ee": 0.7171300575137138, + "loss_delivery": 0.4926035925745964, + "loss_biodist": 0.4654357781012853, + "loss_toxic": 0.9723925838867823, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.85 + }, + { + "loss": 3.6470919450124106, + "loss_size": 0.3705743004878362, + "loss_pdi": 1.0355472564697266, + "loss_ee": 0.6750738869110743, + "loss_delivery": 0.5064138174057007, + "loss_biodist": 0.41218418131272, + "loss_toxic": 0.664972048252821, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.613964796066284, + "loss_size": 0.348444124062856, + "loss_pdi": 1.046640117963155, + "loss_ee": 0.6694974191486835, + "loss_delivery": 0.5380096932252248, + "loss_biodist": 0.3489747494459152, + "loss_toxic": 0.6790551953017712, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.7114875316619873, + "loss_size": 0.32380907734235126, + "loss_pdi": 1.2189759214719136, + "loss_ee": 0.682886133591334, + "loss_delivery": 0.5272142142057419, + "loss_biodist": 0.3210829036931197, + "loss_toxic": 0.6582953917483488, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.6632060209910073, + "loss_size": 0.33106729388237, + "loss_pdi": 1.196081817150116, + "loss_ee": 0.6525730565190315, + "loss_delivery": 0.5370048532883326, + "loss_biodist": 0.3247632992764314, + "loss_toxic": 0.6411791928112507, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + }, + { + "loss": 3.698651393254598, + "loss_size": 0.33771326144536334, + "loss_pdi": 1.2104722460110982, + "loss_ee": 0.6551364883780479, + "loss_delivery": 0.5164098888635635, + "loss_biodist": 0.33507786442836124, + "loss_toxic": 0.663575725009044, + "acc_pdi": 0.5757575757575758, + "acc_ee": 0.5151515151515151, + "acc_toxic": 0.9 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_0/splits.json b/models/abl_full/s3_molt5/seed42/outer_fold_0/splits.json new file mode 100644 index 0000000..cccb9d8 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_0/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 75, 76, 77, 80, 81, 85, 86, 88, 89, 90, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 141, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 163, 164, 167, 168, 169, 170, 171, 172, 175, 176, 178, 179, 180, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 208, 210, 211, 212, 213, 216, 217, 218, 219, 220, 222, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 241, 242, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 265, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 291, 292, 294, 296, 297, 298, 299, 300, 301, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 413, 414, 415, 417, 418, 419], "outer_test_idx": [7, 16, 20, 29, 51, 59, 60, 69, 70, 74, 78, 79, 82, 83, 84, 87, 91, 93, 97, 102, 110, 112, 119, 120, 121, 132, 137, 140, 142, 143, 152, 161, 162, 165, 166, 173, 174, 177, 181, 186, 187, 194, 205, 207, 209, 214, 215, 221, 223, 226, 235, 238, 240, 243, 246, 251, 254, 263, 264, 266, 273, 284, 289, 290, 293, 295, 302, 305, 314, 315, 331, 334, 341, 350, 353, 361, 373, 376, 378, 392, 394, 402, 410, 416]} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_0/test_metrics.json b/models/abl_full/s3_molt5/seed42/outer_fold_0/test_metrics.json new file mode 100644 index 0000000..babe04c --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_0/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.40757582303978, + "rmse": 1.1864130069414192, + "mae": 0.5616588884717729, + "r2": 0.1385289489585415 + }, + "delivery": { + "n_samples": 58, + "mse": 0.6076951122465624, + "rmse": 0.7795480179222845, + "mae": 0.617616962834165, + "r2": 0.22758284163102904 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6916445623342176, + "recall": 0.7059871703492516, + "f1": 0.6974789915966387 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.6981481481481482, + "recall": 0.7547619047619047, + "f1": 0.7063178294573644 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.272484302646162, + "js_divergence": 0.06264102127437038 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_1/best_params.json b/models/abl_full/s3_molt5/seed42/outer_fold_1/best_params.json new file mode 100644 index 0000000..f1db88b --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_1/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.49321588150191, + "lr": 0.0008001805406707167, + "weight_decay": 0.0005393769702926108, + "backbone_lr_ratio": 0.3376629665631628, + "llm_lora_r": 16, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_1/epoch_mean.json b/models/abl_full/s3_molt5/seed42/outer_fold_1/epoch_mean.json new file mode 100644 index 0000000..6aa3930 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_1/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 9} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_1/history.json b/models/abl_full/s3_molt5/seed42/outer_fold_1/history.json new file mode 100644 index 0000000..53e5f0e --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_1/history.json @@ -0,0 +1,195 @@ +{ + "train": [ + { + "loss": 5.77474758360121, + "loss_size": 1.2331079757875867, + "loss_pdi": 0.6936992804209391, + "loss_ee": 1.066648244857788, + "loss_delivery": 0.935715526342392, + "loss_biodist": 1.2155968513753679, + "loss_toxic": 0.643874434961213 + }, + { + "loss": 5.3412245114644366, + "loss_size": 1.209430714448293, + "loss_pdi": 0.6653362280792661, + "loss_ee": 1.0348400274912517, + "loss_delivery": 0.9978327006101608, + "loss_biodist": 0.8915939794646369, + "loss_toxic": 0.5749621589978536 + }, + { + "loss": 4.464062399334377, + "loss_size": 0.8436246795786752, + "loss_pdi": 0.6494589845339457, + "loss_ee": 0.9773456288708581, + "loss_delivery": 0.8672893759277132, + "loss_biodist": 0.6627513104014926, + "loss_toxic": 0.49713995556036633 + }, + { + "loss": 4.47790875699785, + "loss_size": 1.169005913866891, + "loss_pdi": 0.6128844834036298, + "loss_ee": 0.9485219683912065, + "loss_delivery": 0.9582825327912966, + "loss_biodist": 0.4790920383400387, + "loss_toxic": 0.34717264191971886 + }, + { + "loss": 4.0018284055921765, + "loss_size": 1.0695180975728564, + "loss_pdi": 0.5913299818833669, + "loss_ee": 0.8700230386522081, + "loss_delivery": 0.8713459819555283, + "loss_biodist": 0.36030344830618966, + "loss_toxic": 0.2673475291166041 + }, + { + "loss": 3.7398324410120645, + "loss_size": 0.9811657807893224, + "loss_pdi": 0.5559401031997468, + "loss_ee": 0.8459135426415337, + "loss_delivery": 0.795601076963875, + "loss_biodist": 0.3675258747405476, + "loss_toxic": 0.21784434612426493 + }, + { + "loss": 3.6514281961652966, + "loss_size": 1.0034583227501974, + "loss_pdi": 0.5354284958706962, + "loss_ee": 0.8044322000609504, + "loss_delivery": 0.8270867636634244, + "loss_biodist": 0.30960529463158715, + "loss_toxic": 0.19391653179708454 + }, + { + "loss": 3.527752015325758, + "loss_size": 0.9498398419883516, + "loss_pdi": 0.543121380938424, + "loss_ee": 0.8170672075615989, + "loss_delivery": 0.7402951344847679, + "loss_biodist": 0.29419874731037354, + "loss_toxic": 0.20422294384075534 + }, + { + "loss": 3.6286303997039795, + "loss_size": 0.9239035331540637, + "loss_pdi": 0.5663659224907557, + "loss_ee": 0.8193418350484636, + "loss_delivery": 0.8360065635707643, + "loss_biodist": 0.3092363393969006, + "loss_toxic": 0.19912854592419332 + } + ], + "val": [ + { + "loss": 3.8697171211242676, + "loss_size": 0.48845079182744183, + "loss_pdi": 0.6735695799191793, + "loss_ee": 1.0282831192016602, + "loss_delivery": 0.20800850043694177, + "loss_biodist": 0.9497722188631693, + "loss_toxic": 0.5352020462354025, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.5151515151515151, + "acc_toxic": 1.0 + }, + { + "loss": 3.2552131017049155, + "loss_size": 0.45838923907528323, + "loss_pdi": 0.6549385984738668, + "loss_ee": 0.9293954173723856, + "loss_delivery": 0.1433263880511125, + "loss_biodist": 0.6440129081408182, + "loss_toxic": 0.4358403484026591, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6666666666666666, + "acc_toxic": 1.0 + }, + { + "loss": 2.8400522073109946, + "loss_size": 0.4379276918868224, + "loss_pdi": 0.6636398832003275, + "loss_ee": 0.8890521923700968, + "loss_delivery": 0.1282130928997276, + "loss_biodist": 0.392768253882726, + "loss_toxic": 0.33142268657684326, + "acc_pdi": 0.6060606060606061, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 3.287294546763102, + "loss_size": 0.7384628057479858, + "loss_pdi": 0.5885257025559744, + "loss_ee": 0.5905131349960963, + "loss_delivery": 0.9225571552912394, + "loss_biodist": 0.41452716290950775, + "loss_toxic": 0.04073623505731424, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 2.8958489894866943, + "loss_size": 0.45188838243484497, + "loss_pdi": 0.5805625170469284, + "loss_ee": 0.5703835388024648, + "loss_delivery": 0.842032661040624, + "loss_biodist": 0.42389097809791565, + "loss_toxic": 0.030486968345940113, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7272727272727273, + "acc_toxic": 1.0 + }, + { + "loss": 2.55562957127889, + "loss_size": 0.4931954840819041, + "loss_pdi": 0.5030396382013956, + "loss_ee": 0.5876714785893759, + "loss_delivery": 0.4734108845392863, + "loss_biodist": 0.47400223712126416, + "loss_toxic": 0.01912586895438532, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.7878787878787878, + "acc_toxic": 1.0 + }, + { + "loss": 2.389761209487915, + "loss_size": 0.42707087596257526, + "loss_pdi": 0.49318404992421466, + "loss_ee": 0.6157298187414805, + "loss_delivery": 0.44207098086675006, + "loss_biodist": 0.39139653742313385, + "loss_toxic": 0.013046385642761985, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.696969696969697, + "acc_toxic": 1.0 + }, + { + "loss": 2.4121898810068765, + "loss_size": 0.41094743212064105, + "loss_pdi": 0.4982231805721919, + "loss_ee": 0.6279320120811462, + "loss_delivery": 0.49163426955540973, + "loss_biodist": 0.36234207451343536, + "loss_toxic": 0.01575022687514623, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6666666666666666, + "acc_toxic": 1.0 + }, + { + "loss": 2.3918775717417398, + "loss_size": 0.40065912405649823, + "loss_pdi": 0.5030595362186432, + "loss_ee": 0.6259194115797678, + "loss_delivery": 0.4762331346670787, + "loss_biodist": 0.36304940780003864, + "loss_toxic": 0.017339861718937755, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.6666666666666666, + "acc_toxic": 1.0 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_1/splits.json b/models/abl_full/s3_molt5/seed42/outer_fold_1/splits.json new file mode 100644 index 0000000..1773fe5 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_1/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 112, 114, 115, 118, 119, 120, 121, 123, 124, 125, 126, 128, 129, 130, 131, 132, 136, 137, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 194, 195, 196, 197, 198, 199, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 366, 367, 368, 369, 373, 374, 375, 376, 378, 379, 380, 381, 382, 384, 387, 388, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 416, 417, 419], "outer_test_idx": [1, 2, 4, 8, 9, 14, 17, 22, 23, 25, 28, 34, 37, 41, 43, 45, 63, 64, 68, 85, 96, 104, 111, 113, 116, 117, 122, 127, 133, 134, 135, 138, 139, 147, 160, 163, 170, 180, 191, 192, 193, 200, 203, 208, 224, 227, 230, 239, 241, 245, 249, 253, 257, 265, 267, 272, 280, 294, 298, 299, 309, 312, 320, 326, 332, 336, 346, 347, 360, 363, 370, 371, 372, 377, 383, 385, 386, 390, 395, 400, 401, 407, 415, 418]} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_1/test_metrics.json b/models/abl_full/s3_molt5/seed42/outer_fold_1/test_metrics.json new file mode 100644 index 0000000..96a5694 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_1/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.48346224517997965, + "rmse": 0.6953144937220708, + "mae": 0.5102533181419685, + "r2": -0.4763218149886339 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0731357937170418, + "rmse": 1.03592267747986, + "mae": 0.6685057051907308, + "r2": 0.1877135653692018 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.5886939571150097, + "recall": 0.6031746031746031, + "f1": 0.5916666666666667 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5833333333333334, + "precision": 0.5165466717190855, + "recall": 0.5193615907901622, + "f1": 0.5137542196365725 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.23185261457140074, + "js_divergence": 0.05874619101396169 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_2/best_params.json b/models/abl_full/s3_molt5/seed42/outer_fold_2/best_params.json new file mode 100644 index 0000000..768d25e --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_2/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.4963290723923127, + "lr": 0.0004074125483259232, + "weight_decay": 0.00032334162966885123, + "backbone_lr_ratio": 0.10751643388858854, + "llm_lora_r": 16, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_2/epoch_mean.json b/models/abl_full/s3_molt5/seed42/outer_fold_2/epoch_mean.json new file mode 100644 index 0000000..c288387 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_2/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 18} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_2/history.json b/models/abl_full/s3_molt5/seed42/outer_fold_2/history.json new file mode 100644 index 0000000..f666740 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_2/history.json @@ -0,0 +1,384 @@ +{ + "train": [ + { + "loss": 5.487345907423231, + "loss_size": 0.7641112200087972, + "loss_pdi": 0.6918681098355187, + "loss_ee": 1.072225723001692, + "loss_delivery": 0.9881671021382014, + "loss_biodist": 1.2902965678109064, + "loss_toxic": 0.6864713099267747 + }, + { + "loss": 5.286898202366299, + "loss_size": 0.8730089788635572, + "loss_pdi": 0.6761358910136752, + "loss_ee": 1.0705633163452148, + "loss_delivery": 0.9246404435899522, + "loss_biodist": 1.1358383662170835, + "loss_toxic": 0.624428414636188 + }, + { + "loss": 5.056836499108209, + "loss_size": 0.8346984659632047, + "loss_pdi": 0.6700398292806413, + "loss_ee": 1.0410889751381345, + "loss_delivery": 0.9601367033190198, + "loss_biodist": 1.0078847871886358, + "loss_toxic": 0.5691637363698747 + }, + { + "loss": 4.747054245736864, + "loss_size": 0.8519772705104616, + "loss_pdi": 0.6665775643454658, + "loss_ee": 1.0005198650889926, + "loss_delivery": 0.9412924208574824, + "loss_biodist": 0.7832645376523336, + "loss_toxic": 0.5309804711076949 + }, + { + "loss": 4.116930100652906, + "loss_size": 0.5450935057467885, + "loss_pdi": 0.6439523564444648, + "loss_ee": 0.9951593114270104, + "loss_delivery": 0.8722066564692391, + "loss_biodist": 0.6434075617127948, + "loss_toxic": 0.44052739027473664 + }, + { + "loss": 4.2518333196640015, + "loss_size": 0.8297611383928193, + "loss_pdi": 0.6453894343641069, + "loss_ee": 0.9537725349267324, + "loss_delivery": 0.8999591204855177, + "loss_biodist": 0.5687648703654608, + "loss_toxic": 0.37774287164211273 + }, + { + "loss": 4.0656481054094105, + "loss_size": 0.7862947069936328, + "loss_pdi": 0.6357740395598941, + "loss_ee": 0.9566015501817068, + "loss_delivery": 0.9176309771007962, + "loss_biodist": 0.5218176858292686, + "loss_toxic": 0.27015382796525955 + }, + { + "loss": 3.8773185941908093, + "loss_size": 0.7865172906054391, + "loss_pdi": 0.6349108583397336, + "loss_ee": 0.943361845281389, + "loss_delivery": 0.7757043259011375, + "loss_biodist": 0.49310926927460563, + "loss_toxic": 0.26481229977475274 + }, + { + "loss": 3.757328497038947, + "loss_size": 0.8039915487170219, + "loss_pdi": 0.6139139433701833, + "loss_ee": 0.9285519785351224, + "loss_delivery": 0.7038871989481978, + "loss_biodist": 0.4460866153240204, + "loss_toxic": 0.2805885978870922 + }, + { + "loss": 3.741398731867472, + "loss_size": 0.7919689408606954, + "loss_pdi": 0.6054538206921684, + "loss_ee": 0.9456164638201395, + "loss_delivery": 0.7640265574057897, + "loss_biodist": 0.44522328012519413, + "loss_toxic": 0.21153991255495283 + }, + { + "loss": 3.7604104148017035, + "loss_size": 0.782592569788297, + "loss_pdi": 0.6025422414143881, + "loss_ee": 0.9155446092287699, + "loss_delivery": 0.803718141383595, + "loss_biodist": 0.4424833224879371, + "loss_toxic": 0.23717589676380157 + }, + { + "loss": 3.603457040256924, + "loss_size": 0.7855248873432478, + "loss_pdi": 0.5774284501870474, + "loss_ee": 0.9172773659229279, + "loss_delivery": 0.7561793269382583, + "loss_biodist": 0.41037560171551174, + "loss_toxic": 0.17911001977821192 + }, + { + "loss": 3.573323236571418, + "loss_size": 0.7186846393677924, + "loss_pdi": 0.5941944205098681, + "loss_ee": 0.9007077018419901, + "loss_delivery": 0.7793918583128188, + "loss_biodist": 0.41704661150773364, + "loss_toxic": 0.18697755804492366 + }, + { + "loss": 3.4912584357791476, + "loss_size": 0.785241634481483, + "loss_pdi": 0.5952464491128922, + "loss_ee": 0.8796749114990234, + "loss_delivery": 0.6813587132427428, + "loss_biodist": 0.40622253881560433, + "loss_toxic": 0.16558624079657924 + }, + { + "loss": 3.5427917109595404, + "loss_size": 0.7347337090306811, + "loss_pdi": 0.5650420569711261, + "loss_ee": 0.8920972678396437, + "loss_delivery": 0.8047235161066055, + "loss_biodist": 0.40335102048185134, + "loss_toxic": 0.16706641039086711 + }, + { + "loss": 3.5240734020868936, + "loss_size": 0.7486045070820384, + "loss_pdi": 0.5584640055894852, + "loss_ee": 0.8861803776688046, + "loss_delivery": 0.7811678879790835, + "loss_biodist": 0.3981920803586642, + "loss_toxic": 0.17504265387025145 + }, + { + "loss": 3.5841079817877874, + "loss_size": 0.8038296583626006, + "loss_pdi": 0.5918492409918044, + "loss_ee": 0.8981601562764909, + "loss_delivery": 0.7637217309739854, + "loss_biodist": 0.38151077181100845, + "loss_toxic": 0.17020168983274037 + }, + { + "loss": 3.480285260412428, + "loss_size": 0.8107087653544214, + "loss_pdi": 0.5717743072244856, + "loss_ee": 0.8633923861715529, + "loss_delivery": 0.7028212481074863, + "loss_biodist": 0.4042791600028674, + "loss_toxic": 0.14986390185852846 + } + ], + "val": [ + { + "loss": 7.608341693878174, + "loss_size": 3.2397621273994446, + "loss_pdi": 0.6919883290926615, + "loss_ee": 1.1429418722788494, + "loss_delivery": 1.2937863270441692, + "loss_biodist": 0.8734426498413086, + "loss_toxic": 0.3828998804092407, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.45454545454545453, + "acc_toxic": 1.0 + }, + { + "loss": 7.3653059005737305, + "loss_size": 3.2607713540395102, + "loss_pdi": 0.6960576772689819, + "loss_ee": 1.1078359285990398, + "loss_delivery": 1.2847860356171925, + "loss_biodist": 0.7179916501045227, + "loss_toxic": 0.32849544286727905, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 7.226148843765259, + "loss_size": 3.3846099972724915, + "loss_pdi": 0.6985557277997335, + "loss_ee": 1.0916699568430583, + "loss_delivery": 1.271823485692342, + "loss_biodist": 0.5466135342915853, + "loss_toxic": 0.27450429399808246, + "acc_pdi": 0.36363636363636365, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 7.417500734329224, + "loss_size": 3.8033753037452698, + "loss_pdi": 0.6931684017181396, + "loss_ee": 1.1156155268351238, + "loss_delivery": 1.2875472009181976, + "loss_biodist": 0.3897236188252767, + "loss_toxic": 0.1760328710079193, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.95 + }, + { + "loss": 7.570693174997966, + "loss_size": 3.964477986097336, + "loss_pdi": 0.7021054228146871, + "loss_ee": 1.1020586689313252, + "loss_delivery": 1.347011645634969, + "loss_biodist": 0.38083967566490173, + "loss_toxic": 0.12681889037291208, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.498930374781291, + "loss_size": 3.939320057630539, + "loss_pdi": 0.6849622329076132, + "loss_ee": 1.092375914255778, + "loss_delivery": 1.3658907810846965, + "loss_biodist": 0.34898750980695087, + "loss_toxic": 0.12251090506712596, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.300968567530314, + "loss_size": 3.8628563781579337, + "loss_pdi": 0.6917040745417277, + "loss_ee": 1.0291324655214946, + "loss_delivery": 1.3559529980023701, + "loss_biodist": 0.29505141576131183, + "loss_toxic": 0.12063488612572353, + "acc_pdi": 0.5454545454545454, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.166946887969971, + "loss_size": 3.7496941288312278, + "loss_pdi": 0.6853148937225342, + "loss_ee": 1.0255549152692158, + "loss_delivery": 1.379909873008728, + "loss_biodist": 0.26935917139053345, + "loss_toxic": 0.11531947180628777, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.180427710215251, + "loss_size": 3.8020315766334534, + "loss_pdi": 0.6694935361544291, + "loss_ee": 1.0189145406087239, + "loss_delivery": 1.3825702667236328, + "loss_biodist": 0.24986953536669412, + "loss_toxic": 0.11894045894344647, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.329723596572876, + "loss_size": 3.922183722257614, + "loss_pdi": 0.6858444809913635, + "loss_ee": 1.0513283809026082, + "loss_delivery": 1.379323144753774, + "loss_biodist": 0.23592489957809448, + "loss_toxic": 0.1216334414978822, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.325899600982666, + "loss_size": 3.8873280187447867, + "loss_pdi": 0.6982430219650269, + "loss_ee": 1.087717096010844, + "loss_delivery": 1.369438608487447, + "loss_biodist": 0.22557654976844788, + "loss_toxic": 0.12741820390025774, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.183416763941447, + "loss_size": 3.7846269607543945, + "loss_pdi": 0.685976505279541, + "loss_ee": 1.0706271529197693, + "loss_delivery": 1.3647807439168294, + "loss_biodist": 0.21669386823972067, + "loss_toxic": 0.13061044613520303, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.144765456517537, + "loss_size": 3.783736209074656, + "loss_pdi": 0.6815934975941976, + "loss_ee": 1.0496457815170288, + "loss_delivery": 1.3621800541877747, + "loss_biodist": 0.20393763979276022, + "loss_toxic": 0.13361643254756927, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.09138822555542, + "loss_size": 3.7755978306134543, + "loss_pdi": 0.6782835721969604, + "loss_ee": 1.0446102221806843, + "loss_delivery": 1.3366334438323975, + "loss_biodist": 0.1929956575234731, + "loss_toxic": 0.13326170419653258, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.145428657531738, + "loss_size": 3.791491776704788, + "loss_pdi": 0.6787090102831522, + "loss_ee": 1.0562822818756104, + "loss_delivery": 1.357833166917165, + "loss_biodist": 0.19537177681922913, + "loss_toxic": 0.13750663523872694, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.093284606933594, + "loss_size": 3.7911689082781472, + "loss_pdi": 0.6721740166346232, + "loss_ee": 1.032613178094228, + "loss_delivery": 1.3466271956761677, + "loss_biodist": 0.1882839302221934, + "loss_toxic": 0.133194829026858, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.1468948523203535, + "loss_size": 3.8154773910840354, + "loss_pdi": 0.6826634407043457, + "loss_ee": 1.0439836581548054, + "loss_delivery": 1.3541411558787029, + "loss_biodist": 0.18770522872606912, + "loss_toxic": 0.13502473259965578, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + }, + { + "loss": 7.107930739720662, + "loss_size": 3.7896319329738617, + "loss_pdi": 0.6759253740310669, + "loss_ee": 1.0346716245015461, + "loss_delivery": 1.3534386555353801, + "loss_biodist": 0.19049095114072165, + "loss_toxic": 0.13517092789212862, + "acc_pdi": 0.45454545454545453, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.95 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_2/splits.json b/models/abl_full/s3_molt5/seed42/outer_fold_2/splits.json new file mode 100644 index 0000000..14df306 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_2/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 68, 69, 70, 72, 74, 76, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 91, 93, 94, 95, 96, 97, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 145, 147, 148, 149, 150, 151, 152, 153, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 177, 179, 180, 181, 183, 184, 185, 186, 187, 188, 191, 192, 193, 194, 196, 197, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 280, 281, 282, 283, 284, 285, 287, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 324, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 394, 395, 398, 399, 400, 401, 402, 404, 405, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418], "outer_test_idx": [10, 12, 15, 31, 35, 42, 46, 52, 53, 54, 62, 66, 67, 71, 73, 75, 77, 81, 89, 90, 92, 98, 99, 105, 123, 124, 141, 144, 146, 154, 155, 164, 169, 176, 178, 182, 189, 190, 195, 198, 201, 206, 216, 217, 218, 219, 231, 234, 244, 247, 248, 258, 262, 270, 277, 278, 279, 286, 288, 291, 292, 301, 304, 306, 316, 319, 325, 328, 343, 357, 359, 362, 367, 374, 375, 384, 391, 393, 396, 397, 403, 406, 411, 419]} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_2/test_metrics.json b/models/abl_full/s3_molt5/seed42/outer_fold_2/test_metrics.json new file mode 100644 index 0000000..35827b3 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_2/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.42028872794508726, + "rmse": 0.648296790016029, + "mae": 0.49812036992183756, + "r2": 0.16993727159330507 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6891387791058545, + "rmse": 0.8301438303726978, + "mae": 0.5935882686404511, + "r2": 0.08263684078854217 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.5595238095238095, + "precision": 0.5891316848763657, + "recall": 0.6136363636363636, + "f1": 0.5450153711023276 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5973684210526315, + "recall": 0.6654995331465919, + "f1": 0.6115975376524027 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.29021899490214914, + "js_divergence": 0.07416126068025192 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_3/best_params.json b/models/abl_full/s3_molt5/seed42/outer_fold_3/best_params.json new file mode 100644 index 0000000..c8119a1 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_3/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.2837694643729008, + "lr": 0.0009507610950400835, + "weight_decay": 0.030225174141040066, + "backbone_lr_ratio": 0.07870652124780661, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_3/epoch_mean.json b/models/abl_full/s3_molt5/seed42/outer_fold_3/epoch_mean.json new file mode 100644 index 0000000..84179ef --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_3/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 12} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_3/history.json b/models/abl_full/s3_molt5/seed42/outer_fold_3/history.json new file mode 100644 index 0000000..33a14e7 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_3/history.json @@ -0,0 +1,258 @@ +{ + "train": [ + { + "loss": 4.914718323283726, + "loss_size": 0.5324446244372262, + "loss_pdi": 0.6846352054013146, + "loss_ee": 1.0578428208827972, + "loss_delivery": 0.9474122259351943, + "loss_biodist": 1.1080786850717332, + "loss_toxic": 0.5960940172274908 + }, + { + "loss": 3.961102432674832, + "loss_size": 0.4582933336496353, + "loss_pdi": 0.6332244873046875, + "loss_ee": 0.9826705853144327, + "loss_delivery": 0.7055342354708247, + "loss_biodist": 0.7188850111431546, + "loss_toxic": 0.48313258753882515 + }, + { + "loss": 3.5242332220077515, + "loss_size": 0.4568314982785119, + "loss_pdi": 0.6022145218319364, + "loss_ee": 0.9086397621366713, + "loss_delivery": 0.8122377511527803, + "loss_biodist": 0.4342513531446457, + "loss_toxic": 0.32905229843325084 + }, + { + "loss": 3.163842691315545, + "loss_size": 0.4235949019591014, + "loss_pdi": 0.567377410001225, + "loss_ee": 0.9001484480169084, + "loss_delivery": 0.7515226528048515, + "loss_biodist": 0.3298327061865065, + "loss_toxic": 0.21263912444313368 + }, + { + "loss": 2.896005471547445, + "loss_size": 0.42778512587149936, + "loss_pdi": 0.533668628997273, + "loss_ee": 0.8234222332636515, + "loss_delivery": 0.741248928838306, + "loss_biodist": 0.25601549363798565, + "loss_toxic": 0.13408411708143023 + }, + { + "loss": 2.7069373461935253, + "loss_size": 0.39764371555712485, + "loss_pdi": 0.515814385480351, + "loss_ee": 0.802184436056349, + "loss_delivery": 0.6452591444055239, + "loss_biodist": 0.23702446619669595, + "loss_toxic": 0.12969596575324735 + }, + { + "loss": 2.7013635767830744, + "loss_size": 0.3756774825354417, + "loss_pdi": 0.5338781923055649, + "loss_ee": 0.7930703659852346, + "loss_delivery": 0.6816269250379668, + "loss_biodist": 0.23280110417140853, + "loss_toxic": 0.11160853256781895 + }, + { + "loss": 2.5669795407189264, + "loss_size": 0.3655020652545823, + "loss_pdi": 0.48586711121930015, + "loss_ee": 0.7855868736902872, + "loss_delivery": 0.641814169784387, + "loss_biodist": 0.21785054976741472, + "loss_toxic": 0.09803599740068118 + }, + { + "loss": 2.5124507082833185, + "loss_size": 0.3532351462377442, + "loss_pdi": 0.5311279329988692, + "loss_ee": 0.768080903424157, + "loss_delivery": 0.6181998186641269, + "loss_biodist": 0.1832999305592643, + "loss_toxic": 0.08956265524547133 + }, + { + "loss": 2.462325712045034, + "loss_size": 0.3560373435417811, + "loss_pdi": 0.48397253453731537, + "loss_ee": 0.7524154020680321, + "loss_delivery": 0.6469683200120926, + "loss_biodist": 0.17531507834792137, + "loss_toxic": 0.07864752949939834 + }, + { + "loss": 2.437894026438395, + "loss_size": 0.34822539654042983, + "loss_pdi": 0.5095004985729853, + "loss_ee": 0.7314404348532358, + "loss_delivery": 0.6283146507210202, + "loss_biodist": 0.1830532807442877, + "loss_toxic": 0.06954198400489986 + }, + { + "loss": 2.49251045121087, + "loss_size": 0.35316456109285355, + "loss_pdi": 0.5006746649742126, + "loss_ee": 0.7459581676456664, + "loss_delivery": 0.6729236406584581, + "loss_biodist": 0.17688839841220114, + "loss_toxic": 0.07678307039249274 + } + ], + "val": [ + { + "loss": 5.426829377810161, + "loss_size": 2.2365001092354455, + "loss_pdi": 0.6293351848920187, + "loss_ee": 0.9049980243047079, + "loss_delivery": 0.8400820891062418, + "loss_biodist": 0.5663166244824728, + "loss_toxic": 0.26540373762448627, + "acc_pdi": 0.7878787878787878, + "acc_ee": 0.5757575757575758, + "acc_toxic": 1.0 + }, + { + "loss": 4.798666675885518, + "loss_size": 2.2462343325217566, + "loss_pdi": 0.5636057257652283, + "loss_ee": 0.7596118251482645, + "loss_delivery": 0.7197894752025604, + "loss_biodist": 0.3098222315311432, + "loss_toxic": 0.2053792675336202, + "acc_pdi": 0.8181818181818182, + "acc_ee": 0.7575757575757576, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.603681763013204, + "loss_size": 2.298434535662333, + "loss_pdi": 0.512960265080134, + "loss_ee": 0.719513346751531, + "loss_delivery": 0.6911531289418539, + "loss_biodist": 0.1964974751075109, + "loss_toxic": 0.18469337125619253, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.7575757575757576, + "acc_toxic": 0.8260869565217391 + }, + { + "loss": 4.529100139935811, + "loss_size": 2.1715749700864158, + "loss_pdi": 0.5253746410210928, + "loss_ee": 0.7112756371498108, + "loss_delivery": 0.6411006649335226, + "loss_biodist": 0.190378800034523, + "loss_toxic": 0.28799227873484295, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.696969696969697, + "acc_toxic": 0.782608695652174 + }, + { + "loss": 4.446331302324931, + "loss_size": 2.0884093095858893, + "loss_pdi": 0.5356726050376892, + "loss_ee": 0.6950342357158661, + "loss_delivery": 0.6886747678120931, + "loss_biodist": 0.15342388053735098, + "loss_toxic": 0.28430543343226117, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.42501159509023, + "loss_size": 2.2401577035586038, + "loss_pdi": 0.5344454050064087, + "loss_ee": 0.7022197345892588, + "loss_delivery": 0.6175793707370758, + "loss_biodist": 0.12357454001903534, + "loss_toxic": 0.20183377464612326, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.313302755355835, + "loss_size": 2.1490561068058014, + "loss_pdi": 0.5214091837406158, + "loss_ee": 0.7222559253374735, + "loss_delivery": 0.6120633582274119, + "loss_biodist": 0.12345906098683675, + "loss_toxic": 0.18196025987466177, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.392338395118713, + "loss_size": 2.2080757121245065, + "loss_pdi": 0.5154049396514893, + "loss_ee": 0.7162034312884012, + "loss_delivery": 0.5989430745442709, + "loss_biodist": 0.10885170598824818, + "loss_toxic": 0.23655452330907187, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.256940762201945, + "loss_size": 2.1371451119581857, + "loss_pdi": 0.4937688708305359, + "loss_ee": 0.7269888917605082, + "loss_delivery": 0.5979659656683604, + "loss_biodist": 0.10687060157457988, + "loss_toxic": 0.18765985469023386, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.17889126141866, + "loss_size": 2.0927523175875344, + "loss_pdi": 0.4885588188966115, + "loss_ee": 0.7285631000995636, + "loss_delivery": 0.6014486849308014, + "loss_biodist": 0.10100045800209045, + "loss_toxic": 0.16142859558264414, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.2168147166570025, + "loss_size": 2.0972527315219245, + "loss_pdi": 0.4941370089848836, + "loss_ee": 0.7364407777786255, + "loss_delivery": 0.6063957611719767, + "loss_biodist": 0.10204429427782695, + "loss_toxic": 0.1754815230766932, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + }, + { + "loss": 4.1946273644765215, + "loss_size": 2.0729304552078247, + "loss_pdi": 0.491574227809906, + "loss_ee": 0.7358831465244293, + "loss_delivery": 0.6079143683115641, + "loss_biodist": 0.10604290664196014, + "loss_toxic": 0.175520658493042, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8695652173913043 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_3/splits.json b/models/abl_full/s3_molt5/seed42/outer_fold_3/splits.json new file mode 100644 index 0000000..7a2b13e --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_3/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 102, 104, 105, 106, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 172, 173, 174, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 221, 223, 224, 226, 227, 228, 230, 231, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 284, 286, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 301, 302, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 317, 319, 320, 321, 325, 326, 327, 328, 331, 332, 334, 336, 340, 341, 343, 344, 346, 347, 348, 350, 352, 353, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 406, 407, 410, 411, 412, 414, 415, 416, 418, 419], "outer_test_idx": [3, 6, 13, 18, 19, 26, 33, 44, 48, 49, 50, 56, 57, 72, 80, 88, 94, 101, 103, 107, 108, 114, 126, 128, 130, 145, 149, 157, 167, 171, 175, 188, 196, 197, 199, 211, 220, 222, 225, 229, 232, 236, 250, 260, 261, 271, 281, 283, 285, 287, 296, 300, 303, 311, 313, 318, 322, 323, 324, 329, 330, 333, 335, 337, 338, 339, 342, 345, 349, 351, 354, 355, 356, 358, 365, 369, 381, 388, 399, 405, 408, 409, 413, 417]} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_3/test_metrics.json b/models/abl_full/s3_molt5/seed42/outer_fold_3/test_metrics.json new file mode 100644 index 0000000..5c483fa --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_3/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 83, + "mse": 1.6836187319783924, + "rmse": 1.297543344932412, + "mae": 0.5553870367290206, + "r2": 0.04773241281118734 + }, + "delivery": { + "n_samples": 59, + "mse": 0.7185506035104459, + "rmse": 0.8476736420996266, + "mae": 0.5687034062378235, + "r2": 0.30148344173969277 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.6489665003563792, + "recall": 0.6532258064516129, + "f1": 0.6509485094850949 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6309523809523809, + "precision": 0.5591290893015031, + "recall": 0.5724736048265461, + "f1": 0.5542575650950036 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.19857830417434996, + "js_divergence": 0.050240147737561684 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_4/best_params.json b/models/abl_full/s3_molt5/seed42/outer_fold_4/best_params.json new file mode 100644 index 0000000..d75d461 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_4/best_params.json @@ -0,0 +1,13 @@ +{ + "dropout": 0.37031300722104044, + "lr": 0.0009780107766915915, + "weight_decay": 0.006649253171411618, + "backbone_lr_ratio": 0.06548902966345113, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_4/epoch_mean.json b/models/abl_full/s3_molt5/seed42/outer_fold_4/epoch_mean.json new file mode 100644 index 0000000..54e2f4a --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_4/epoch_mean.json @@ -0,0 +1 @@ +{"epoch_mean": 15} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_4/history.json b/models/abl_full/s3_molt5/seed42/outer_fold_4/history.json new file mode 100644 index 0000000..faf920f --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_4/history.json @@ -0,0 +1,321 @@ +{ + "train": [ + { + "loss": 5.520451611942715, + "loss_size": 1.0834403832753499, + "loss_pdi": 0.6762512988514371, + "loss_ee": 1.068907317188051, + "loss_delivery": 0.9280572666062249, + "loss_biodist": 1.1427704493204753, + "loss_toxic": 0.6350413527753618 + }, + { + "loss": 4.932657215330336, + "loss_size": 1.1124961723883946, + "loss_pdi": 0.6637450986438327, + "loss_ee": 1.0077026188373566, + "loss_delivery": 0.9464589059352875, + "loss_biodist": 0.7197014424535964, + "loss_toxic": 0.5140047983990775 + }, + { + "loss": 4.3618533743752375, + "loss_size": 1.0823665981491406, + "loss_pdi": 0.6376351548565758, + "loss_ee": 0.9423872331778208, + "loss_delivery": 0.888061136007309, + "loss_biodist": 0.45546262462933856, + "loss_toxic": 0.3889020366801156 + }, + { + "loss": 3.9569209814071655, + "loss_size": 1.0617056464155514, + "loss_pdi": 0.5988189660840564, + "loss_ee": 0.9066162440511916, + "loss_delivery": 0.8230511844158173, + "loss_biodist": 0.3191113281581137, + "loss_toxic": 0.2794683641857571 + }, + { + "loss": 3.6605184343126087, + "loss_size": 1.0362471971246932, + "loss_pdi": 0.5851944502856996, + "loss_ee": 0.8576626479625702, + "loss_delivery": 0.7700248012940089, + "loss_biodist": 0.26476117223501205, + "loss_toxic": 0.17874832244382965 + }, + { + "loss": 3.411376608742608, + "loss_size": 0.9600378705395592, + "loss_pdi": 0.5528531869252523, + "loss_ee": 0.8604363401730856, + "loss_delivery": 0.672629837360647, + "loss_biodist": 0.2381270635459158, + "loss_toxic": 0.15908963998986614 + }, + { + "loss": 3.324833313624064, + "loss_size": 0.9049109427465333, + "loss_pdi": 0.5801237059964074, + "loss_ee": 0.8373548885186514, + "loss_delivery": 0.6984944985144668, + "loss_biodist": 0.21947460207674238, + "loss_toxic": 0.12254193870143758 + }, + { + "loss": 2.8907159765561423, + "loss_size": 0.5637529757287767, + "loss_pdi": 0.49765406880113816, + "loss_ee": 0.7922667198710971, + "loss_delivery": 0.743312823275725, + "loss_biodist": 0.19772061043315464, + "loss_toxic": 0.12747108175729713 + }, + { + "loss": 2.8312202625804477, + "loss_size": 0.5842581060197618, + "loss_pdi": 0.5319478246900771, + "loss_ee": 0.7891077001889547, + "loss_delivery": 0.6709514045053058, + "loss_biodist": 0.177447603808509, + "loss_toxic": 0.11270308070298699 + }, + { + "loss": 3.051493955983056, + "loss_size": 0.8450640415151914, + "loss_pdi": 0.4998094356722302, + "loss_ee": 0.7890782190693749, + "loss_delivery": 0.6458187144663599, + "loss_biodist": 0.20043346948093838, + "loss_toxic": 0.11216222163703707 + }, + { + "loss": 3.0106598006354437, + "loss_size": 0.783949682282077, + "loss_pdi": 0.4959089491102431, + "loss_ee": 0.7690116829342313, + "loss_delivery": 0.6917218731509315, + "loss_biodist": 0.2025404026110967, + "loss_toxic": 0.11023545689466926 + }, + { + "loss": 2.608355032073127, + "loss_size": 0.47430264204740524, + "loss_pdi": 0.4849795185857349, + "loss_ee": 0.7611824638313718, + "loss_delivery": 0.6096549953023592, + "loss_biodist": 0.2088982624312242, + "loss_toxic": 0.10442085284739733 + }, + { + "loss": 2.9922281437449985, + "loss_size": 0.8134498674836423, + "loss_pdi": 0.5019173440006044, + "loss_ee": 0.7690530088212755, + "loss_delivery": 0.6434761302338706, + "loss_biodist": 0.19495534151792526, + "loss_toxic": 0.11362470541563299 + }, + { + "loss": 2.950321959124671, + "loss_size": 0.7326252799895074, + "loss_pdi": 0.5043534719281726, + "loss_ee": 0.7615728560421202, + "loss_delivery": 0.6991451962126626, + "loss_biodist": 0.18416344250241914, + "loss_toxic": 0.11374881193559203 + }, + { + "loss": 3.0340490871005588, + "loss_size": 0.8205917071965005, + "loss_pdi": 0.5188859634929233, + "loss_ee": 0.7679635882377625, + "loss_delivery": 0.6596631159385046, + "loss_biodist": 0.20274137829740843, + "loss_toxic": 0.11115449951547715 + } + ], + "val": [ + { + "loss": 4.646613995234172, + "loss_size": 0.668701152006785, + "loss_pdi": 0.6345842878023783, + "loss_ee": 0.9765123923619589, + "loss_delivery": 0.7478122152388096, + "loss_biodist": 1.0522984266281128, + "loss_toxic": 0.5908342699209849, + "acc_pdi": 0.48484848484848486, + "acc_ee": 0.3333333333333333, + "acc_toxic": 0.9444444444444444 + }, + { + "loss": 3.699596087137858, + "loss_size": 0.4265044828255971, + "loss_pdi": 0.5642850697040558, + "loss_ee": 0.8135816852251688, + "loss_delivery": 0.745530386765798, + "loss_biodist": 0.6492063303788503, + "loss_toxic": 0.5212236841519674, + "acc_pdi": 0.6363636363636364, + "acc_ee": 0.6363636363636364, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.2962985038757324, + "loss_size": 0.40771960218747455, + "loss_pdi": 0.5111959973971049, + "loss_ee": 0.7120078603426615, + "loss_delivery": 0.7244319642583529, + "loss_biodist": 0.38044901688893634, + "loss_toxic": 0.5726089378197988, + "acc_pdi": 0.5151515151515151, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.9156036376953125, + "loss_size": 0.295330082376798, + "loss_pdi": 0.4285000065962474, + "loss_ee": 0.6782448291778564, + "loss_delivery": 0.7430877586205801, + "loss_biodist": 0.17217876017093658, + "loss_toxic": 0.5991015632947286, + "acc_pdi": 0.6666666666666666, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.006807883580526, + "loss_size": 0.23723123967647552, + "loss_pdi": 0.389209878941377, + "loss_ee": 0.6695058544476827, + "loss_delivery": 0.7457639425992966, + "loss_biodist": 0.11526696632305782, + "loss_toxic": 0.845439842591683, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.077054738998413, + "loss_size": 0.21516984204451242, + "loss_pdi": 0.3623950084050496, + "loss_ee": 0.6553712983926138, + "loss_delivery": 0.7512685855229696, + "loss_biodist": 0.09722125033537547, + "loss_toxic": 0.9844890230645736, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.0163920720418296, + "loss_size": 0.19736125568548837, + "loss_pdi": 0.3606727086007595, + "loss_ee": 0.6648320183157921, + "loss_delivery": 0.6868848372250795, + "loss_biodist": 0.0908434937397639, + "loss_toxic": 0.9984105235586563, + "acc_pdi": 0.696969696969697, + "acc_ee": 0.5454545454545454, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.810471216837565, + "loss_size": 0.19795249650875726, + "loss_pdi": 0.3568834848701954, + "loss_ee": 0.6488286815583706, + "loss_delivery": 0.6895535505997638, + "loss_biodist": 0.0946268563469251, + "loss_toxic": 0.8075411207973957, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.6060606060606061, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.040109952290853, + "loss_size": 0.19267978270848593, + "loss_pdi": 0.3485882853468259, + "loss_ee": 0.6704843199501435, + "loss_delivery": 0.7210594502588114, + "loss_biodist": 0.09272799144188563, + "loss_toxic": 0.9934600470587611, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 3.0569144090016684, + "loss_size": 0.18976550549268723, + "loss_pdi": 0.3515562266111374, + "loss_ee": 0.6622447719176611, + "loss_delivery": 0.7091973625744382, + "loss_biodist": 0.10496844351291656, + "loss_toxic": 1.014812810656925, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.9835548400878906, + "loss_size": 0.20137800027926764, + "loss_pdi": 0.35481125488877296, + "loss_ee": 0.660031263406078, + "loss_delivery": 0.7093442139060547, + "loss_biodist": 0.10139118134975433, + "loss_toxic": 0.9350518581146995, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.861079533894857, + "loss_size": 0.19585787753264108, + "loss_pdi": 0.3563653416931629, + "loss_ee": 0.6544494616488615, + "loss_delivery": 0.7342219005028406, + "loss_biodist": 0.09389542788267136, + "loss_toxic": 0.8110492238774896, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.7926018238067627, + "loss_size": 0.19471220672130585, + "loss_pdi": 0.362080122033755, + "loss_ee": 0.6518576325227817, + "loss_delivery": 0.7254116449815532, + "loss_biodist": 0.09340414653221767, + "loss_toxic": 0.7525749827424685, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.802187363306681, + "loss_size": 0.20102649927139282, + "loss_pdi": 0.36045581723252934, + "loss_ee": 0.659423158193628, + "loss_delivery": 0.7425095178186893, + "loss_biodist": 0.08906838297843933, + "loss_toxic": 0.7390565391009053, + "acc_pdi": 0.7575757575757576, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + }, + { + "loss": 2.7445337772369385, + "loss_size": 0.20085815588633218, + "loss_pdi": 0.35970116903384525, + "loss_ee": 0.6567977176358303, + "loss_delivery": 0.72479332331568, + "loss_biodist": 0.08830738067626953, + "loss_toxic": 0.7043295071149865, + "acc_pdi": 0.7272727272727273, + "acc_ee": 0.5757575757575758, + "acc_toxic": 0.8888888888888888 + } + ] +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_4/splits.json b/models/abl_full/s3_molt5/seed42/outer_fold_4/splits.json new file mode 100644 index 0000000..8dd0299 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_4/splits.json @@ -0,0 +1 @@ +{"outer_train_idx": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 35, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 110, 111, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 130, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 152, 154, 155, 157, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178, 180, 181, 182, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 211, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 234, 235, 236, 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 277, 278, 279, 280, 281, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 309, 311, 312, 313, 314, 315, 316, 318, 319, 320, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 345, 346, 347, 349, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 381, 383, 384, 385, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 413, 415, 416, 417, 418, 419], "outer_test_idx": [0, 5, 11, 21, 24, 27, 30, 32, 36, 38, 39, 40, 47, 55, 58, 61, 65, 76, 86, 95, 100, 106, 109, 115, 118, 125, 129, 131, 136, 148, 150, 151, 153, 156, 158, 159, 168, 172, 179, 183, 184, 185, 202, 204, 210, 212, 213, 228, 233, 237, 242, 252, 255, 256, 259, 268, 269, 274, 275, 276, 282, 297, 307, 308, 310, 317, 321, 327, 340, 344, 348, 352, 364, 366, 368, 379, 380, 382, 387, 389, 398, 404, 412, 414]} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/outer_fold_4/test_metrics.json b/models/abl_full/s3_molt5/seed42/outer_fold_4/test_metrics.json new file mode 100644 index 0000000..eb9455a --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/outer_fold_4/test_metrics.json @@ -0,0 +1,42 @@ +{ + "size": { + "n_samples": 84, + "mse": 0.6185879903348743, + "rmse": 0.7865036492826173, + "mae": 0.43704657881365466, + "r2": 0.1722524304616062 + }, + "delivery": { + "n_samples": 58, + "mse": 0.9356663890484552, + "rmse": 0.9672985004890968, + "mae": 0.6343502103640087, + "r2": 0.09522604786628497 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6592592592592592, + "recall": 0.6891495601173021, + "f1": 0.6657824933687003 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6389598773319705, + "recall": 0.6696581196581196, + "f1": 0.6465204678362574 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.1858567386366629, + "js_divergence": 0.04681795395078009 + } +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/pip_freeze.txt b/models/abl_full/s3_molt5/seed42/pip_freeze.txt new file mode 100644 index 0000000..ee1da88 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/pip_freeze.txt @@ -0,0 +1,153 @@ +accelerate==1.0.1 +alabaster==0.7.13 +alembic==1.14.1 +altair==5.4.1 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.5.2 +attrs==25.3.0 +babel==2.18.0 +bitsandbytes==0.45.5 +blinker==1.8.2 +Brotli @ file:///croot/brotli-split_1714483155106/work +cachetools==5.5.2 +captum==0.7.0 +certifi @ file:///croot/certifi_1725551672989/work/certifi +charset-normalizer @ file:///croot/charset-normalizer_1721748349566/work +chemprop==1.7.0 +click==8.1.8 +cloudpickle==3.1.2 +colorlog==6.10.1 +contourpy==1.1.1 +cramjam==2.11.0 +cycler==0.12.1 +descriptastorus==2.8.0 +docstring_parser==0.18.0 +docutils==0.20.1 +et_xmlfile==2.0.0 +exceptiongroup==1.3.1 +fastapi==0.124.4 +fastparquet==2024.2.0 +filelock @ file:///croot/filelock_1700591183607/work +Flask==2.1.3 +fonttools==4.57.0 +fsspec==2025.3.0 +future==1.0.0 +gitdb==4.0.12 +GitPython==3.1.50 +gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455532332/work +greenlet==3.1.1 +h11==0.16.0 +hf-xet==1.5.1 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==0.36.2 +hyperopt==0.2.7 +idna @ file:///croot/idna_1714398848350/work +imagesize==1.5.0 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +iniconfig==2.1.0 +inquirerpy==0.3.4 +itsdangerous==2.2.0 +Jinja2 @ file:///croot/jinja2_1716993405101/work +joblib==1.4.2 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.7 +-e git+ssh://git@github.com/RYDE-WORK/lnp_ml.git@104dfef94c6d6f03eb63369b4c4edc2f6ed4437d#egg=lnp_ml +loguru==0.7.3 +Mako==1.3.12 +markdown-it-py==3.0.0 +MarkupSafe @ file:///croot/markupsafe_1704205993651/work +matplotlib==3.7.5 +mdurl==0.1.2 +mkl-fft==1.3.1 +mkl-random @ file:///tmp/build/80754af9/mkl_random_1626186064646/work +mkl-service==2.4.0 +modelscope==1.31.0 +mpmath @ file:///croot/mpmath_1690848262763/work +mypy_extensions==1.1.0 +narwhals==1.42.1 +networkx @ file:///croot/networkx_1690561992265/work +numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work +openpyxl==3.1.5 +optuna==4.5.0 +packaging==24.2 +pandas==2.0.3 +pandas_flavor==0.7.0 +peft==0.13.2 +pfzy==0.3.4 +pillow @ file:///croot/pillow_1721059439630/work +pkgutil_resolve_name==1.3.10 +pluggy==1.5.0 +prompt_toolkit==3.0.52 +protobuf==5.29.6 +psutil==7.2.2 +py4j==0.10.9.9 +pyarrow==17.0.0 +pydantic==2.10.6 +pydantic_core==2.27.2 +pydeck==0.9.2 +Pygments==2.19.2 +pyparsing==3.1.4 +PySocks @ file:///tmp/build/80754af9/pysocks_1605305779399/work +pytest==8.3.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.0.1 +pytz==2026.2 +PyYAML @ file:///croot/pyyaml_1728657952215/work +rdkit==2024.3.5 +referencing==0.35.1 +regex==2024.11.6 +requests @ file:///croot/requests_1721410876868/work +rich==13.9.4 +rpds-py==0.20.1 +safetensors==0.5.3 +scikit-learn==1.3.2 +scipy==1.10.1 +selfies==2.2.0 +sentencepiece==0.2.0 +shellingham==1.5.4 +six @ file:///tmp/build/80754af9/six_1644875935023/work +smmap==5.0.3 +sniffio==1.3.1 +snowballstemmer==3.1.1 +Sphinx==7.1.2 +sphinx_rtd_theme==3.1.0 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +SQLAlchemy==2.0.51 +starlette==0.44.0 +streamlit==1.40.1 +sympy @ file:///croot/sympy_1734622612703/work +tenacity==9.0.0 +tensorboardX==2.6.2.2 +threadpoolctl==3.5.0 +tokenizers==0.20.3 +toml==0.10.2 +tomli==2.4.1 +torch==2.4.1 +torchvision==0.20.0 +tornado==6.4.2 +tqdm==4.68.2 +transformers==4.46.3 +triton==3.0.0 +typed-argument-parser==1.10.1 +typer==0.20.1 +typing-inspect==0.9.0 +typing_extensions==4.13.2 +tzdata==2026.2 +urllib3 @ file:///croot/urllib3_1727769808118/work +uvicorn==0.33.0 +watchdog==4.0.2 +wcwidth==0.8.2 +Werkzeug==2.3.8 +xarray==2023.1.0 +zipp==3.20.2 diff --git a/models/abl_full/s3_molt5/seed42/repro.txt b/models/abl_full/s3_molt5/seed42/repro.txt new file mode 100644 index 0000000..c58eed2 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/repro.txt @@ -0,0 +1,5 @@ +date: 2026-07-18T05:43:50+00:00 +git_commit: 104dfef94c6d6f03eb63369b4c4edc2f6ed4437d +git_dirty_files: 23 +seed: 42 pythonhashseed: 42 +cmd: GPU=1 --batch-size 16 --use-mpnn --use-llm --use-rag --rag-top-k 4 --use-soft-prompt --no-llm-freeze --llm-use-lora --llm-model-path models/molt5-base diff --git a/models/abl_full/s3_molt5/seed42/strata_info.json b/models/abl_full/s3_molt5/seed42/strata_info.json new file mode 100644 index 0000000..ef3be58 --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/strata_info.json @@ -0,0 +1,60 @@ +{ + "original_strata_counts": { + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E0": "1", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T0|P2|E2": "3", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14", + "TNA|P2|E2": "1", + "TNA|P3|E0": "1" + }, + "rare_strata": [ + "T0|P1|E0", + "T0|P2|E2", + "TNA|P2|E2", + "TNA|P3|E0" + ], + "final_strata": [ + "RARE", + "T0|P0|E0", + "T0|P0|E1", + "T0|P0|E2", + "T0|P1|E1", + "T0|P1|E2", + "T1|P0|E2", + "T1|P1|E2", + "TNA|P0|E0", + "TNA|P0|E1", + "TNA|P0|E2", + "TNA|P1|E0", + "TNA|P1|E1", + "TNA|P1|E2" + ], + "final_strata_counts": { + "RARE": "6", + "T0|P0|E0": "5", + "T0|P0|E1": "58", + "T0|P0|E2": "169", + "T0|P1|E1": "17", + "T0|P1|E2": "32", + "T1|P0|E2": "9", + "T1|P1|E2": "5", + "TNA|P0|E0": "28", + "TNA|P0|E1": "21", + "TNA|P0|E2": "20", + "TNA|P1|E0": "29", + "TNA|P1|E1": "7", + "TNA|P1|E2": "14" + }, + "n_rare_merged": "6" +} \ No newline at end of file diff --git a/models/abl_full/s3_molt5/seed42/summary.json b/models/abl_full/s3_molt5/seed42/summary.json new file mode 100644 index 0000000..d99318a --- /dev/null +++ b/models/abl_full/s3_molt5/seed42/summary.json @@ -0,0 +1,357 @@ +{ + "fold_results": [ + { + "fold": 0, + "best_params": { + "dropout": 0.2845619357947551, + "lr": 0.0004819359652743826, + "weight_decay": 0.00047650193099672556, + "backbone_lr_ratio": 0.450086667071011, + "llm_lora_r": 16, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 10, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.40757582303978, + "rmse": 1.1864130069414192, + "mae": 0.5616588884717729, + "r2": 0.1385289489585415 + }, + "delivery": { + "n_samples": 58, + "mse": 0.6076951122465624, + "rmse": 0.7795480179222845, + "mae": 0.617616962834165, + "r2": 0.22758284163102904 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.75, + "precision": 0.6916445623342176, + "recall": 0.7059871703492516, + "f1": 0.6974789915966387 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.7380952380952381, + "precision": 0.6981481481481482, + "recall": 0.7547619047619047, + "f1": 0.7063178294573644 + }, + "toxic": { + "n_samples": 58, + "accuracy": 0.9655172413793104, + "precision": 0.75, + "recall": 0.9821428571428572, + "f1": 0.8242424242424242 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.272484302646162, + "js_divergence": 0.06264102127437038 + } + } + }, + { + "fold": 1, + "best_params": { + "dropout": 0.49321588150191, + "lr": 0.0008001805406707167, + "weight_decay": 0.0005393769702926108, + "backbone_lr_ratio": 0.3376629665631628, + "llm_lora_r": 16, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 9, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.48346224517997965, + "rmse": 0.6953144937220708, + "mae": 0.5102533181419685, + "r2": -0.4763218149886339 + }, + "delivery": { + "n_samples": 61, + "mse": 1.0731357937170418, + "rmse": 1.03592267747986, + "mae": 0.6685057051907308, + "r2": 0.1877135653692018 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.6666666666666666, + "precision": 0.5886939571150097, + "recall": 0.6031746031746031, + "f1": 0.5916666666666667 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.5833333333333334, + "precision": 0.5165466717190855, + "recall": 0.5193615907901622, + "f1": 0.5137542196365725 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9508196721311475, + "precision": 0.75, + "recall": 0.9741379310344828, + "f1": 0.8200589970501475 + }, + "biodist": { + "n_samples": 61, + "kl_divergence": 0.23185261457140074, + "js_divergence": 0.05874619101396169 + } + } + }, + { + "fold": 2, + "best_params": { + "dropout": 0.4963290723923127, + "lr": 0.0004074125483259232, + "weight_decay": 0.00032334162966885123, + "backbone_lr_ratio": 0.10751643388858854, + "llm_lora_r": 16, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 18, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.42028872794508726, + "rmse": 0.648296790016029, + "mae": 0.49812036992183756, + "r2": 0.16993727159330507 + }, + "delivery": { + "n_samples": 60, + "mse": 0.6891387791058545, + "rmse": 0.8301438303726978, + "mae": 0.5935882686404511, + "r2": 0.08263684078854217 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.5595238095238095, + "precision": 0.5891316848763657, + "recall": 0.6136363636363636, + "f1": 0.5450153711023276 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6428571428571429, + "precision": 0.5973684210526315, + "recall": 0.6654995331465919, + "f1": 0.6115975376524027 + }, + "toxic": { + "n_samples": 61, + "accuracy": 0.9344262295081968, + "precision": 0.7142857142857143, + "recall": 0.9655172413793103, + "f1": 0.7821428571428571 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.29021899490214914, + "js_divergence": 0.07416126068025192 + } + } + }, + { + "fold": 3, + "best_params": { + "dropout": 0.2837694643729008, + "lr": 0.0009507610950400835, + "weight_decay": 0.030225174141040066, + "backbone_lr_ratio": 0.07870652124780661, + "llm_lora_r": 8, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 12, + "test_metrics": { + "size": { + "n_samples": 83, + "mse": 1.6836187319783924, + "rmse": 1.297543344932412, + "mae": 0.5553870367290206, + "r2": 0.04773241281118734 + }, + "delivery": { + "n_samples": 59, + "mse": 0.7185506035104459, + "rmse": 0.8476736420996266, + "mae": 0.5687034062378235, + "r2": 0.30148344173969277 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7261904761904762, + "precision": 0.6489665003563792, + "recall": 0.6532258064516129, + "f1": 0.6509485094850949 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6309523809523809, + "precision": 0.5591290893015031, + "recall": 0.5724736048265461, + "f1": 0.5542575650950036 + }, + "toxic": { + "n_samples": 60, + "accuracy": 0.9333333333333333, + "precision": 0.7142857142857143, + "recall": 0.9649122807017544, + "f1": 0.7818181818181817 + }, + "biodist": { + "n_samples": 60, + "kl_divergence": 0.19857830417434996, + "js_divergence": 0.050240147737561684 + } + } + }, + { + "fold": 4, + "best_params": { + "dropout": 0.37031300722104044, + "lr": 0.0009780107766915915, + "weight_decay": 0.006649253171411618, + "backbone_lr_ratio": 0.06548902966345113, + "llm_lora_r": 32, + "d_model": 256, + "num_heads": 8, + "n_attn_layers": 4, + "fusion_strategy": "attention", + "head_hidden_dim": 128, + "set_transformer_block": "sab" + }, + "epoch_mean": 15, + "test_metrics": { + "size": { + "n_samples": 84, + "mse": 0.6185879903348743, + "rmse": 0.7865036492826173, + "mae": 0.43704657881365466, + "r2": 0.1722524304616062 + }, + "delivery": { + "n_samples": 58, + "mse": 0.9356663890484552, + "rmse": 0.9672985004890968, + "mae": 0.6343502103640087, + "r2": 0.09522604786628497 + }, + "pdi": { + "n_samples": 84, + "accuracy": 0.7142857142857143, + "precision": 0.6592592592592592, + "recall": 0.6891495601173021, + "f1": 0.6657824933687003 + }, + "ee": { + "n_samples": 84, + "accuracy": 0.6785714285714286, + "precision": 0.6389598773319705, + "recall": 0.6696581196581196, + "f1": 0.6465204678362574 + }, + "toxic": { + "n_samples": 59, + "accuracy": 0.9661016949152542, + "precision": 0.8, + "recall": 0.9821428571428572, + "f1": 0.8659090909090909 + }, + "biodist": { + "n_samples": 58, + "kl_divergence": 0.1858567386366629, + "js_divergence": 0.04681795395078009 + } + } + } + ], + "summary_stats": { + "size": { + "mse_mean": 0.9227067036956227, + "mse_std": 0.5199870933377366, + "rmse_mean": 0.9228142569789096, + "rmse_std": 0.26668436551865127, + "mae_mean": 0.5124932384156509, + "mae_std": 0.04507978286518577, + "r2_mean": 0.010425849767201244, + "r2_std": 0.24753068849177795 + }, + "delivery": { + "mse_mean": 0.8048373355256719, + "mse_std": 0.17250908161164208, + "rmse_mean": 0.8921173336727133, + "rmse_std": 0.09467839503477547, + "mae_mean": 0.6165529106534359, + "mae_std": 0.034158216580699625, + "r2_mean": 0.17892854747895015, + "r2_std": 0.08214903554490538 + }, + "pdi": { + "accuracy_mean": 0.6833333333333333, + "accuracy_std": 0.06759556936465899, + "precision_mean": 0.6355391927882461, + "precision_std": 0.04059280608600703, + "recall_mean": 0.6530347007458268, + "recall_std": 0.040364692300862884, + "f1_mean": 0.6301784064438857, + "f1_std": 0.05470706286623488 + }, + "ee": { + "accuracy_mean": 0.6547619047619048, + "accuracy_std": 0.051617817592092385, + "precision_mean": 0.6020304415106678, + "precision_std": 0.06288423031767923, + "recall_mean": 0.6363509506366649, + "recall_std": 0.0821547163009543, + "f1_mean": 0.6064895239355201, + "f1_std": 0.06770860070155689 + }, + "toxic": { + "accuracy_mean": 0.9500396342534485, + "accuracy_std": 0.014290090778642328, + "precision_mean": 0.7457142857142858, + "precision_std": 0.03149343955006944, + "recall_mean": 0.9737706334802525, + "recall_std": 0.007575117962473199, + "f1_mean": 0.8148343102325404, + "f1_std": 0.0312513648447909 + }, + "biodist": { + "kl_divergence_mean": 0.23579819098614493, + "kl_divergence_std": 0.04050316258737932, + "js_divergence_mean": 0.05852131493138515, + "js_divergence_std": 0.009666197194003964 + } + } +} \ No newline at end of file diff --git a/reports/ablation_full_summary.csv b/reports/ablation_full_summary.csv new file mode 100644 index 0000000..7cad2a0 --- /dev/null +++ b/reports/ablation_full_summary.csv @@ -0,0 +1,10 @@ +variant,run_dir,size.mse_mean,size.mse_std,size.rmse_mean,size.rmse_std,size.mae_mean,size.mae_std,size.r2_mean,size.r2_std,delivery.mse_mean,delivery.mse_std,delivery.rmse_mean,delivery.rmse_std,delivery.mae_mean,delivery.mae_std,delivery.r2_mean,delivery.r2_std,pdi.accuracy_mean,pdi.accuracy_std,pdi.precision_mean,pdi.precision_std,pdi.recall_mean,pdi.recall_std,pdi.f1_mean,pdi.f1_std,ee.accuracy_mean,ee.accuracy_std,ee.precision_mean,ee.precision_std,ee.recall_mean,ee.recall_std,ee.f1_mean,ee.f1_std,toxic.accuracy_mean,toxic.accuracy_std,toxic.precision_mean,toxic.precision_std,toxic.recall_mean,toxic.recall_std,toxic.f1_mean,toxic.f1_std,biodist.kl_divergence_mean,biodist.kl_divergence_std,biodist.js_divergence_mean,biodist.js_divergence_std +s1_baseline,models/abl_full/s1_baseline/seed42,0.976582486231686,0.5963594058421813,0.9386443449876178,0.30907811286866,0.5093074968606859,0.045639036325825846,0.030267447403631187,0.07652419024801474,0.7531908574686035,0.20899310967661966,0.8594886207759702,0.12029201230848217,0.5876535972008421,0.05617003172137069,0.23850857369075168,0.11987061343757097,0.7142857142857142,0.0673435029701474,0.6590158423347396,0.06771930178345034,0.6799028498026038,0.07047590125597848,0.6624555292027603,0.0721248119992936,0.6452380952380952,0.05016977977548923,0.5954381307077385,0.06114350922554513,0.6296422195917994,0.07692682031615919,0.5974855696207915,0.06531680188025496,0.9533729675867818,0.01171647555533869,0.7528571428571429,0.027330180671012855,0.9755250194451648,0.006213851706247248,0.822434637832868,0.026567667174673414,0.24735379460879597,0.04673308028747034,0.06151416634635892,0.014799767616865855 +s1_moe,models/abl_full/s1_moe/seed42,0.9105140381563668,0.5583203783065406,0.9081213554959154,0.2929669637495464,0.5144287858175314,0.05222769965594899,0.07824805140382134,0.13284472877537107,0.7955927189450559,0.18139070929494158,0.8863389242948788,0.09998014915398587,0.6018270786490667,0.04510725796194226,0.1861774443811016,0.11421660992070844,0.6785714285714285,0.03912303982179759,0.6283949264940283,0.04723947170460931,0.6550060501351513,0.057755672220942474,0.6293246461512715,0.04952765477213993,0.6714285714285714,0.054606404481808174,0.6236029649098804,0.0609510201663861,0.6648749215303836,0.07841896250718941,0.630740239695576,0.06822260291411461,0.9500396342534485,0.014290090778642328,0.7457142857142858,0.03149343955006944,0.9737706334802525,0.007575117962473199,0.8148343102325404,0.0312513648447909,0.27210450590411284,0.05713032818829422,0.06842654049228214,0.017588239010530773 +s1_llm,models/abl_full/s1_llm/seed42,0.9664999111869987,0.6092440138436447,0.9312116139258919,0.31519016684619855,0.5191321368401227,0.04608458146394721,0.0464814847004378,0.10702101948116965,0.7941472423146012,0.19496533924809686,0.8847355592827743,0.10672503199904841,0.612046527581894,0.04184654036430236,0.1942962185648381,0.08633257826101888,0.7214285714285713,0.06144518047887591,0.672703298336439,0.061700087538997354,0.6992473486552994,0.06495931304343325,0.6748603085568148,0.06528928747510024,0.6595238095238095,0.06326347740755436,0.5986529924337259,0.07185963720361778,0.6298331920180659,0.08586973889602928,0.6034856486764326,0.07805952152979412,0.9734916148483135,0.02219715383749552,0.8994078416379934,0.1193210012004697,0.906261343012704,0.09781609924991808,0.8745698672026105,0.07332155517028771,0.21088800669840985,0.011832466231885556,0.05097368578929492,0.005145672056299937 +s1_both,models/abl_full/s1_both/seed42,0.9923132343705776,0.5984792866289451,0.9462270251540387,0.31139629291100435,0.5201510432974168,0.04270959104369673,0.011977608975169663,0.11548120300234146,0.7935433976306223,0.23319925995033153,0.8814803314233683,0.12859169080609734,0.5820331384351507,0.061539044654339216,0.19519714034596314,0.15267046261263886,0.7095238095238096,0.03579356280564977,0.6525133374440925,0.038896714345804356,0.6736664429488562,0.045941327217941516,0.6532400006073505,0.03965670173096385,0.65,0.058612064881386504,0.6017754740722191,0.08029513301572835,0.6427726447222246,0.09880211353738708,0.6030584998804541,0.08094020366006734,0.9736009044657997,0.026575657889142013,0.8911027568922305,0.1303200307180046,0.9379310344827585,0.09496854726841662,0.8862220817530553,0.09421858471870986,0.20073152479828177,0.03549650407693031,0.04979843734415591,0.013252880014325175 +s2_chemeleon,models/abl_full/s2_chemeleon/seed42,0.903802642898307,0.5929400225184294,0.8979455520213733,0.3122441808958788,0.4928752020139133,0.0495419362851832,0.11410313255786235,0.1204275394579768,0.7381194731687182,0.2091384962224589,0.8505712663701182,0.12102889735204397,0.5702807707795248,0.06533542314510579,0.2548430757783964,0.1156502287890857,0.7428571428571429,0.04856209060564558,0.6751603019955145,0.05614891760744137,0.6842428542265299,0.05895283174871104,0.6779598307547847,0.05855626494166107,0.6595238095238095,0.06370994362028405,0.6127545835515749,0.07688923240091776,0.6347386786882585,0.09232384316051383,0.6082939280291012,0.08237421604559148,0.9500396342534485,0.014290090778642328,0.7457142857142858,0.03149343955006944,0.9737706334802525,0.007575117962473199,0.8148343102325404,0.0312513648447909,0.20704638277487444,0.03991347109214457,0.05175330701397725,0.012228350384015424 +s2_unimol,models/abl_full/s2_unimol/seed42,0.9303327863051951,0.5778056760896338,0.9170586161243998,0.29889175448177907,0.5025837030204048,0.0408894603691881,0.064500833460348,0.11454927907706133,0.7672494552644494,0.14680574779598,0.8720920569967096,0.08188345002317256,0.5787805378654268,0.044759850128355844,0.21418953190555018,0.07045781780651408,0.7095238095238094,0.05909368402852792,0.6585599032918454,0.054886308955929025,0.6821644666642712,0.05453390940528367,0.659732251875109,0.060231264777942696,0.6428571428571429,0.05583828285504082,0.5909192725033799,0.07033238217058627,0.623256383205963,0.08637909720283998,0.5923382433549603,0.07395249281228188,0.9602675711324664,0.02670956425027978,0.8339598997493735,0.1326617340600562,0.9309134906231094,0.09135023416434847,0.8425857181166915,0.08101827820431802,0.2612869586441918,0.14203850605710744,0.06314595981555801,0.03467433612718449 +s3_molt5,models/abl_full/s3_molt5/seed42,0.9227067036956227,0.5199870933377366,0.9228142569789096,0.26668436551865127,0.5124932384156509,0.04507978286518577,0.010425849767201244,0.24753068849177795,0.8048373355256719,0.17250908161164208,0.8921173336727133,0.09467839503477547,0.6165529106534359,0.034158216580699625,0.17892854747895015,0.08214903554490538,0.6833333333333333,0.06759556936465899,0.6355391927882461,0.04059280608600703,0.6530347007458268,0.040364692300862884,0.6301784064438857,0.05470706286623488,0.6547619047619048,0.051617817592092385,0.6020304415106678,0.06288423031767923,0.6363509506366649,0.0821547163009543,0.6064895239355201,0.06770860070155689,0.9500396342534485,0.014290090778642328,0.7457142857142858,0.03149343955006944,0.9737706334802525,0.007575117962473199,0.8148343102325404,0.0312513648447909,0.23579819098614493,0.04050316258737932,0.05852131493138515,0.009666197194003964 +s3_biot5,models/abl_full/s3_biot5/seed42,0.9253491770098258,0.5635209849670987,0.9156015337041241,0.29499662453743664,0.5156049885471186,0.06859721905644692,0.0703256550049209,0.07442452395794621,0.8061615891502468,0.1941861553420283,0.8915428998157159,0.10636186787769025,0.6057242852078679,0.05156305156562382,0.18310708318358765,0.07387529634285352,0.6904761904761905,0.022587697572631283,0.6413453344623661,0.03407905209553118,0.6715076838590968,0.04363499054826829,0.6431511240443177,0.03355328448013278,0.669047619047619,0.06917066212539978,0.6110265528287455,0.07895636486811598,0.6514929701484322,0.10032860777148758,0.6186939335446457,0.0872135273694844,0.9467609457288584,0.018697295798137017,0.7403571428571428,0.03799167470563487,0.972046495549218,0.009885999763715384,0.8084466888449189,0.03946512235537587,0.24918222297916376,0.0692551792233217,0.06178151828791116,0.018524576017435603 +s2_mpnn,models/abl_full/s1_baseline/seed42,0.976582486231686,0.5963594058421813,0.9386443449876178,0.30907811286866,0.5093074968606859,0.045639036325825846,0.030267447403631187,0.07652419024801474,0.7531908574686035,0.20899310967661966,0.8594886207759702,0.12029201230848217,0.5876535972008421,0.05617003172137069,0.23850857369075168,0.11987061343757097,0.7142857142857142,0.0673435029701474,0.6590158423347396,0.06771930178345034,0.6799028498026038,0.07047590125597848,0.6624555292027603,0.0721248119992936,0.6452380952380952,0.05016977977548923,0.5954381307077385,0.06114350922554513,0.6296422195917994,0.07692682031615919,0.5974855696207915,0.06531680188025496,0.9533729675867818,0.01171647555533869,0.7528571428571429,0.027330180671012855,0.9755250194451648,0.006213851706247248,0.822434637832868,0.026567667174673414,0.24735379460879597,0.04673308028747034,0.06151416634635892,0.014799767616865855 diff --git a/scripts/precompute_chemeleon.py b/scripts/precompute_chemeleon.py new file mode 100644 index 0000000..f5bc701 --- /dev/null +++ b/scripts/precompute_chemeleon.py @@ -0,0 +1,74 @@ +"""在 chemeleon 环境(chemprop>=2.2)中运行:把数据集里所有唯一 SMILES 编码成 CheMeleon 指纹缓存。 + +用法(工作目录 = lnp_ml 根,且同目录有 chemeleon_fingerprint.py): + conda activate chemeleon + python scripts/precompute_chemeleon.py --out data/processed/chemeleon_embeddings.npz + +产物 .npz 含 "smiles" (N,) 与 "embeddings" (N, D),供主项目查表使用。 +首次运行会自动把权重下载到 ~/.chemprop/chemeleon_mp.pt。 +""" +import argparse +import sys +from pathlib import Path + +import numpy as np +import pandas as pd + +DATA_FILES = [ + "data/interim/internal.csv", + "data/external/all_data_LiON.csv", +] +GLOB_FILES = [ + "data/external/all_amine_split_for_LiON/cv_*/train.csv", + "data/external/all_amine_split_for_LiON/cv_*/test.csv", +] + + +def collect_smiles(root: Path) -> list: + seen: set = set() + files = [root / f for f in DATA_FILES] + for pattern in GLOB_FILES: + files += sorted(root.glob(pattern)) + for f in files: + if not f.exists(): + print(f"跳过不存在的文件: {f}") + continue + df = pd.read_csv(f, low_memory=False) + if "smiles" in df.columns: + seen.update(df["smiles"].dropna().astype(str).tolist()) + return sorted(seen) + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--out", default="data/processed/chemeleon_embeddings.npz") + ap.add_argument("--root", default=".", help="lnp_ml 仓库根目录") + ap.add_argument("--batch-size", type=int, default=1024) + ap.add_argument("--device", default=None, help="cpu / cuda,默认自动") + args = ap.parse_args() + + # chemeleon_fingerprint.py 在仓库根,确保可 import + sys.path.insert(0, str(Path(args.root).resolve())) + from chemeleon_fingerprint import CheMeleonFingerprint + + fp = CheMeleonFingerprint(device=args.device) + smiles = collect_smiles(Path(args.root)) + print(f"收集到 {len(smiles)} 个唯一 SMILES,开始编码...") + + chunks = [] + for i in range(0, len(smiles), args.batch_size): + batch = smiles[i : i + args.batch_size] + chunks.append(np.asarray(fp(batch), dtype=np.float32)) + print(f" {min(i + args.batch_size, len(smiles))}/{len(smiles)}") + embeddings = np.vstack(chunks) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + np.savez_compressed( + out, smiles=np.array(smiles), embeddings=embeddings + ) + print(f"已保存 {embeddings.shape} 到 {out}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/precompute_unimol.py b/scripts/precompute_unimol.py new file mode 100644 index 0000000..64114da --- /dev/null +++ b/scripts/precompute_unimol.py @@ -0,0 +1,103 @@ +"""在 unimol 环境(pip install unimol-tools)中运行:把数据集所有唯一 SMILES 编码成 UniMol 表征缓存。 + +用法(工作目录 = lnp_ml 根): + conda activate unimol + python scripts/precompute_unimol.py --out data/processed/unimol_embeddings.npz + +产物 .npz 含 "smiles" (N,) 与 "embeddings" (N, D),供主项目查表使用。 +首次运行会自动下载 UniMol 预训练权重(HF 不通时先 export HF_ENDPOINT=https://hf-mirror.com)。 +""" +import argparse +from pathlib import Path + +import numpy as np +import pandas as pd + +DATA_FILES = [ + "data/interim/internal.csv", + "data/external/all_data_LiON.csv", +] +GLOB_FILES = [ + "data/external/all_amine_split_for_LiON/cv_*/train.csv", + "data/external/all_amine_split_for_LiON/cv_*/test.csv", +] + + +def collect_smiles(root: Path) -> list: + seen: set = set() + files = [root / f for f in DATA_FILES] + for pattern in GLOB_FILES: + files += sorted(root.glob(pattern)) + for f in files: + if not f.exists(): + print(f"跳过不存在的文件: {f}") + continue + df = pd.read_csv(f, low_memory=False) + if "smiles" in df.columns: + seen.update(df["smiles"].dropna().astype(str).tolist()) + return sorted(seen) + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--out", default="data/processed/unimol_embeddings.npz") + ap.add_argument("--root", default=".", help="lnp_ml 仓库根目录") + ap.add_argument("--model-name", default="unimolv1", help="unimolv1 / unimolv2") + ap.add_argument("--model-size", default="84m", help="仅 unimolv2 生效") + ap.add_argument("--batch-size", type=int, default=64) + args = ap.parse_args() + + from unimol_tools import UniMolRepr + clf = UniMolRepr( + data_type="molecule", remove_hs=False, + model_name=args.model_name, model_size=args.model_size, + ) + + smiles = collect_smiles(Path(args.root)) + print(f"收集到 {len(smiles)} 个唯一 SMILES,开始编码...") + + def encode_one(s): + try: + rep = clf.get_repr([s], return_atomic_reprs=True) + return np.asarray(rep["cls_repr"], dtype=np.float32).reshape(-1) + except Exception as e: + print(f" 跳过(编码失败): {s[:40]}... ({e})") + return None + + vecs: dict = {} + dim = None + bs = args.batch_size + for i in range(0, len(smiles), bs): + batch = smiles[i:i + bs] + try: + rep = clf.get_repr(batch, return_atomic_reprs=True) + cls = np.asarray(rep["cls_repr"], dtype=np.float32) + if cls.ndim != 2 or cls.shape[0] != len(batch): + raise ValueError(f"返回形状 {cls.shape} 与输入 {len(batch)} 不对齐") + for s, v in zip(batch, cls): + vecs[s] = v + dim = v.shape[0] + except Exception as e: + print(f" 批量失败,改逐条: {e}") + for s in batch: + v = encode_one(s) + vecs[s] = v + if v is not None: + dim = v.shape[0] + print(f" {min(i + bs, len(smiles))}/{len(smiles)}") + + if dim is None: + raise RuntimeError("没有任何 SMILES 编码成功,请检查 unimol-tools 安装与权重。") + n_fail = sum(1 for s in smiles if vecs.get(s) is None) + embeddings = np.vstack([ + vecs[s] if vecs.get(s) is not None else np.zeros(dim, np.float32) for s in smiles + ]) + + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + np.savez_compressed(out, smiles=np.array(smiles), embeddings=embeddings) + print(f"已保存 {embeddings.shape} 到 {out}(失败 {n_fail} 个已置零)") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts_run/run_ablation_full.sh b/scripts_run/run_ablation_full.sh new file mode 100644 index 0000000..7ca853f --- /dev/null +++ b/scripts_run/run_ablation_full.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +set -uo pipefail +cd "$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +# ===== 环境(可复现)===== +export TRANSFORMERS_OFFLINE=1 HF_HUB_OFFLINE=1 PYTHONUNBUFFERED=1 +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True TOKENIZERS_PARALLELISM=false +export PYTHONHASHSEED=${PYTHONHASHSEED:-42} +mkdir -p logs models/abl_full reports + +# ===== 参数 ===== +SEED=${SEED:-42} +BATCH=${BATCH:-16}; QBATCH=${QBATCH:-8} +N_OUTER=${N_OUTER:-5}; N_INNER=${N_INNER:-3} +N_TRIALS=${N_TRIALS:-20}; EPOCHS=${EPOCHS:-20}; PATIENCE=${PATIENCE:-5} +INPUT=${INPUT:-data/interim/internal.csv} +CHEM_CACHE=data/processed/chemeleon_embeddings.npz +UNIMOL_CACHE=data/processed/unimol_embeddings.npz +MOLT5=models/molt5-base; BIOT5=models/biot5-plus-base; QWEN=models/qwen2.5-7b-instruct +LLM_COMMON="--use-llm --use-rag --rag-top-k 4 --use-soft-prompt --no-llm-freeze" + +GPU_POOL=${GPU_POOL:-0,1} # 我们可用的卡 +MAX_RETRY=${MAX_RETRY:-5} +POLL=${POLL:-60} # 轮询/重试间隔(秒) +IFS=',' read -r -a POOL <<< "$GPU_POOL" + +ts(){ awk '{ print strftime("%F %T"), $0; fflush() }'; } + +record_env(){ local dir=$1; shift + { echo "date: $(date -Is)" + echo "git_commit: $(git rev-parse HEAD 2>/dev/null)" + echo "git_dirty_files: $(git status --porcelain 2>/dev/null | wc -l)" + echo "seed: $SEED pythonhashseed: $PYTHONHASHSEED" + echo "cmd: $*"; } > "${dir}/repro.txt" + git diff > "${dir}/local_uncommitted.patch" 2>/dev/null + pip freeze > "${dir}/pip_freeze.txt" 2>/dev/null +} + +wait_free(){ local gpu=$1 need=$2 free + while :; do + free=$(nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits -i "$gpu" 2>/dev/null) + [ "${free:-0}" -ge "$need" ] && return 0 + echo "[$(date '+%F %T')] GPU${gpu} 剩 ${free}MiB(<${need}) 等待 ${POLL}s..." >&2 + sleep "$POLL" + done +} + +run_one(){ local gpu=$1 name=$2 need=$3; shift 3 + local rundir="models/abl_full/${name}/seed${SEED}" + if ls "${rundir}"/summary.json "${rundir}"/*/summary.json >/dev/null 2>&1; then + echo "[$(date '+%F %T')] SKIP ${name}(已完成)"; return 0; fi + mkdir -p "${rundir}"; local n=1 + while :; do + wait_free "$gpu" "$need" + echo "[$(date '+%F %T')] >>> ${name} try $n on GPU${gpu}" | tee -a "${rundir}/run.log" + record_env "${rundir}" "GPU=$gpu $*" + if CUDA_VISIBLE_DEVICES="$gpu" python -m lnp_ml.modeling.nested_cv_optuna \ + --input-path "${INPUT}" \ + --output-dir "models/abl_full/${name}" --resume-dir "${rundir}" \ + --seed ${SEED} --device cuda \ + --n-outer-folds ${N_OUTER} --n-inner-folds ${N_INNER} \ + --n-trials ${N_TRIALS} --epochs-per-trial ${EPOCHS} --inner-patience ${PATIENCE} \ + "$@" 2>&1 | ts | tee -a "${rundir}/run.log"; then + echo "[$(date '+%F %T')] <<< ${name} DONE" | tee -a "${rundir}/run.log"; return 0; fi + (( n > MAX_RETRY )) && { echo "[$(date '+%F %T')] !!! ${name} FAILED x${MAX_RETRY}" | tee -a "${rundir}/run.log"; return 1; } + echo "[$(date '+%F %T')] ${name} 失败, ${POLL}s 后断点续跑重试..." | tee -a "${rundir}/run.log"; sleep "$POLL"; ((n++)) + done +} + +# ===== 变体队列:名称|需显存MiB|flags ===== +QUEUE=$(mktemp); LOCK="${QUEUE}.lock" +add(){ echo "$*" >> "$QUEUE"; } +# Study 2:encoder 消融(MoE/LLM 全关) +add "s2_chemeleon|8000|--batch-size ${BATCH} --use-chemeleon --chemeleon-cache ${CHEM_CACHE}" +add "s2_unimol|8000|--batch-size ${BATCH} --use-unimol --unimol-cache ${UNIMOL_CACHE}" +# Study 3:LLM backbone(同集成模式,T5→LoRA) +add "s3_molt5|10000|--batch-size ${BATCH} --use-mpnn ${LLM_COMMON} --llm-use-lora --llm-model-path ${MOLT5}" +add "s3_biot5|10000|--batch-size ${BATCH} --use-mpnn ${LLM_COMMON} --llm-use-lora --llm-model-path ${BIOT5}" +# Study 1:核心模块(LLM=Qwen-RAG,Qwen→QLoRA) +add "s1_baseline|8000|--batch-size ${BATCH} --use-mpnn" +add "s1_moe|8000|--batch-size ${BATCH} --use-mpnn --use-moe" +add "s1_llm|14000|--batch-size ${QBATCH} --use-mpnn ${LLM_COMMON} --llm-use-qlora --llm-model-path ${QWEN}" +add "s1_both|14000|--batch-size ${QBATCH} --use-mpnn --use-moe ${LLM_COMMON} --llm-use-qlora --llm-model-path ${QWEN}" + +pop_job(){ exec 9>"$LOCK"; flock 9 + local line; line=$(head -n1 "$QUEUE" 2>/dev/null) + [ -n "$line" ] && sed -i '1d' "$QUEUE" + flock -u 9; echo "$line"; } + +worker(){ local gpu=$1 + while :; do + local job; job=$(pop_job); [ -z "$job" ] && break + local name=${job%%|*}; local r=${job#*|}; local need=${r%%|*}; local flags=${r#*|} + run_one "$gpu" "$name" "$need" $flags + done +} + +echo "[$(date '+%F %T')] START seed=${SEED} pool=${GPU_POOL}" +for g in "${POOL[@]}"; do worker "$g" & done +wait + +# ===== 汇总 ===== +latest(){ ls -dt "models/abl_full/$1/seed${SEED}"/summary.json "models/abl_full/$1/seed${SEED}"/*/summary.json 2>/dev/null | head -1 | xargs -r dirname; } +sum_args=() +for name in s1_baseline s1_moe s1_llm s1_both s2_chemeleon s2_unimol s3_molt5 s3_biot5; do + d=$(latest "$name"); [ -n "$d" ] && sum_args+=(--run "${name}=$d") +done +d=$(latest s1_baseline); [ -n "$d" ] && sum_args+=(--run "s2_mpnn=$d") +python scripts/summarize_ablation.py "${sum_args[@]}" --out reports/ablation_full_summary.csv 2>&1 | ts | tee logs/summary_full.log +echo "[$(date '+%F %T')] ALL DONE" \ No newline at end of file