Tutorial for antigen-HLAI binding prediction with deepAntigen

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

Import relevant packages

[1]:
from deepAntigen.antigenHLAI import run_antigenHLAI_seq
from deepAntigen.antigenHLAI import run_antigenHLAI_atom
from deepAntigen.antigenHLAI.utils.antigenHLAI_preprocess import split_data, process_pdb, 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-HLAI data

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

Inference anitgen-HLAI binding at the sequence level using deepAntigen

By utilizing parameters provided by us, you can directly predict antigen-HLA I 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_antigenHLAI_seq.Inference('./test_antigenHLAI/Data/sequence/test.csv', multi_process=8)
Prediction results have been saved to./antigenHLAI_Output/seq-level/pHLAI_predictions.csv
[4]:
df
[4]:
peptide HLA score label
0 AADLVEALY A*01:01 9.957445e-01 1
1 AIDNSRNILY A*01:01 9.940655e-01 1
2 ALDGGFQMHY A*01:01 9.927112e-01 1
3 ALDTLIIEY A*01:01 9.963308e-01 1
4 ALDVVNLVY A*01:01 9.842808e-01 1
... ... ... ... ...
72931 VEWPVVMSRF G*01:04 6.930510e-01 0
72932 MEQQNEASEE G*01:04 9.879112e-11 0
72933 PASEGEVWSM G*01:04 8.658696e-05 0
72934 QIFRQARASTP G*01:04 5.379037e-05 0
72935 IAGEKKSAQWR G*01:04 1.137931e-04 0

72936 rows × 4 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_antigenHLAI_11_0.png

Train deepAntigen using sequence-level anitgen-HLAI binding data

Split the dataset for 10-fold cross-validation

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

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

