Tutorial for antigen-HLAII binding prediction with deepAntigen

This notebook introduces to predict antigen-HLAII binding using the deepAntigen method.

Import relevant packages

[1]:
from deepAntigen.antigenHLAII import run_antigenHLAII_seq
from deepAntigen.antigenHLAII import run_antigenHLAII_atom
from deepAntigen.antigenHLAII.utils.antigenHLAII_preprocess import split_data, process_pdb_absolute, process_pdb_relative, calculate_distance
from sklearn.metrics import roc_curve, auc, precision_recall_curve
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
import os

Download antigen-HLAII data

[2]:
#!wget https://github.com/JiangBioLab/deepAntigen/blob/main/test_antigenHLAII.zip
#!unzip test_antigenHLAII.zip

Inference anitgen-HLAII binding at the sequence level using deepAntigen

By utilizing parameters provided by us, you can directly predict antigen-HLAII binding, requiring only the preparation of the test dataset ‘test.csv’. You can use multiprocessing to accelerate sequence-to-graph transformation by parameter ‘multi_process’.

[3]:
df = run_antigenHLAII_seq.Inference('./test_antigenHLAII/Data/sequence/test.csv', multi_process=8)
peptide:WYQXKPGQPPKLLIYKASTLE
Prediction results have been saved to./antigenHLAII_Output/seq-level/pHLAII_predictions.csv
[4]:
df
[4]:
peptide alpha_n beta_n score label
0 QAGKEAEKLGQG DPA1*01:03 DPB1*01:01 0.550992 1
1 TRVGINIFTRLR DPA1*01:03 DPB1*01:01 0.511401 1
2 QVKRNAVPITPT DPA1*01:03 DPB1*01:01 0.824243 1
3 ITAVTATSNEIK DPA1*01:03 DPB1*01:01 0.614831 1
4 PAGKLKYFDKLN DPA1*01:03 DPB1*01:01 0.969304 1
... ... ... ... ... ...
12688 PRNDRNVFSRLTSNQ DRA*01:01 DRB5*01:01 0.016608 0
12689 DIPRVTALNRALVTV DRA*01:01 DRB5*01:01 0.869845 0
12690 TTVGMNGKDKDIPSFT DRA*01:01 DRB5*01:01 0.071086 0
12691 PVIYAGATSKNKMVSSAFTTE DRA*01:01 DRB5*01:01 0.133924 0
12692 PTGLSLTSSMTLNLVTSADYK DRA*01:01 DRB5*01:01 0.009127 0

12693 rows × 5 columns

The column ‘score’ is binding probability predicted by deepAntigen. The column ‘label’ is optional. If ‘label’ is provided in ‘test.csv’, the results will include ‘label’.

[5]:
#Draw ROC curve
score_list=list(df['score'])
label_list=list(df['label'])
hhList=[]
LegendLabels=[]
plt.figure(figsize=(9,9))
#font = {'weight' : 'normal',
#'size'   : 20}
#mpl.rc('font', **font)
fpr, tpr, thersholds = roc_curve(label_list, score_list, pos_label=1)
roc_auc = auc(fpr, tpr)
plt.plot([0,1],[0,1],ls='dashed',lw=3, color='whitesmoke')
hh, = plt.plot(fpr, tpr, color='#0675B4', lw=3)
hhList.append(hh)
LegendLabels.append('deepAntigen_seq'+'(AUC:'+str(round(roc_auc,2))+')')
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')
plt.title('ROC Curve')
legend=plt.legend(hhList,LegendLabels)
plt.show()
../_images/notebooks_test_antigenHLAII_11_0.png

Train deepAntigen using sequence-level anitgen-HLAII binding data

Split the dataset for 10-fold cross-validation

[6]:
split_data('./test_antigenHLAII/Data/sequence/train.csv',10)
Splited datasets have been saved to./test_antigenHLAII/Data/sequence/k_fold_dataset/

You can alter hyperparameters in ‘config_seq.ini’, and then start training.

