Skip to main content

    Training & tuning

    Train a DTI model by pairing a drug and a protein encoder, tune train_epoch, LR, batch_size and cls_hidden_dims, then save the checkpoint with its config.

    DeepPurpose supports 50+ neural architecture combinations from 15+ compound encoders and 7+ protein encoders. This guide covers training DTI prediction models.

    Basic training loop

    from DeepPurpose import DTI as models
    from DeepPurpose import utils, dataset
    
    # Load and process data
    X_drugs, X_targets, y = dataset.load_process_DAVIS(
        path='./data',
        binary=False,
        convert_to_log=True,
        threshold=30
    )
    
    # Process data with chosen encoders
    train, val, test = utils.data_process(
        X_drug=X_drugs,
        X_target=X_targets,
        y=y,
        drug_encoding="Morgan",
        target_encoding="CNN",
        split_method="random",
        frac=[0.7, 0.1, 0.2],
    )
    
    # Configure and generate model
    config = utils.generate_config(
        drug_encoding="Morgan",
        target_encoding="CNN",
        cls_hidden_dims=[1024, 1024, 512],
        train_epoch=100,
        LR=0.001,
        batch_size=256,
        cnn_target_filters=[32, 64, 96],
        cnn_target_kernels=[4, 8, 12],
    )
    
    model = models.model_initialize(**config)
    model.train(train, val, test)
    model.save_model("outputs/model")

    Architecture options

    DeepPurpose uses a modular architecture where drug and target encoders are combined with a classifier head:

    Drug SMILES --> [Drug Encoder] --\
                                      +--> [Classifier MLP] --> Affinity Score
    Protein Seq --> [Target Encoder]-/

    Common encoder combinations:

    • Morgan + AAC: Fast baseline, good for small datasets
    • CNN + CNN: Balanced performance and speed
    • Transformer + Transformer: Best for large datasets
    • MPNN + CNN: Graph-based drug representation with sequence-based protein encoding

    Hyperparameter tips

    Key hyperparameters to tune:

    ParameterDefaultDescription
    train_epoch100Number of training epochs
    LR0.001Learning rate
    batch_size256Training batch size
    cls_hidden_dims[1024, 1024, 512]Classifier MLP hidden layer sizes
    cnn_drug_filters[32, 64, 96]CNN filter sizes for drug encoder
    cnn_target_filters[32, 64, 96]CNN filter sizes for target encoder
    transformer_n_layer_drug8Transformer layers for drug encoder
    transformer_n_layer_target8Transformer layers for target encoder

    Tuning recommendations:

    • Start with small epochs (10-20) and increase after verifying loss trends.
    • Use batch_size to fill GPU memory without OOM; scale LR with batch size cautiously.
    • For small datasets (<1000 samples), use simpler encoders (Morgan, AAC) and smaller hidden dims.
    • For GNN encoders (MPNN, DGL_*), reduce batch size as they are more memory-intensive.

    Validation and metrics

    DeepPurpose automatically evaluates on validation data during training:

    # Training automatically reports validation metrics
    model.train(train, val, test)
    
    # For manual evaluation
    from DeepPurpose import utils
    y_pred = model.predict(test)
    
    # Regression metrics
    from sklearn.metrics import mean_squared_error, r2_score
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    
    # Classification metrics (if binary=True)
    from sklearn.metrics import roc_auc_score, average_precision_score
    auc = roc_auc_score(y_test, y_pred)
    aupr = average_precision_score(y_test, y_pred)

    The training process logs:

    • Training and validation loss per epoch
    • MSE, Pearson correlation, Concordance Index (CI) for regression
    • AUROC, AUPRC for classification tasks

    Checkpoints

    • Save model.pt, encoder configs, and the command/args used.
    • Keep the tokenizer/featurizer versions with the checkpoint for reproducibility.

    Resource guidance

    • CPU-only runs: lower batch size (e.g., 64) and fewer workers.
    • GPU runs: ensure CUDA toolkit matches torch; set TORCH_CUDA_ARCH_LIST if building from source.

    Multi-task and virtual screening

    DeepPurpose also supports:

    # Virtual screening: predict all drug-target pairs
    from DeepPurpose import virtual_screening
    result = virtual_screening.virtual_screening(
        X_drugs, X_targets, model, drug_names, target_names
    )
    
    # Drug repurposing for a specific target
    from DeepPurpose import oneliner
    oneliner.repurpose(
        target='MKKFFDSRREQGGSGLGSGSSGGGGSTSGLGSGYIGRVFGIGRQQVTVDEVLAEGGFAIVFLVRTSNGMKCALKRMFVNNEHDLQVCKREIQIMRDLSGHKNIVGYIDSSINNVSSGDVWEVLILMDFCRGGQVVNLMNQRLQTGFTENEVLQIFCDTCEAVARLHQCKTPIIHRDLKVENILLHDRGHYVLCDFGSATNKFQNPQTEGVNAVEDEIKKYTTLSYRAPEMVNLYSGKIITTKADIWALGCLLYKLCYFTLPFGESQVAICDGNFTIPDNSRYSQDMHCLIRYMLEPDPDKRPDIYQVSYFSFKLLKKECPIPNVQNSPIPAKLPEPVKASEAAAKKTQPKARLTDPIPTTETSIAPRQRPKAGQTQPNPGILPIQPALTPRKRATVQPPPQAAGSSNQPGLLASVPQPKPQAPPSQPLPQTQAKQPQAPPTPQQTPSTQAQGLPAQAQATPQHQQQLFLKQQQQQQQPPPAQQQPAGTFYQQQQAQTQQFQAVHPATQKPAIAQFPVVSQGGSQQQLMQNFYQQQQQQQQQQQQQQLATALHQQQLMTQQAALQQKPTMAAGQQPQPQPAAAPQPAPAQEPAIQAPVRQQPKVQTTPPPAVQGQKVGSLTPPSSPKTQRAGHRRILSDVTHSAVFGVPASKSTQLLQAAAAEASLNKSKSATTTPSGSPRTSQQNVYNPSEGSTWNPFDDDNFSKLTAEELLNKDFAKLGEGKHPEKLGGSAESLIPGFQSTQGDAFATTSFSAGTAEKRKGGQTVDSGLPLLSVSDPFIPLQVPDAPEKLIEGLKSPDTSLLLPDLLPMTDPFGSTSDAVIEKADVAVESLIPGLEPPVPQRLPSQTESVTSNRTDSLTGEDSLLDCSLLSNPTTDLLEEFAPTAISAPVHKAAEDSNLISGFDVPEGSDKVAEDEFDPIPVLITKNPQGGHSRNSSGSSESSLPNLARSLLLVDQLIDL',
        target_name='JAK3',
        drug_names=drug_list,
        save_path='./repurposing_result'
    )

    Was this page helpful?

    On this page

    On this page

    Loading...