[7]:
run_antigenHLAI_seq.Train('./test_antigenHLAI/Data/sequence/k_fold_dataset/', config_path='./test_antigenHLAI/config_seq.ini')
peptide:UGTTVRDYTQ
Epoch:1 Train_loss:20.2003 ACC:0.6430 AUROC:0.6984 Precision:0.6299 Recall:0.7053 F1:0.6655 AUPR:0.6725
Epoch:2 Train_loss:18.3111 ACC:0.7055 AUROC:0.7733 Precision:0.6775 Recall:0.7920 F1:0.7303 AUPR:0.7385
Epoch:3 Train_loss:17.5091 ACC:0.7288 AUROC:0.8023 Precision:0.7026 Recall:0.8001 F1:0.7482 AUPR:0.7759
Epoch:4 Train_loss:14.6957 ACC:0.7959 AUROC:0.8745 Precision:0.7687 Recall:0.8505 F1:0.8076 AUPR:0.8558
Epoch:5 Train_loss:13.4974 ACC:0.8215 AUROC:0.8987 Precision:0.7974 Recall:0.8653 F1:0.8299 AUPR:0.8844
Epoch:5 Val_loss:11.7654 ACC:0.8525 AUROC:0.9353 Precision:0.8015 Recall:0.9399 F1:0.8652 AUPR:0.9270
==> Saving model...
Epoch:6 Train_loss:12.8667 ACC:0.8352 AUROC:0.9102 Precision:0.8131 Recall:0.8735 F1:0.8422 AUPR:0.8987
Epoch:7 Train_loss:12.3955 ACC:0.8436 AUROC:0.9184 Precision:0.8248 Recall:0.8754 F1:0.8493 AUPR:0.9098
Epoch:8 Train_loss:12.1503 ACC:0.8485 AUROC:0.9223 Precision:0.8315 Recall:0.8767 F1:0.8535 AUPR:0.9146
Epoch:9 Train_loss:11.7752 ACC:0.8562 AUROC:0.9279 Precision:0.8403 Recall:0.8818 F1:0.8606 AUPR:0.9212
Epoch:10 Train_loss:11.5492 ACC:0.8605 AUROC:0.9310 Precision:0.8449 Recall:0.8854 F1:0.8647 AUPR:0.9244
Epoch:10 Val_loss:9.3736 ACC:0.9023 AUROC:0.9603 Precision:0.9142 Recall:0.8895 F1:0.9017 AUPR:0.9580
==> Saving model...
==> Saving model...
Epoch:11 Train_loss:11.3822 ACC:0.8637 AUROC:0.9332 Precision:0.8492 Recall:0.8868 F1:0.8676 AUPR:0.9266
Epoch:12 Train_loss:11.2122 ACC:0.8667 AUROC:0.9356 Precision:0.8530 Recall:0.8884 F1:0.8703 AUPR:0.9294
Epoch:13 Train_loss:11.0604 ACC:0.8697 AUROC:0.9377 Precision:0.8564 Recall:0.8906 F1:0.8731 AUPR:0.9320
Epoch:14 Train_loss:11.0179 ACC:0.8703 AUROC:0.9381 Precision:0.8570 Recall:0.8912 F1:0.8737 AUPR:0.9323
Epoch:15 Train_loss:10.8956 ACC:0.8728 AUROC:0.9396 Precision:0.8596 Recall:0.8932 F1:0.8761 AUPR:0.9338
Epoch:15 Val_loss:8.5845 ACC:0.9153 AUROC:0.9663 Precision:0.9069 Recall:0.9268 F1:0.9168 AUPR:0.9652
==> Saving model...
Epoch:16 Train_loss:10.8318 ACC:0.8740 AUROC:0.9406 Precision:0.8609 Recall:0.8942 F1:0.8772 AUPR:0.9348
Epoch:17 Train_loss:10.7596 ACC:0.8749 AUROC:0.9416 Precision:0.8622 Recall:0.8945 F1:0.8780 AUPR:0.9366
Epoch:18 Train_loss:10.7031 ACC:0.8755 AUROC:0.9422 Precision:0.8626 Recall:0.8953 F1:0.8786 AUPR:0.9369
Epoch:19 Train_loss:10.6699 ACC:0.8768 AUROC:0.9426 Precision:0.8644 Recall:0.8959 F1:0.8799 AUPR:0.9374
Epoch:20 Train_loss:10.5492 ACC:0.8786 AUROC:0.9441 Precision:0.8663 Recall:0.8973 F1:0.8815 AUPR:0.9391
Epoch:20 Val_loss:8.3313 ACC:0.9189 AUROC:0.9683 Precision:0.9135 Recall:0.9267 F1:0.9201 AUPR:0.9679
==> Saving model...
==> Saving model...
Epoch:21 Train_loss:10.5000 ACC:0.8793 AUROC:0.9447 Precision:0.8668 Recall:0.8983 F1:0.8823 AUPR:0.9399
Epoch:22 Train_loss:10.4834 ACC:0.8811 AUROC:0.9447 Precision:0.8696 Recall:0.8986 F1:0.8839 AUPR:0.9395
Epoch:23 Train_loss:10.4116 ACC:0.8812 AUROC:0.9458 Precision:0.8688 Recall:0.8998 F1:0.8841 AUPR:0.9412
Epoch:24 Train_loss:10.4025 ACC:0.8818 AUROC:0.9458 Precision:0.8704 Recall:0.8992 F1:0.8845 AUPR:0.9411
Epoch:25 Train_loss:10.3609 ACC:0.8828 AUROC:0.9463 Precision:0.8707 Recall:0.9010 F1:0.8856 AUPR:0.9418
Epoch:25 Val_loss:8.1193 ACC:0.9212 AUROC:0.9701 Precision:0.9101 Recall:0.9360 F1:0.9228 AUPR:0.9702
==> Saving model...
Epoch:26 Train_loss:10.3083 ACC:0.8837 AUROC:0.9471 Precision:0.8719 Recall:0.9013 F1:0.8864 AUPR:0.9424
Epoch:27 Train_loss:10.2816 ACC:0.8841 AUROC:0.9472 Precision:0.8723 Recall:0.9020 F1:0.8869 AUPR:0.9428
Epoch:28 Train_loss:10.2228 ACC:0.8850 AUROC:0.9480 Precision:0.8734 Recall:0.9022 F1:0.8876 AUPR:0.9437
Epoch:29 Train_loss:10.2615 ACC:0.8841 AUROC:0.9476 Precision:0.8727 Recall:0.9011 F1:0.8867 AUPR:0.9435
Epoch:30 Train_loss:10.1430 ACC:0.8865 AUROC:0.9491 Precision:0.8757 Recall:0.9027 F1:0.8890 AUPR:0.9450
Epoch:30 Val_loss:8.0392 ACC:0.9231 AUROC:0.9710 Precision:0.9128 Recall:0.9368 F1:0.9247 AUPR:0.9714
==> Saving model...
==> Saving model...
Epoch:31 Train_loss:10.1495 ACC:0.8864 AUROC:0.9489 Precision:0.8749 Recall:0.9036 F1:0.8890 AUPR:0.9447
Epoch:32 Train_loss:10.1530 ACC:0.8863 AUROC:0.9487 Precision:0.8750 Recall:0.9032 F1:0.8889 AUPR:0.9445
Epoch:33 Train_loss:10.1081 ACC:0.8867 AUROC:0.9495 Precision:0.8755 Recall:0.9035 F1:0.8893 AUPR:0.9456
Epoch:34 Train_loss:10.0695 ACC:0.8880 AUROC:0.9498 Precision:0.8771 Recall:0.9044 F1:0.8905 AUPR:0.9460
Epoch:35 Train_loss:10.0902 ACC:0.8873 AUROC:0.9496 Precision:0.8762 Recall:0.9039 F1:0.8898 AUPR:0.9461
Epoch:35 Val_loss:7.8962 ACC:0.9264 AUROC:0.9720 Precision:0.9212 Recall:0.9338 F1:0.9275 AUPR:0.9727
==> Saving model...
Epoch:36 Train_loss:10.0369 ACC:0.8881 AUROC:0.9504 Precision:0.8777 Recall:0.9036 F1:0.8905 AUPR:0.9469
Epoch:37 Train_loss:10.0035 ACC:0.8889 AUROC:0.9505 Precision:0.8783 Recall:0.9047 F1:0.8913 AUPR:0.9465
Epoch:38 Train_loss:10.0149 ACC:0.8887 AUROC:0.9504 Precision:0.8779 Recall:0.9047 F1:0.8911 AUPR:0.9464
Epoch:39 Train_loss:9.9644 ACC:0.8896 AUROC:0.9510 Precision:0.8787 Recall:0.9059 F1:0.8921 AUPR:0.9472
Epoch:40 Train_loss:9.9482 ACC:0.8903 AUROC:0.9512 Precision:0.8797 Recall:0.9060 F1:0.8926 AUPR:0.9473
Epoch:40 Val_loss:7.8193 ACC:0.9263 AUROC:0.9726 Precision:0.9161 Recall:0.9396 F1:0.9277 AUPR:0.9729
==> Saving model...
==> Saving model...
Epoch:41 Train_loss:9.9230 ACC:0.8907 AUROC:0.9515 Precision:0.8801 Recall:0.9062 F1:0.8930 AUPR:0.9479
Epoch:42 Train_loss:9.9152 ACC:0.8910 AUROC:0.9514 Precision:0.8806 Recall:0.9065 F1:0.8934 AUPR:0.9474
Epoch:43 Train_loss:9.9088 ACC:0.8902 AUROC:0.9517 Precision:0.8795 Recall:0.9061 F1:0.8926 AUPR:0.9479
Epoch:44 Train_loss:9.8999 ACC:0.8912 AUROC:0.9518 Precision:0.8803 Recall:0.9072 F1:0.8935 AUPR:0.9479
Epoch:45 Train_loss:9.9353 ACC:0.8903 AUROC:0.9513 Precision:0.8796 Recall:0.9061 F1:0.8926 AUPR:0.9474
Epoch:45 Val_loss:7.7654 ACC:0.9268 AUROC:0.9733 Precision:0.9181 Recall:0.9384 F1:0.9282 AUPR:0.9738
==> Saving model...
Epoch:46 Train_loss:9.8994 ACC:0.8905 AUROC:0.9519 Precision:0.8800 Recall:0.9061 F1:0.8929 AUPR:0.9482
Epoch:47 Train_loss:9.8711 ACC:0.8913 AUROC:0.9522 Precision:0.8807 Recall:0.9069 F1:0.8936 AUPR:0.9488
Epoch:48 Train_loss:9.8219 ACC:0.8926 AUROC:0.9527 Precision:0.8824 Recall:0.9075 F1:0.8948 AUPR:0.9488
Epoch:49 Train_loss:9.8336 ACC:0.8920 AUROC:0.9527 Precision:0.8816 Recall:0.9074 F1:0.8943 AUPR:0.9494
Epoch:50 Train_loss:9.8135 ACC:0.8924 AUROC:0.9528 Precision:0.8818 Recall:0.9080 F1:0.8947 AUPR:0.9494
Epoch:50 Val_loss:7.6722 ACC:0.9285 AUROC:0.9741 Precision:0.9209 Recall:0.9385 F1:0.9296 AUPR:0.9753
==> Saving model...
==> Saving model...
Parameters of pre-trained model have been save to./antigenHLAI_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_antigenHLAI_seq.Inference('./test_antigenHLAI/Data/sequence/test.csv', model_path='./antigenHLAI_training_log/seq-level_parameters.pt')
Prediction results have been saved to./antigenHLAI_Output/seq-level/pHLAI_predictions.csv
[9]:
df
[9]:
peptide HLA score label
0 AADLVEALY A*01:01 9.800804e-01 1
1 AIDNSRNILY A*01:01 9.666085e-01 1
2 ALDGGFQMHY A*01:01 9.909116e-01 1
3 ALDTLIIEY A*01:01 9.836487e-01 1
4 ALDVVNLVY A*01:01 9.876018e-01 1
... ... ... ... ...
72931 VEWPVVMSRF G*01:04 4.793810e-02 0
72932 MEQQNEASEE G*01:04 4.688415e-13 0
72933 PASEGEVWSM G*01:04 9.123534e-04 0
72934 QIFRQARASTP G*01:04 4.101946e-06 0
72935 IAGEKKSAQWR G*01:04 2.432465e-04 0