[7]:
run_antigenHLAII_seq.Train('./test_antigenHLAII/Data/sequence/k_fold_dataset/', config_path='./test_antigenHLAII/config_seq.ini')
Epoch:1 Train_loss:5.0439 ACC:0.6377 AUROC:0.6921 Precision:0.6156 Recall:0.7329 F1:0.6692 AUPR:0.6555
Epoch:2 Train_loss:4.8022 ACC:0.6774 AUROC:0.7370 Precision:0.6442 Recall:0.7927 F1:0.7108 AUPR:0.6956
Epoch:3 Train_loss:4.7291 ACC:0.6876 AUROC:0.7503 Precision:0.6551 Recall:0.7924 F1:0.7172 AUPR:0.7102
Epoch:4 Train_loss:4.6657 ACC:0.6960 AUROC:0.7607 Precision:0.6635 Recall:0.7954 F1:0.7235 AUPR:0.7217
Epoch:5 Train_loss:4.6192 ACC:0.7025 AUROC:0.7684 Precision:0.6704 Recall:0.7965 F1:0.7281 AUPR:0.7319
Epoch:5 Val_loss:4.5034 ACC:0.7185 AUROC:0.7863 Precision:0.6762 Recall:0.8380 F1:0.7484 AUPR:0.7529
==> Saving model...
Epoch:6 Train_loss:4.5996 ACC:0.7040 AUROC:0.7713 Precision:0.6715 Recall:0.7988 F1:0.7296 AUPR:0.7353
Epoch:7 Train_loss:4.5730 ACC:0.7077 AUROC:0.7757 Precision:0.6759 Recall:0.7982 F1:0.7320 AUPR:0.7406
Epoch:8 Train_loss:4.5489 ACC:0.7114 AUROC:0.7794 Precision:0.6798 Recall:0.7994 F1:0.7348 AUPR:0.7450
Epoch:9 Train_loss:4.5361 ACC:0.7129 AUROC:0.7808 Precision:0.6811 Recall:0.8006 F1:0.7360 AUPR:0.7463
Epoch:10 Train_loss:4.5291 ACC:0.7128 AUROC:0.7822 Precision:0.6811 Recall:0.8004 F1:0.7360 AUPR:0.7493
Epoch:10 Val_loss:4.4336 ACC:0.7276 AUROC:0.7989 Precision:0.6814 Recall:0.8539 F1:0.7580 AUPR:0.7673
==> Saving model...
==> Saving model...
Epoch:11 Train_loss:4.5170 ACC:0.7154 AUROC:0.7834 Precision:0.6846 Recall:0.7989 F1:0.7373 AUPR:0.7509
Epoch:12 Train_loss:4.4965 ACC:0.7169 AUROC:0.7865 Precision:0.6856 Recall:0.8010 F1:0.7389 AUPR:0.7540
Epoch:13 Train_loss:4.4877 ACC:0.7166 AUROC:0.7879 Precision:0.6863 Recall:0.7977 F1:0.7378 AUPR:0.7559
Epoch:14 Train_loss:4.4813 ACC:0.7178 AUROC:0.7882 Precision:0.6864 Recall:0.8022 F1:0.7398 AUPR:0.7576
Epoch:15 Train_loss:4.4694 ACC:0.7191 AUROC:0.7900 Precision:0.6882 Recall:0.8013 F1:0.7405 AUPR:0.7585
Epoch:15 Val_loss:4.3768 ACC:0.7335 AUROC:0.8022 Precision:0.7026 Recall:0.8091 F1:0.7521 AUPR:0.7732
==> Saving model...
Epoch:16 Train_loss:4.4709 ACC:0.7195 AUROC:0.7898 Precision:0.6879 Recall:0.8036 F1:0.7413 AUPR:0.7569
Epoch:17 Train_loss:4.4670 ACC:0.7197 AUROC:0.7902 Precision:0.6885 Recall:0.8024 F1:0.7411 AUPR:0.7590
Epoch:18 Train_loss:4.4468 ACC:0.7213 AUROC:0.7932 Precision:0.6905 Recall:0.8021 F1:0.7421 AUPR:0.7614
Epoch:19 Train_loss:4.4384 ACC:0.7228 AUROC:0.7943 Precision:0.6916 Recall:0.8045 F1:0.7438 AUPR:0.7649
Epoch:20 Train_loss:4.4436 ACC:0.7229 AUROC:0.7938 Precision:0.6921 Recall:0.8030 F1:0.7434 AUPR:0.7634
Epoch:20 Val_loss:4.3101 ACC:0.7394 AUROC:0.8115 Precision:0.7191 Recall:0.7853 F1:0.7507 AUPR:0.7835
==> Saving model...
==> Saving model...
Epoch:21 Train_loss:4.4311 ACC:0.7226 AUROC:0.7949 Precision:0.6920 Recall:0.8022 F1:0.7430 AUPR:0.7647
Epoch:22 Train_loss:4.4196 ACC:0.7245 AUROC:0.7962 Precision:0.6931 Recall:0.8057 F1:0.7452 AUPR:0.7652
Epoch:23 Train_loss:4.4113 ACC:0.7257 AUROC:0.7978 Precision:0.6953 Recall:0.8033 F1:0.7454 AUPR:0.7682
Epoch:24 Train_loss:4.4078 ACC:0.7269 AUROC:0.7980 Precision:0.6961 Recall:0.8057 F1:0.7469 AUPR:0.7682
Epoch:25 Train_loss:4.4080 ACC:0.7263 AUROC:0.7978 Precision:0.6951 Recall:0.8065 F1:0.7466 AUPR:0.7670
Epoch:25 Val_loss:4.3286 ACC:0.7358 AUROC:0.8090 Precision:0.6990 Recall:0.8287 F1:0.7583 AUPR:0.7825
Epoch:26 Train_loss:4.3925 ACC:0.7266 AUROC:0.8006 Precision:0.6963 Recall:0.8037 F1:0.7462 AUPR:0.7720
Epoch:27 Train_loss:4.3788 ACC:0.7294 AUROC:0.8019 Precision:0.6986 Recall:0.8069 F1:0.7488 AUPR:0.7746
Epoch:28 Train_loss:4.3780 ACC:0.7282 AUROC:0.8023 Precision:0.6980 Recall:0.8045 F1:0.7475 AUPR:0.7751
Epoch:29 Train_loss:4.3515 ACC:0.7315 AUROC:0.8060 Precision:0.7017 Recall:0.8053 F1:0.7500 AUPR:0.7808
Epoch:30 Train_loss:4.3063 ACC:0.7366 AUROC:0.8118 Precision:0.7084 Recall:0.8041 F1:0.7532 AUPR:0.7871
Epoch:30 Val_loss:4.1804 ACC:0.7491 AUROC:0.8269 Precision:0.7155 Recall:0.8268 F1:0.7671 AUPR:0.8035
==> Saving model...
==> Saving model...
Epoch:31 Train_loss:4.3101 ACC:0.7354 AUROC:0.8109 Precision:0.7067 Recall:0.8049 F1:0.7526 AUPR:0.7875
Epoch:32 Train_loss:4.2905 ACC:0.7383 AUROC:0.8135 Precision:0.7095 Recall:0.8070 F1:0.7551 AUPR:0.7886
Epoch:33 Train_loss:4.2855 ACC:0.7383 AUROC:0.8139 Precision:0.7103 Recall:0.8050 F1:0.7547 AUPR:0.7905
Epoch:34 Train_loss:4.2908 ACC:0.7375 AUROC:0.8130 Precision:0.7084 Recall:0.8073 F1:0.7546 AUPR:0.7884
Epoch:35 Train_loss:4.2851 ACC:0.7388 AUROC:0.8139 Precision:0.7098 Recall:0.8079 F1:0.7557 AUPR:0.7897
Epoch:35 Val_loss:4.1721 ACC:0.7530 AUROC:0.8283 Precision:0.7394 Recall:0.7806 F1:0.7594 AUPR:0.8043
==> Saving model...
Epoch:36 Train_loss:4.3067 ACC:0.7358 AUROC:0.8106 Precision:0.7063 Recall:0.8071 F1:0.7534 AUPR:0.7857
Epoch:37 Train_loss:4.2658 ACC:0.7412 AUROC:0.8159 Precision:0.7125 Recall:0.8088 F1:0.7576 AUPR:0.7918
Epoch:38 Train_loss:4.2784 ACC:0.7401 AUROC:0.8147 Precision:0.7112 Recall:0.8085 F1:0.7567 AUPR:0.7901
Epoch:39 Train_loss:4.2578 ACC:0.7429 AUROC:0.8168 Precision:0.7144 Recall:0.8096 F1:0.7590 AUPR:0.7916
Epoch:40 Train_loss:4.2403 ACC:0.7433 AUROC:0.8193 Precision:0.7145 Recall:0.8104 F1:0.7594 AUPR:0.7952
Epoch:40 Val_loss:4.1207 ACC:0.7623 AUROC:0.8324 Precision:0.7376 Recall:0.8148 F1:0.7743 AUPR:0.8085
==> Saving model...
==> Saving model...
Epoch:41 Train_loss:4.2559 ACC:0.7413 AUROC:0.8169 Precision:0.7128 Recall:0.8082 F1:0.7575 AUPR:0.7927
Epoch:42 Train_loss:4.2514 ACC:0.7415 AUROC:0.8174 Precision:0.7120 Recall:0.8112 F1:0.7584 AUPR:0.7919
Epoch:43 Train_loss:4.2590 ACC:0.7418 AUROC:0.8169 Precision:0.7130 Recall:0.8094 F1:0.7581 AUPR:0.7930
Epoch:44 Train_loss:4.2423 ACC:0.7428 AUROC:0.8184 Precision:0.7136 Recall:0.8112 F1:0.7592 AUPR:0.7945
Epoch:45 Train_loss:4.2595 ACC:0.7420 AUROC:0.8167 Precision:0.7129 Recall:0.8104 F1:0.7585 AUPR:0.7928
Epoch:45 Val_loss:4.2179 ACC:0.7465 AUROC:0.8217 Precision:0.7174 Recall:0.8139 F1:0.7626 AUPR:0.8022
Epoch:46 Train_loss:4.2765 ACC:0.7392 AUROC:0.8151 Precision:0.7099 Recall:0.8088 F1:0.7562 AUPR:0.7914
Epoch:47 Train_loss:4.2305 ACC:0.7451 AUROC:0.8202 Precision:0.7167 Recall:0.8106 F1:0.7607 AUPR:0.7957
Epoch:48 Train_loss:4.2365 ACC:0.7429 AUROC:0.8198 Precision:0.7145 Recall:0.8092 F1:0.7589 AUPR:0.7971
Epoch:49 Train_loss:4.2281 ACC:0.7447 AUROC:0.8205 Precision:0.7149 Recall:0.8141 F1:0.7613 AUPR:0.7968
Epoch:50 Train_loss:4.2044 ACC:0.7475 AUROC:0.8230 Precision:0.7188 Recall:0.8131 F1:0.7631 AUPR:0.7984
Epoch:50 Val_loss:4.1717 ACC:0.7539 AUROC:0.8359 Precision:0.7680 Recall:0.7274 F1:0.7471 AUPR:0.8146
==> Saving model...
==> Saving model...
Parameters of pre-trained model have been save to./antigenHLAII_training_log/

