| |
|
|
| """ |
| Script to train multievolve neural network models. |
| |
| Example usage: |
| |
| conda activate multievolve |
| |
| p1_train.py \ |
| --experiment-name multievolve_example \ |
| --protein-name example_protein \ |
| --wt-files apex.fasta \ |
| --training-dataset-fname example_dataset.csv \ |
| --wandb-key <key> \ |
| --mode test |
| """ |
|
|
| import wandb |
| import argparse |
| import sys |
| import matplotlib |
| matplotlib.use('Agg') |
|
|
| from model.splitters import * |
| from model.featurizers import * |
| from model.predictors import * |
| from model.proposers import * |
|
|
| |
| import os |
| os.environ["WANDB_MODE"] = "disabled" |
| os.environ["WANDB_SILENT"] = "true" |
| |
|
|
| def parse_args(): |
| """Parse command line arguments.""" |
| parser = argparse.ArgumentParser(description='Train multievolveneural network models') |
|
|
| parser.add_argument( |
| '-e', |
| '--experiment-name', |
| required=True, |
| help='Name of the experiment' |
| ) |
| parser.add_argument( |
| '-p', |
| '--protein-name', |
| required=True, |
| help='Name of the protein' |
| ) |
| parser.add_argument( |
| '-wt', |
| '--wt-files', |
| required=True, |
| help='Comma separated list of paths to the wildtype FASTA files' |
| ) |
| parser.add_argument( |
| '-t', |
| '--training-dataset-fname', |
| required=True, |
| help='Path to the training dataset CSV file' |
| ) |
| parser.add_argument( |
| '-k', |
| '--wandb-key', |
| required=True, |
| help='WandB API key for authentication' |
| ) |
| parser.add_argument( |
| '-m', |
| '--mode', |
| required=True, |
| help='Training method of the experiment, options include: test or standard' |
| ) |
| args = parser.parse_args() |
| args.wt_files = [f.strip() for f in args.wt_files.split(',')] |
| return args |
|
|
| def main(): |
| |
| """Main function.""" |
|
|
| |
| args = parse_args() |
|
|
| try: |
| |
| |
| |
| import os |
| os.environ["WANDB_MODE"] = "disabled" |
| except Exception as e: |
| print(f"Error logging into WandB: {e}") |
| sys.exit(1) |
|
|
| |
| experiment_name = args.experiment_name |
| protein_name = args.protein_name |
| wt_files = args.wt_files |
| training_dataset_fname = args.training_dataset_fname |
|
|
| try: |
| |
| fold_splitter = KFoldProteinSplitter(protein_name, training_dataset_fname, wt_files, csv_has_header=True, use_cache=True, y_scaling=True, val_split=0.15) |
| splits = fold_splitter.generate_splits(n_splits=5) |
| except Exception as e: |
| print(f"Error generating splits: {e}") |
| sys.exit(1) |
|
|
| try: |
| |
| onehot = OneHotFeaturizer(protein=protein_name, use_cache=True) |
| features = [onehot] |
| except Exception as e: |
| print(f"Error generating features: {e}") |
| sys.exit(1) |
|
|
| |
| models = [Fcn] |
|
|
| if args.mode == 'test': |
| print("Running in test mode") |
| sweep_depth = 'test' |
| search_method = 'test' |
| elif args.mode == 'standard': |
| print("Running in standard mode") |
| sweep_depth = 'standard' |
| search_method = 'grid' |
|
|
| try: |
| |
| print(f"Running experiments for {experiment_name} with {protein_name}...") |
| run_nn_model_experiments(splits, |
| features, |
| models, |
| experiment_name=experiment_name, |
| use_cache=True, |
| sweep_depth=sweep_depth, |
| search_method=search_method, |
| show_plots=True, |
| ) |
| except Exception as e: |
| print(f"Error running experiments: {e}") |
| sys.exit(1) |
|
|
| if __name__ == '__main__': |
| main() |
|
|