72936 rows × 4 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_antigenHLAI_20_0.png

Inference anitgen-HLAI binding at the atom level using deepAntigen

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

[11]:
peptide_atoms, HLAI_atoms, contact_maps = run_antigenHLAI_atom.Inference('./test_antigenHLAI/Data/crystal_structure/sample.csv')
Prediction results have been saved to./antigenHLAI_Output/atom-level/
../_images/notebooks_test_antigenHLAI_23_1.png

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

Fine-tune deepAntigen using antigen-HLAI 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('./test_antigenHLAI/Data/crystal_structure/pdb', './test_antigenHLAI/Data/crystal_structure/info_noredudant.csv')
8gom
8gon
7q99
7q9a
2ak4
7nme
7pbe
5wkh
3w0w
5w1v
7rtr
2nx5
5nht
2p5e
5jzi
6am5
3mv8
3kpr
5hyj
6rpb
6uon
5xov
3uts
6avg
7rm4
3pwp
7n6e
3d39
3dxa
6rp9
4mji
6vmx
2f53
3qdj
6bj2
3qdm
6avf
5c07
3vxu
6vqo
3utt
6zkz
4qrp
6tmo
5wkf
5d2n
6mtm
2f54
5bs0
6eqb
5e6i
3kps
7ow5
5c09
4prh
1qrn
3kxf
2bnq
5c0a
7n2n
5yxu
8gvb
5d2l
5nmg
5hho
1qse
3sjv
2ypl
8gvi
6bj8
7qpj
7rk7
6bj3
1qsf
1oga
2gj6
7n2q
6r2l
4pri
7dzm
7n2s
5c08
3hg1
5jhd
4mnq
7dzn
4eup
7n1e
5w1w
5xot
7nmg
5isz
6rsy
3vxs
8gvg
4qrr
5hhm
5c0b
7pb2
7n1f
5c0c
6uz1
5brz
3o4l
5nme
5euo
5e9d
6amu
5eu6
3h9s
4prp
5nmf
4g9f
6zkw
6vrn
2esv
4jfd
6zky
6tro
7n2p
7r80
7phr
7n2r
3qfj
3gsn
7ow6
4g8g
4jfe
6q3s
1ao7
Processed pdb files have been saved to/quejinhao/deepAntigen/test_antigenHLAI/Data/crystal_structure/pdb_Extracted

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