This is a example, we only train 50 epochs to save time. To test the model you just trained, you need to prepare a test dataset ‘test.csv’ and model parameters ‘seq-level_parameters’

[8]:
df = run_antigenHLAII_seq.Inference('./test_antigenHLAII/Data/sequence/test.csv', model_path='./antigenHLAII_training_log/seq-level_parameters.pt')
peptide:WYQXKPGQPPKLLIYKASTLE
Prediction results have been saved to./antigenHLAII_Output/seq-level/pHLAII_predictions.csv
[9]:
df
[9]:
peptide alpha_n beta_n score label
0 QAGKEAEKLGQG DPA1*01:03 DPB1*01:01 0.374021 1
1 TRVGINIFTRLR DPA1*01:03 DPB1*01:01 0.649740 1
2 QVKRNAVPITPT DPA1*01:03 DPB1*01:01 0.695249 1
3 ITAVTATSNEIK DPA1*01:03 DPB1*01:01 0.490852 1
4 PAGKLKYFDKLN DPA1*01:03 DPB1*01:01 0.467178 1
... ... ... ... ... ...
12688 PRNDRNVFSRLTSNQ DRA*01:01 DRB5*01:01 0.195245 0
12689 DIPRVTALNRALVTV DRA*01:01 DRB5*01:01 0.443333 0
12690 TTVGMNGKDKDIPSFT DRA*01:01 DRB5*01:01 0.578869 0
12691 PVIYAGATSKNKMVSSAFTTE DRA*01:01 DRB5*01:01 0.286877 0
12692 PTGLSLTSSMTLNLVTSADYK DRA*01:01 DRB5*01:01 0.115692 0