[13]:
calculate_distance('./test_antigenHLAI/Data/crystal_structure/pdb_Extracted/')
7rk7
1ao7
5w1w
8gon
5hho
3pwp
7ow6
3dxa
6bj2
7r80
6avf
5wkh
8gvi
6tmo
7pb2
3qdm
7nme
1qsf
5d2n
2f53
3kpr
6zkw
2esv
6q3s
3vxs
7qpj
5jzi
7n1f
7n2r
5hhm
3d39
3kxf
4mnq
5isz
5e9d
7n2q
5wkf
6uz1
5nht
2nx5
6vqo
5d2l
5c09
6avg
5jhd
3sjv
7q9a
3utt
5c08
3uts
5nmf
7n1e
4qrr
1qrn
6eqb
6zkz
7ow5
6bj3
3gsn
5c0b
5c0a
7dzn
7n2p
2f54
1oga
3mv8
3h9s
6bj8
4prp
4qrp
3vxu
3kps
5w1v
2ypl
5c07
3w0w
2ak4
5nme
7dzm
3hg1
4eup
5c0c
7phr
7n2n
7rtr
6amu
7nmg
4pri
4prh
8gom
4jfe
6am5
3o4l
6rp9
7n2s
3qdj
6zky
7pbe
7rm4
2bnq
6vrn
6tro
4g9f
6uon
8gvg
5bs0
5xot
5yxu
2p5e
5euo
5eu6
5e6i
7n6e
6r2l
6rsy
5brz
4jfd
6vmx
2gj6
4mji
3qfj
8gvb
6rpb
5hyj
5xov
5nmg
1qse
4g8g
7q99
6mtm
Distance matrixs have been saved to /quejinhao/deepAntigen/test_antigenHLAI/Data/crystal_structure/distance_matrix

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

[14]:
run_antigenHLAI_atom.Train('./test_antigenHLAI/Data/crystal_structure/info_noredudant.csv', config_path='./test_antigenHLAI/config_atom.ini')
3w0w
Start finetuning topk layer
Epoch:0,Loss:0.5509
Epoch:1,Loss:0.4834
Epoch:2,Loss:0.4660
Epoch:3,Loss:0.4596
Epoch:4,Loss:0.4534
Epoch:5,Loss:0.4467
Epoch:6,Loss:0.4466
Epoch:7,Loss:0.4421
Epoch:8,Loss:0.4396
Epoch:9,Loss:0.4361
Epoch:10,Loss:0.4351
Epoch:11,Loss:0.4341
Epoch:12,Loss:0.4321
Epoch:13,Loss:0.4328
Epoch:14,Loss:0.4312
Epoch:15,Loss:0.4302
Epoch:16,Loss:0.4291
Epoch:17,Loss:0.4274
Epoch:18,Loss:0.4267
Epoch:19,Loss:0.4268
Epoch:20,Loss:0.4263
Epoch:21,Loss:0.4258
Epoch:22,Loss:0.4259
Epoch:23,Loss:0.4250
Epoch:24,Loss:0.4239
Epoch:25,Loss:0.4252
Epoch:26,Loss:0.4248
Epoch:27,Loss:0.4224
Epoch:28,Loss:0.4228
Epoch:29,Loss:0.4217
Epoch:30,Loss:0.4218
Epoch:31,Loss:0.4231
Epoch:32,Loss:0.4204
Epoch:33,Loss:0.4230
Epoch:34,Loss:0.4202
Epoch:35,Loss:0.4220
Epoch:36,Loss:0.4211
Epoch:37,Loss:0.4212
Epoch:38,Loss:0.4207
Epoch:39,Loss:0.4200
Epoch:40,Loss:0.4202
Epoch:41,Loss:0.4200
Epoch:42,Loss:0.4204
Epoch:43,Loss:0.4204
Epoch:44,Loss:0.4183
Epoch:45,Loss:0.4192
Epoch:46,Loss:0.4194
Epoch:47,Loss:0.4180
Epoch:48,Loss:0.4173
Epoch:49,Loss:0.4176
Epoch:50,Loss:0.4186
Epoch:51,Loss:0.4179
Epoch:52,Loss:0.4185
Epoch:53,Loss:0.4179
Epoch:54,Loss:0.4184
Epoch:55,Loss:0.4175
Epoch:56,Loss:0.4170
Epoch:57,Loss:0.4171
Epoch:58,Loss:0.4164
Epoch:59,Loss:0.4176
Epoch:60,Loss:0.4179
Epoch:61,Loss:0.4165
Epoch:62,Loss:0.4168
Epoch:63,Loss:0.4157
Epoch:64,Loss:0.4168
Epoch:65,Loss:0.4160
Epoch:66,Loss:0.4156
Epoch:67,Loss:0.4161
Epoch:68,Loss:0.4149
Epoch:69,Loss:0.4150
Epoch:70,Loss:0.4144
Epoch:71,Loss:0.4154
Epoch:72,Loss:0.4152
Epoch:73,Loss:0.4156
Epoch:74,Loss:0.4153
Epoch:75,Loss:0.4149
Epoch:76,Loss:0.4146
Epoch:77,Loss:0.4156
Epoch:78,Loss:0.4147
Epoch:79,Loss:0.4148
Epoch:80,Loss:0.4146
Epoch:81,Loss:0.4145
Epoch:82,Loss:0.4141
Epoch:83,Loss:0.4156
Epoch:84,Loss:0.4149
Epoch:85,Loss:0.4141
Epoch:86,Loss:0.4133
Epoch:87,Loss:0.4141
Epoch:88,Loss:0.4153
Epoch:89,Loss:0.4136
Epoch:90,Loss:0.4142
Epoch:91,Loss:0.4139
Epoch:92,Loss:0.4135
Epoch:93,Loss:0.4135
Epoch:94,Loss:0.4135
Epoch:95,Loss:0.4132
Epoch:96,Loss:0.4133
Epoch:97,Loss:0.4145
Epoch:98,Loss:0.4132
Epoch:99,Loss:0.4138
Epoch:100,Loss:0.4135
Epoch:101,Loss:0.4104
Epoch:102,Loss:0.4100
Epoch:103,Loss:0.4102
Epoch:104,Loss:0.4099
Epoch:105,Loss:0.4092
Epoch:106,Loss:0.4091
Epoch:107,Loss:0.4092
Epoch:108,Loss:0.4090
Epoch:109,Loss:0.4089
Epoch:110,Loss:0.4090
Epoch:111,Loss:0.4090
Epoch:112,Loss:0.4088
Epoch:113,Loss:0.4090
Epoch:114,Loss:0.4094
Epoch:115,Loss:0.4093
Epoch:116,Loss:0.4088
Epoch:117,Loss:0.4090
Epoch:118,Loss:0.4092
Epoch:119,Loss:0.4092
Epoch:120,Loss:0.4092
Epoch:121,Loss:0.4087
Epoch:122,Loss:0.4084
Epoch:123,Loss:0.4084
Epoch:124,Loss:0.4090
Epoch:125,Loss:0.4092
Epoch:126,Loss:0.4085
Epoch:127,Loss:0.4089
Epoch:128,Loss:0.4089
Epoch:129,Loss:0.4090
Epoch:130,Loss:0.4092
Epoch:131,Loss:0.4089
Epoch:132,Loss:0.4086
Epoch:133,Loss:0.4086
Epoch:134,Loss:0.4086
Epoch:135,Loss:0.4085
Epoch:136,Loss:0.4089
Epoch:137,Loss:0.4084
Epoch:138,Loss:0.4084
Epoch:139,Loss:0.4081
Epoch:140,Loss:0.4078
Epoch:141,Loss:0.4082
Epoch:142,Loss:0.4088
Epoch:143,Loss:0.4083
Epoch:144,Loss:0.4086
Epoch:145,Loss:0.4083
Epoch:146,Loss:0.4086
Epoch:147,Loss:0.4084
Epoch:148,Loss:0.4084
Epoch:149,Loss:0.4082
Epoch:150,Loss:0.4081
Epoch:151,Loss:0.4081
Epoch:152,Loss:0.4080
Epoch:153,Loss:0.4079
Epoch:154,Loss:0.4079
Epoch:155,Loss:0.4084
Epoch:156,Loss:0.4080
Epoch:157,Loss:0.4078
Epoch:158,Loss:0.4076
Epoch:159,Loss:0.4080
Epoch:160,Loss:0.4082
Epoch:161,Loss:0.4079
Epoch:162,Loss:0.4079
Epoch:163,Loss:0.4080
Epoch:164,Loss:0.4084
Epoch:165,Loss:0.4083
Epoch:166,Loss:0.4080
Epoch:167,Loss:0.4077
Epoch:168,Loss:0.4077
Epoch:169,Loss:0.4079
Epoch:170,Loss:0.4077
Epoch:171,Loss:0.4070
Epoch:172,Loss:0.4073
Epoch:173,Loss:0.4078
Epoch:174,Loss:0.4076
Epoch:175,Loss:0.4075
Epoch:176,Loss:0.4077
Epoch:177,Loss:0.4074
Epoch:178,Loss:0.4077
Epoch:179,Loss:0.4078
Epoch:180,Loss:0.4078
Epoch:181,Loss:0.4078
Epoch:182,Loss:0.4077
Epoch:183,Loss:0.4075
Epoch:184,Loss:0.4075
Epoch:185,Loss:0.4077
Epoch:186,Loss:0.4074
Epoch:187,Loss:0.4073
Epoch:188,Loss:0.4072
Epoch:189,Loss:0.4076
Epoch:190,Loss:0.4077
Epoch:191,Loss:0.4072
Epoch:192,Loss:0.4071
Epoch:193,Loss:0.4073
Epoch:194,Loss:0.4077
Epoch:195,Loss:0.4073
Epoch:196,Loss:0.4081
Epoch:197,Loss:0.4075
Epoch:198,Loss:0.4072
Epoch:199,Loss:0.4068
Start finetuning classifier layer
Epoch:0,Loss:5.7955
==> Saving model...
Epoch:1,Loss:5.1922
==> Saving model...
Epoch:2,Loss:4.7883
==> Saving model...
Epoch:3,Loss:4.3934
==> Saving model...
Epoch:4,Loss:4.1100
==> Saving model...
Epoch:5,Loss:3.8938
==> Saving model...
Epoch:6,Loss:3.8044
==> Saving model...
Epoch:7,Loss:3.7415
==> Saving model...
Epoch:8,Loss:3.6405
==> Saving model...
Epoch:9,Loss:3.6351
==> Saving model...
Epoch:10,Loss:3.5126
==> Saving model...
Epoch:11,Loss:3.4930
==> Saving model...
Epoch:12,Loss:3.5223
Epoch:13,Loss:3.4532
==> Saving model...
Epoch:14,Loss:3.4413
==> Saving model...
Epoch:15,Loss:3.4118
==> Saving model...
Epoch:16,Loss:3.2903
==> Saving model...
Epoch:17,Loss:3.3172
Epoch:18,Loss:3.3004
Epoch:19,Loss:3.2714
==> Saving model...
Epoch:20,Loss:3.2049
==> Saving model...
Epoch:21,Loss:3.1430
==> Saving model...
Epoch:22,Loss:3.2498
Epoch:23,Loss:3.2751
Epoch:24,Loss:3.2046
Epoch:25,Loss:3.1926
Epoch:26,Loss:3.1694
Epoch:27,Loss:3.0975
==> Saving model...
Epoch:28,Loss:3.1391
Epoch:29,Loss:3.1314
Epoch:30,Loss:3.1391
Epoch:31,Loss:3.1271
Epoch:32,Loss:3.0964
==> Saving model...
Epoch:33,Loss:3.0277
==> Saving model...
Epoch:34,Loss:2.9946
==> Saving model...
Epoch:35,Loss:2.9794
==> Saving model...
Epoch:36,Loss:3.0230
Epoch:37,Loss:3.0236
Epoch:38,Loss:3.0487
Epoch:39,Loss:3.0288
Epoch:40,Loss:2.9535
==> Saving model...
Epoch:41,Loss:2.9799
Epoch:42,Loss:2.9647
Epoch:43,Loss:2.9716
Epoch:44,Loss:2.9946
Epoch:45,Loss:2.9310
==> Saving model...
Epoch:46,Loss:2.8744
==> Saving model...
Epoch:47,Loss:2.9156
Epoch:48,Loss:2.9378
Epoch:49,Loss:2.9441
Epoch:50,Loss:2.9698
Epoch:51,Loss:2.9385
Epoch:52,Loss:2.8682
==> Saving model...
Epoch:53,Loss:2.9158
Epoch:54,Loss:2.8790
Epoch:55,Loss:2.8474
==> Saving model...
Epoch:56,Loss:2.8995
Epoch:57,Loss:2.8836
Epoch:58,Loss:2.8397
==> Saving model...
Epoch:59,Loss:2.9153
Epoch:60,Loss:2.8906
Epoch:61,Loss:2.7975
==> Saving model...
Epoch:62,Loss:2.8410
Epoch:63,Loss:2.8324
Epoch:64,Loss:2.7862
==> Saving model...
Epoch:65,Loss:2.7895
Epoch:66,Loss:2.8379
Epoch:67,Loss:2.8498
Epoch:68,Loss:2.7101
==> Saving model...
Epoch:69,Loss:2.7831
Epoch:70,Loss:2.8378
Epoch:71,Loss:2.8126
Epoch:72,Loss:2.8188
Epoch:73,Loss:2.8087
Epoch:74,Loss:2.8309
Epoch:75,Loss:2.8457
Epoch:76,Loss:2.7478
Epoch:77,Loss:2.7080
==> Saving model...
Epoch:78,Loss:2.7987
Epoch:79,Loss:2.7636
Epoch:80,Loss:2.8152
Epoch:81,Loss:2.8219
Epoch:82,Loss:2.7562
Epoch:83,Loss:2.7288
Epoch:84,Loss:2.7669
Epoch:85,Loss:2.6998
==> Saving model...
Epoch:86,Loss:2.6688
==> Saving model...
Epoch:87,Loss:2.7230
Epoch:88,Loss:2.7716
Epoch:89,Loss:2.6642
==> Saving model...
Epoch:90,Loss:2.7857
Epoch:91,Loss:2.7053
Epoch:92,Loss:2.6952
Epoch:93,Loss:2.7193
Epoch:94,Loss:2.6863
Epoch:95,Loss:2.7385
Epoch:96,Loss:2.6965
Epoch:97,Loss:2.7071
Epoch:98,Loss:2.6780
Epoch:99,Loss:2.7060
Epoch:100,Loss:2.7493
Epoch:101,Loss:2.6993
Epoch:102,Loss:2.6532
==> Saving model...
Epoch:103,Loss:2.6305
==> Saving model...
Epoch:104,Loss:2.6021
==> Saving model...
Epoch:105,Loss:2.6468
Epoch:106,Loss:2.6741
Epoch:107,Loss:2.5875
==> Saving model...
Epoch:108,Loss:2.6230
Epoch:109,Loss:2.6837
Epoch:110,Loss:2.6491
Epoch:111,Loss:2.6464
Epoch:112,Loss:2.6225
Epoch:113,Loss:2.6347
Epoch:114,Loss:2.6000
Epoch:115,Loss:2.6471
Epoch:116,Loss:2.5779
==> Saving model...
Epoch:117,Loss:2.5763
==> Saving model...
Epoch:118,Loss:2.7072
Epoch:119,Loss:2.6478
Epoch:120,Loss:2.6240
Epoch:121,Loss:2.6784
Epoch:122,Loss:2.7277
Epoch:123,Loss:2.6349
Epoch:124,Loss:2.6334
Epoch:125,Loss:2.5556
==> Saving model...
Epoch:126,Loss:2.6334
Epoch:127,Loss:2.6200
Epoch:128,Loss:2.5135
==> Saving model...
Epoch:129,Loss:2.6522
Epoch:130,Loss:2.6527
Epoch:131,Loss:2.5948
Epoch:132,Loss:2.6203
Epoch:133,Loss:2.5484
Epoch:134,Loss:2.6590
Epoch:135,Loss:2.5677
Epoch:136,Loss:2.6056
Epoch:137,Loss:2.5169
Epoch:138,Loss:2.5802
Epoch:139,Loss:2.5113
==> Saving model...
Epoch:140,Loss:2.6027
Epoch:141,Loss:2.6177
Epoch:142,Loss:2.5618
Epoch:143,Loss:2.4811
==> Saving model...
Epoch:144,Loss:2.5491
Epoch:145,Loss:2.5856
Epoch:146,Loss:2.5396
Epoch:147,Loss:2.5380
Epoch:148,Loss:2.4932
Epoch:149,Loss:2.5521
Epoch:150,Loss:2.6040
Epoch:151,Loss:2.5962
Epoch:152,Loss:2.5916
Epoch:153,Loss:2.6099
Epoch:154,Loss:2.5428
Epoch:155,Loss:2.5477
Epoch:156,Loss:2.5707
Epoch:157,Loss:2.5973
Epoch:158,Loss:2.6133
Epoch:159,Loss:2.6233
Epoch:160,Loss:2.5135
Epoch:161,Loss:2.6347
Epoch:162,Loss:2.6357
Epoch:163,Loss:2.5895
Epoch:164,Loss:2.5492
Epoch:165,Loss:2.5933
Epoch:166,Loss:2.5647
Epoch:167,Loss:2.5056
Epoch:168,Loss:2.5471
Epoch:169,Loss:2.5594
Epoch:170,Loss:2.5453
Epoch:171,Loss:2.5540
Epoch:172,Loss:2.5573
Epoch:173,Loss:2.4948
Epoch:174,Loss:2.5946
Epoch:175,Loss:2.5200
Epoch:176,Loss:2.5781
Epoch:177,Loss:2.5379
Epoch:178,Loss:2.5303
Epoch:179,Loss:2.5626
Epoch:180,Loss:2.5262
Epoch:181,Loss:2.5269
Epoch:182,Loss:2.6367
Epoch:183,Loss:2.5917
Epoch:184,Loss:2.5555
Epoch:185,Loss:2.5432
Epoch:186,Loss:2.5207
Epoch:187,Loss:2.5302
Epoch:188,Loss:2.5346
Epoch:189,Loss:2.5373
Epoch:190,Loss:2.5250
Epoch:191,Loss:2.6159
Epoch:192,Loss:2.5229
Epoch:193,Loss:2.5617
Epoch:194,Loss:2.5552
Epoch:195,Loss:2.5441
Epoch:196,Loss:2.5504
Epoch:197,Loss:2.5256
Epoch:198,Loss:2.5325
Epoch:199,Loss:2.5891
Parameters of fine-tuned model have been saved to./antigenHLAI_finetune_log/3w0w
NPCC:0.5757
ACC:0.9400 AUROC:0.9182 Precision:0.7143 Recall:0.5556 F1:0.6250 AUPR:0.6210
Validation results have been saved to./antigenHLAI_Output/atom-level/3w0w
../_images/notebooks_test_antigenHLAI_31_1.png
../_images/notebooks_test_antigenHLAI_31_2.png

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