12693 rows × 5 columns

[10]:
#Draw ROC curve
score_list=list(df['score'])
label_list=list(df['label'])
hhList=[]
LegendLabels=[]
plt.figure(figsize=(9,9))
#font = {'weight' : 'normal',
#'size'   : 20}
#mpl.rc('font', **font)
fpr, tpr, thersholds = roc_curve(label_list, score_list, pos_label=1)
roc_auc = auc(fpr, tpr)
plt.plot([0,1],[0,1],ls='dashed',lw=3, color='whitesmoke')
hh, = plt.plot(fpr, tpr, color='#0675B4', lw=3)
hhList.append(hh)
LegendLabels.append('deepAntigen_seq'+'(AUC:'+str(round(roc_auc,2))+')')
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')
plt.title('ROC Curve')
legend=plt.legend(hhList,LegendLabels)
plt.show()
../_images/notebooks_test_antigenHLAII_20_0.png

Inference anitgen-HLAII binding at the atom level using deepAntigen

By utilizing parameters provided by us, you can directly predict atom-level contact between antigen and HLAII, requiring only the preparation of the test dataset ‘sample.csv’. Although inferring atom-level contact, deepAntigen only requires the residue sequences of antigen and HLAII as inputs.

[11]:
peptide_atoms, HLAII_atoms, contact_maps = run_antigenHLAII_atom.Inference('./test_antigenHLAII/Data/crystal_structure/sample.csv')
Prediction results have been saved to./antigenHLAII_Output/atom-level/
../_images/notebooks_test_antigenHLAII_23_1.png

The x-axis and y-axis respectively display top-15 crucial atoms of HLA and peptide. The heatmap represents the contact probabilities between these atoms.

Fine-tune deepAntigen using antigen-HLAII crystal structure data

Preprocess .pdb file in the directory ‘pdb’ download from Protein Data Bank according meta infomation provided in ‘info_noredudant.csv’.

[12]:
process_pdb_absolute('./test_antigenHLAII/Data/crystal_structure/pdb', './test_antigenHLAII/Data/crystal_structure/info_noredudant.csv')
1a6a
1aqd
1bx2
1dlh
1fv1
1h15
1hqr
1j8h
1jk8
1klg
1klu
1s9v
1sje
1sjh
1t5w
1uvq
1zgl
2ipk
2nna
2q6w
2seb
3c5j
3l6f
3pdo
3pgc
3qxa
4h1l
4is6
4mcy
4mcz
4md4
4md5
4mdi
4mdj
4ov5
4ozf
4ozh
4ozi
4x5w
4y19
4y1a
4z7u
5jlz
5ks9
5ksu
5ksv
5lax
5ni9
5nig
6atf
6ati
6atz
6bij
6bil
6bin
6bir
6biv
6bix
6biy
6biz
6cpl
6cpn
6cpo
6cqj
6hby
6nix
6px6
6xp6
7kei
7n19
7sg0
7sg1
7sg2
Processed pdb files have been saved to/quejinhao/deepAntigen/test_antigenHLAII/Data/crystal_structure/pdb_Extracted_absolute

Because residue IDs of alpha and beta chains in HLAII are repeative, we renumber residues to distinguish them by the following step.

[13]:
process_pdb_relative('./test_antigenHLAII/Data/crystal_structure/pdb', './test_antigenHLAII/Data/crystal_structure/info_noredudant.csv')
1a6a
1aqd
1bx2
1dlh
1fv1
1h15
1hqr
1j8h
1jk8
1klg
1klu
1s9v
1sje
1sjh
1t5w
1uvq
1zgl
2ipk
2nna
2q6w
2seb
3c5j
3l6f
3pdo
3pgc
3qxa
4h1l
4is6
4mcy
4mcz
4md4
4md5
4mdi
4mdj
4ov5
4ozf
4ozh
4ozi
4x5w
4y19
4y1a
4z7u
5jlz
5ks9
5ksu
5ksv
5lax
5ni9
5nig
6atf
6ati
6atz
6bij
6bil
6bin
6bir
6biv
6bix
6biy
6biz
6cpl
6cpn
6cpo
6cqj
6hby
6nix
6px6
6xp6
7kei
7n19
7sg0
7sg1
7sg2
Processed pdb files have been saved to/quejinhao/deepAntigen/test_antigenHLAII/Data/crystal_structure/pdb_Extracted_relative

Calculate pairwise distance between atoms on antigen and HLAII for each crystal structure.

[14]:
calculate_distance('./test_antigenHLAII/Data/crystal_structure/pdb_Extracted_relative/')
6biv
6cpl
5jlz
4x5w
6bir
5nig
6bij
4h1l
6atz
6biy
6atf
1fv1
2seb
6bix
6bin
5ksu
4mcy
7n19
5ni9
4y1a
4ozi
1dlh
2ipk
3l6f
4md5
6bil
4mdj
4y19
6cpo
5ks9
6cqj
1jk8
2q6w
7sg2
6biz
5ksv
2nna
1hqr
7kei
7sg0
6nix
1aqd
1uvq
6hby
4mcz
1sje
1a6a
4mdi
1bx2
1t5w
3pgc
6px6
1s9v
1j8h
1klg
1h15
4ov5
6xp6
1klu
3qxa
1zgl
4is6
7sg1
6ati
5lax
3pdo
1sjh
4z7u
4md4
6cpn
3c5j
4ozf
4ozh
Distance matrixs have been saved to /quejinhao/deepAntigen/test_antigenHLAII/Data/crystal_structure/distance_matrix

Then, you can utilize structural information to fine-tune model that you have pre-trained using sequence-level binding data. You can alter hyperparameters in ‘config_atom.ini’, and then start fine-tuning.

[15]:
run_antigenHLAII_atom.Train('./test_antigenHLAII/Data/crystal_structure/info_noredudant.csv', config_path='./test_antigenHLAII/config_atom.ini')
6atf
Start finetuning topk layer
Epoch:0,Loss:0.5568273266156515
Epoch:1,Loss:0.4925791927509838
Epoch:2,Loss:0.4791778897245725
Epoch:3,Loss:0.46348467220862705
Epoch:4,Loss:0.45802726017104256
Epoch:5,Loss:0.4553207465344005
Epoch:6,Loss:0.45143279598818886
Epoch:7,Loss:0.44172311657004887
Epoch:8,Loss:0.43982134842210346
Epoch:9,Loss:0.43906226174698937
Epoch:10,Loss:0.4381541742218865
Epoch:11,Loss:0.433044261402554
Epoch:12,Loss:0.42903078513012993
Epoch:13,Loss:0.4291529878973961
Epoch:14,Loss:0.42888811147875255
Epoch:15,Loss:0.429010137087769
Epoch:16,Loss:0.42430417819155586
Epoch:17,Loss:0.42585476570659214
Epoch:18,Loss:0.4254167866375711
Epoch:19,Loss:0.42115825083520675
Epoch:20,Loss:0.4202180521355735
Epoch:21,Loss:0.41875167604949737
Epoch:22,Loss:0.4190267473459244
Epoch:23,Loss:0.41944577544927597
Epoch:24,Loss:0.4189180831114451
Epoch:25,Loss:0.41634395884142983
Epoch:26,Loss:0.4167359529270066
Epoch:27,Loss:0.41542857471439576
Epoch:28,Loss:0.416060183611181
Epoch:29,Loss:0.4149810125430425
Epoch:30,Loss:0.4169421460893419
Epoch:31,Loss:0.4147675525810983
Epoch:32,Loss:0.41344016542037326
Epoch:33,Loss:0.4130163821909163
Epoch:34,Loss:0.4137866323192914
Epoch:35,Loss:0.41303183635075885
Epoch:36,Loss:0.41116999917560154
Epoch:37,Loss:0.4105463781290584
Epoch:38,Loss:0.41152887129121357
Epoch:39,Loss:0.41164979835351306
Epoch:40,Loss:0.40892636362049317
Epoch:41,Loss:0.4098371010687616
Epoch:42,Loss:0.41089782698286903
Epoch:43,Loss:0.41040824519263375
Epoch:44,Loss:0.4098495352599356
Epoch:45,Loss:0.4106290605333116
Epoch:46,Loss:0.4105355598860317
Epoch:47,Loss:0.41094520025783116
Epoch:48,Loss:0.40842970460653305
Epoch:49,Loss:0.4063319539030393
Epoch:50,Loss:0.4090523338980145
Epoch:51,Loss:0.4078923927413093
Epoch:52,Loss:0.4086091352833642
Epoch:53,Loss:0.4076576679944992
Epoch:54,Loss:0.40707125183608794
Epoch:55,Loss:0.40702533225218457
Epoch:56,Loss:0.4063916694786813
Epoch:57,Loss:0.4076012505425347
Epoch:58,Loss:0.41029467847612167
Epoch:59,Loss:0.40798158529731965
Epoch:60,Loss:0.4071550377541118
Epoch:61,Loss:0.40552038119898903
Epoch:62,Loss:0.4076957321829266
Epoch:63,Loss:0.40607522510819966
Epoch:64,Loss:0.4066423815157678
Epoch:65,Loss:0.4071982395317819
Epoch:66,Loss:0.4058130607008934
Epoch:67,Loss:0.404652390215132
Epoch:68,Loss:0.4043089606695705
Epoch:69,Loss:0.4042636917697059
Epoch:70,Loss:0.4038865930504269
Epoch:71,Loss:0.4036383082469304
Epoch:72,Loss:0.4048737229572402
Epoch:73,Loss:0.40326694150765735
Epoch:74,Loss:0.40498706036143833
Epoch:75,Loss:0.40638042158550686
Epoch:76,Loss:0.4045240705211957
Epoch:77,Loss:0.4059002358052466
Epoch:78,Loss:0.40563226242860156
Epoch:79,Loss:0.4042896620101399
Epoch:80,Loss:0.40398481488227844
Epoch:81,Loss:0.4039057261413998
Epoch:82,Loss:0.40400606476598316
Epoch:83,Loss:0.40698863565921783
Epoch:84,Loss:0.4049370777275827
Epoch:85,Loss:0.4041590086287922
Epoch:86,Loss:0.40237780329253936
Epoch:87,Loss:0.40355206032594043
Epoch:88,Loss:0.402332314186626
Epoch:89,Loss:0.403226166135735
Epoch:90,Loss:0.40266522268454236
Epoch:91,Loss:0.40327905780739254
Epoch:92,Loss:0.40337969611088437
Epoch:93,Loss:0.40201982193522984
Epoch:94,Loss:0.4031367277105649
Epoch:95,Loss:0.4018690023157332
Epoch:96,Loss:0.40154559910297394
Epoch:97,Loss:0.4015434698926078
Epoch:98,Loss:0.4007903320921792
Epoch:99,Loss:0.40204939660098815
Epoch:100,Loss:0.4013938580950101
Epoch:101,Loss:0.3997916421956486
Epoch:102,Loss:0.39817362030347186
Epoch:103,Loss:0.39722707288132775
Epoch:104,Loss:0.3985941550797886
Epoch:105,Loss:0.3975247922870848
Epoch:106,Loss:0.39804843730396694
Epoch:107,Loss:0.3977961366375287
Epoch:108,Loss:0.39712347835302353
Epoch:109,Loss:0.39697003612915677
Epoch:110,Loss:0.3966541017095248
Epoch:111,Loss:0.39710724105437595
Epoch:112,Loss:0.3968598312801785
Epoch:113,Loss:0.3969521290726132
Epoch:114,Loss:0.3970272019505501
Epoch:115,Loss:0.3963054633802838
Epoch:116,Loss:0.39681625614563626
Epoch:117,Loss:0.3971270082725419
Epoch:118,Loss:0.3978165677852101
Epoch:119,Loss:0.3964788690209389
Epoch:120,Loss:0.3966825165682369
Epoch:121,Loss:0.39682868205838734
Epoch:122,Loss:0.39717821611298454
Epoch:123,Loss:0.3965172982878155
Epoch:124,Loss:0.3959210589528084
Epoch:125,Loss:0.3972315539916356
Epoch:126,Loss:0.39650440712769824
Epoch:127,Loss:0.3959457435541683
Epoch:128,Loss:0.3966275511516465
Epoch:129,Loss:0.3964042291045189
Epoch:130,Loss:0.3967931965986888
Epoch:131,Loss:0.39611999359395766
Epoch:132,Loss:0.39642862064970863
Epoch:133,Loss:0.39654532074928284
Epoch:134,Loss:0.39619842916727066
Epoch:135,Loss:0.3965630249844657
Epoch:136,Loss:0.3973982027835316
Epoch:137,Loss:0.39581282602416146
Epoch:138,Loss:0.3966114330622885
Epoch:139,Loss:0.3964928256140815
Epoch:140,Loss:0.3964760684304767
Epoch:141,Loss:0.3958861157298088
Epoch:142,Loss:0.3953942366772228
Epoch:143,Loss:0.39651482386721504
Epoch:144,Loss:0.39617017490996254
Epoch:145,Loss:0.39550410045517814
Epoch:146,Loss:0.3957223544518153
Epoch:147,Loss:0.3958332712451617
Epoch:148,Loss:0.3964190052615272
Epoch:149,Loss:0.39628278464078903
Epoch:150,Loss:0.39612707164552474
Epoch:151,Loss:0.3953610683480899
Epoch:152,Loss:0.39543502363893723
Epoch:153,Loss:0.3960647127694554
Epoch:154,Loss:0.39614924291769665
Epoch:155,Loss:0.39514347662528354
Epoch:156,Loss:0.3958646108706792
Epoch:157,Loss:0.3964359296692742
Epoch:158,Loss:0.39647816866636276
Epoch:159,Loss:0.395459395315912
Epoch:160,Loss:0.39574114316039616
Epoch:161,Loss:0.3950125773747762
Epoch:162,Loss:0.39509237474865383
Epoch:163,Loss:0.39507335755560136
Epoch:164,Loss:0.3948473673727777
Epoch:165,Loss:0.3950723682840665
Epoch:166,Loss:0.39480609943469364
Epoch:167,Loss:0.3948626269896825
Epoch:168,Loss:0.39522404968738556
Epoch:169,Loss:0.39461930841207504
Epoch:170,Loss:0.3948370822601848
Epoch:171,Loss:0.3945269717110528
Epoch:172,Loss:0.39479285809728837
Epoch:173,Loss:0.3981964935859044
Epoch:174,Loss:0.3965342707104153
Epoch:175,Loss:0.39615851475132835
Epoch:176,Loss:0.39552199757761425
Epoch:177,Loss:0.3954224909345309
Epoch:178,Loss:0.3945978590183788
Epoch:179,Loss:0.39508283221059376
Epoch:180,Loss:0.39538440025515026
Epoch:181,Loss:0.3946085191435284
Epoch:182,Loss:0.3946130780710114
Epoch:183,Loss:0.39501507580280304
Epoch:184,Loss:0.39534974760479397
Epoch:185,Loss:0.3950491539306111
Epoch:186,Loss:0.39444689204295474
Epoch:187,Loss:0.39452027363909614
Epoch:188,Loss:0.3943787076407009
Epoch:189,Loss:0.39478033284346264
Epoch:190,Loss:0.39447659419642556
Epoch:191,Loss:0.3945150673389435
Epoch:192,Loss:0.3947307641307513
Epoch:193,Loss:0.39534183260467315
Epoch:194,Loss:0.3942858891354667
Epoch:195,Loss:0.3942301902506087
Epoch:196,Loss:0.39434027340677047
Epoch:197,Loss:0.39423548099067474
Epoch:198,Loss:0.39502790404690635
Epoch:199,Loss:0.3947424623701308
Start finetuning classifier layer
Epoch:0,Loss:12.780058741569519
==> Saving model...
Epoch:1,Loss:12.046601189507378
==> Saving model...
Epoch:2,Loss:11.270395543840197
==> Saving model...
Epoch:3,Loss:10.69086609284083
==> Saving model...
Epoch:4,Loss:10.105391383171082
==> Saving model...
Epoch:5,Loss:9.793606016370985
==> Saving model...
Epoch:6,Loss:9.4406847887569
==> Saving model...
Epoch:7,Loss:9.20606537659963
==> Saving model...
Epoch:8,Loss:8.924595329496595
==> Saving model...
Epoch:9,Loss:8.85567150513331
==> Saving model...
Epoch:10,Loss:8.694048351711697
==> Saving model...
Epoch:11,Loss:8.661465260717604
==> Saving model...
Epoch:12,Loss:8.578333093060387
==> Saving model...
Epoch:13,Loss:8.408742196030087
==> Saving model...
Epoch:14,Loss:8.42406631178326
Epoch:15,Loss:8.181252419948578
==> Saving model...
Epoch:16,Loss:8.161143991682264
==> Saving model...
Epoch:17,Loss:8.188011288642883
Epoch:18,Loss:8.097782982720268
==> Saving model...
Epoch:19,Loss:8.122037682268354
Epoch:20,Loss:7.965808961126539
==> Saving model...
Epoch:21,Loss:7.843626962767707
==> Saving model...
Epoch:22,Loss:7.954614440600078
Epoch:23,Loss:7.839911215835148
==> Saving model...
Epoch:24,Loss:7.5979125367270575
==> Saving model...
Epoch:25,Loss:7.724691867828369
Epoch:26,Loss:7.666975014739567
Epoch:27,Loss:7.641229232152303
Epoch:28,Loss:7.47723224427965
==> Saving model...
Epoch:29,Loss:7.452802744176653
==> Saving model...
Epoch:30,Loss:7.550305955939823
Epoch:31,Loss:7.654546161492665
Epoch:32,Loss:7.58865651819441
Epoch:33,Loss:7.50278107325236
Epoch:34,Loss:7.54792504840427
Epoch:35,Loss:7.509750114546882
Epoch:36,Loss:7.437020089891222
==> Saving model...
Epoch:37,Loss:7.374416424168481
==> Saving model...
Epoch:38,Loss:7.554099023342133
Epoch:39,Loss:7.3780986004405555
Epoch:40,Loss:7.311449666817983
==> Saving model...
Epoch:41,Loss:7.464141613907284
Epoch:42,Loss:7.318676855829027
Epoch:43,Loss:7.267780270841387
==> Saving model...
Epoch:44,Loss:7.259905954202016
==> Saving model...
Epoch:45,Loss:7.324333906173706
Epoch:46,Loss:7.195749170250362
==> Saving model...
Epoch:47,Loss:7.305631226963467
Epoch:48,Loss:7.227200455135769
Epoch:49,Loss:7.310860719945696
Epoch:50,Loss:7.287557608551449
Epoch:51,Loss:7.227737214830187
Epoch:52,Loss:7.223911808596717
Epoch:53,Loss:7.253677593337165
Epoch:54,Loss:7.252680149343279
Epoch:55,Loss:7.255393617682987
Epoch:56,Loss:7.028676880730523
==> Saving model...
Epoch:57,Loss:7.202622135480245
Epoch:58,Loss:6.983667433261871
==> Saving model...
Epoch:59,Loss:6.997555484374364
Epoch:60,Loss:7.017830981148614
Epoch:61,Loss:7.229190044932896
Epoch:62,Loss:6.96640235847897
==> Saving model...
Epoch:63,Loss:7.035024192598131
Epoch:64,Loss:6.984078248341878
Epoch:65,Loss:6.9501659373442335
==> Saving model...
Epoch:66,Loss:6.886552393436432
==> Saving model...
Epoch:67,Loss:7.054361687766181
Epoch:68,Loss:7.016760494973925
Epoch:69,Loss:7.030636032422383
Epoch:70,Loss:6.98821343978246
Epoch:71,Loss:6.998555176787907
Epoch:72,Loss:6.990712834729089
Epoch:73,Loss:7.022217899560928
Epoch:74,Loss:7.302649802631802
Epoch:75,Loss:7.038914799690247
Epoch:76,Loss:6.954356458452013
Epoch:77,Loss:7.040515230761634
Epoch:78,Loss:7.1445265544785395
Epoch:79,Loss:6.933661633067661
Epoch:80,Loss:6.947269525792864
Epoch:81,Loss:7.19836010535558
Epoch:82,Loss:6.9546176592508955
Epoch:83,Loss:7.032589034901725
Epoch:84,Loss:6.9652934074401855
Epoch:85,Loss:6.843297451734543
==> Saving model...
Epoch:86,Loss:6.959987375471327
Epoch:87,Loss:6.863327085971832
Epoch:88,Loss:6.845792194207509
Epoch:89,Loss:6.976569056510925
Epoch:90,Loss:6.87716148296992
Epoch:91,Loss:6.769554164674547
==> Saving model...
Epoch:92,Loss:6.843281951215532
Epoch:93,Loss:7.026753942171733
Epoch:94,Loss:6.953244692749447
Epoch:95,Loss:7.057560887601641
Epoch:96,Loss:6.8917470673720045
Epoch:97,Loss:6.9549148016505775
Epoch:98,Loss:6.99572495619456
Epoch:99,Loss:6.896312614281972
Epoch:100,Loss:6.825894329282972
Epoch:101,Loss:6.69092372390959
==> Saving model...
Epoch:102,Loss:6.72673084338506
Epoch:103,Loss:6.604874167177412
==> Saving model...
Epoch:104,Loss:6.800912784205543
Epoch:105,Loss:6.621315499146779
Epoch:106,Loss:6.7767994205156965
Epoch:107,Loss:6.690460311041938
Epoch:108,Loss:6.723939104212655
Epoch:109,Loss:6.591401918066873
==> Saving model...
Epoch:110,Loss:6.579855097664727
==> Saving model...
Epoch:111,Loss:6.626220249467426
Epoch:112,Loss:6.6634711093372765
Epoch:113,Loss:6.81382636891471
Epoch:114,Loss:6.706566747691896
Epoch:115,Loss:6.693591919210222
Epoch:116,Loss:6.6806996199819775
Epoch:117,Loss:6.70557505554623
Epoch:118,Loss:6.643114897939894
Epoch:119,Loss:6.844950639539295
Epoch:120,Loss:6.857881042692396
Epoch:121,Loss:6.588546706570519
Epoch:122,Loss:6.625602046648662
Epoch:123,Loss:6.914951973491245
Epoch:124,Loss:6.668767356210285
Epoch:125,Loss:6.66917606525951
Epoch:126,Loss:6.6462490691079035
Epoch:127,Loss:6.582777404122883
Epoch:128,Loss:6.647954530186123
Epoch:129,Loss:6.551435099707709
==> Saving model...
Epoch:130,Loss:6.814458860291375
Epoch:131,Loss:6.6730931003888445
Epoch:132,Loss:6.4713864127794904
==> Saving model...
Epoch:133,Loss:6.566895365715027
Epoch:134,Loss:6.687404327922398
Epoch:135,Loss:6.713126500447591
Epoch:136,Loss:6.7746392952071295
Epoch:137,Loss:6.748823324839274
Epoch:138,Loss:6.53164698349105
Epoch:139,Loss:6.614180068174998
Epoch:140,Loss:6.527562525537279
Epoch:141,Loss:6.507101244396633
Epoch:142,Loss:6.731324361430274
Epoch:143,Loss:6.4933078189690905
Epoch:144,Loss:6.469772941536373
==> Saving model...
Epoch:145,Loss:6.50576294793023
Epoch:146,Loss:6.645842972728941
Epoch:147,Loss:6.492993305126826
Epoch:148,Loss:6.6246833602587385
Epoch:149,Loss:6.640647623274061
Epoch:150,Loss:6.539383795526293
Epoch:151,Loss:6.674832370546129
Epoch:152,Loss:6.571677969561683
Epoch:153,Loss:6.642900334464179
Epoch:154,Loss:6.542798936367035
Epoch:155,Loss:6.544860151078966
Epoch:156,Loss:6.626102619700962
Epoch:157,Loss:6.690064920319451
Epoch:158,Loss:6.363326158788469
==> Saving model...
Epoch:159,Loss:6.601118038098018
Epoch:160,Loss:6.6011367837587995
Epoch:161,Loss:6.459086888366276
Epoch:162,Loss:6.60294109582901
Epoch:163,Loss:6.621325241194831
Epoch:164,Loss:6.507738533947203
Epoch:165,Loss:6.779785265525182
Epoch:166,Loss:6.502767420477337
Epoch:167,Loss:6.4492049515247345
Epoch:168,Loss:6.573138925764296
Epoch:169,Loss:6.584155178732342
Epoch:170,Loss:6.6092861493428545
Epoch:171,Loss:6.603596799903446
Epoch:172,Loss:6.456114543808831
Epoch:173,Loss:6.528858181503084
Epoch:174,Loss:6.65964910056856
Epoch:175,Loss:6.567633118894365
Epoch:176,Loss:6.603643569681379
Epoch:177,Loss:6.63461446762085
Epoch:178,Loss:6.572188973426819
Epoch:179,Loss:6.53244364923901
Epoch:180,Loss:6.46225181221962
Epoch:181,Loss:6.3874011602666645
Epoch:182,Loss:6.5483613808949785
Epoch:183,Loss:6.395932972431183
Epoch:184,Loss:6.4071849849489
Epoch:185,Loss:6.5571173462602825
Epoch:186,Loss:6.354829990201527
==> Saving model...
Epoch:187,Loss:6.605196903149287
Epoch:188,Loss:6.634054475360447
Epoch:189,Loss:6.293707095914417
==> Saving model...
Epoch:190,Loss:6.607158786720699
Epoch:191,Loss:6.431725303332011
Epoch:192,Loss:6.55101399951511
Epoch:193,Loss:6.366761028766632
Epoch:194,Loss:6.446737925211589
Epoch:195,Loss:6.545171310504277
Epoch:196,Loss:6.415122300386429
Epoch:197,Loss:6.524678551488453
Epoch:198,Loss:6.563184499740601
Epoch:199,Loss:6.501179585854213
Parameters of fine-tuned model have been saved to./antigenHLAII_finetune_log/6atf
NPCC:0.5554
ACC:0.8756 AUROC:0.9402 Precision:0.4146 Recall:0.8095 F1:0.5484 AUPR:0.6808
Validation results have been saved to./antigenHLAII_Output/atom-level/6atf
../_images/notebooks_test_antigenHLAII_33_1.png
../_images/notebooks_test_antigenHLAII_33_2.png

Two heatmaps are respectively true distances and contact probabilities between atoms on antigen and HLAII. We only exhibit the results of leaving 6atf for validation, while the remaining crystal structures were used for training