Tutorial for antigen-TCR binding prediction with deepAntigen

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

Import relevant packages

[1]:
from deepAntigen.antigenTCR import run_antigenTCR_seq
from deepAntigen.antigenTCR import run_antigenTCR_atom
from deepAntigen.antigenTCR.utils.antigenTCR_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-TCR data

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

Inference anitgen-TCR binding at the sequence level using deepAntigen

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

[3]:
df = run_antigenTCR_seq.Inference('./test_antigenTCR/Data/sequence/zero-shot_sample.csv', multi_process=8)
Prediction results have been saved to./antigenTCR_Output/seq-level/pTCR_predictions.csv
[4]:
df
[4]:
peptide binding_TCR score label
0 VQYLGMFPV CASSQNGSEAAYSNQPQHF 0.348879 1
1 VQYLGMFPV CASSTPGGWNTEAFF 0.487102 1
2 VQYLGMFPV CASNSGPNEKLFF 0.717341 1
3 VQYLGMFPV CASSLGQGYNEQFF 0.960628 1
4 YLDELIRNT CASSVEGALTDTQYF 0.619325 1
... ... ... ... ...
1709 CLAGLLTMV CAWSKLLQGGGYTF 0.295129 0
1710 ASFRPELAEFW CASSFRGRSAGSEQYF 0.432778 0
1711 NLAPMVATV CAWGQGIIYF 0.399484 0
1712 ALGGLLTMV CASRKRGGIQETQYF 0.302940 0
1713 LAITPEIAPYF CATSRDLTSHYGYTF 0.311088 0

1714 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_antigenTCR_11_0.png

Train deepAntigen using sequence-level anitgen-TCR binding data

Split the dataset for 10-fold cross-validation

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

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

[7]:
run_antigenTCR_seq.Train('./test_antigenTCR/Data/sequence/k_fold_dataset/', config_path='./test_antigenTCR/config_seq.ini')
Epoch:1 Train_loss:5.3969 ACC:0.5838 AUROC:0.6149 Precision:0.5756 Recall:0.6382 F1:0.6053 AUPR:0.5901
Epoch:2 Train_loss:5.3493 ACC:0.5989 AUROC:0.6330 Precision:0.5913 Recall:0.6404 F1:0.6149 AUPR:0.6105
Epoch:3 Train_loss:5.3448 ACC:0.5975 AUROC:0.6334 Precision:0.5905 Recall:0.6363 F1:0.6125 AUPR:0.6109
Epoch:4 Train_loss:5.3305 ACC:0.6012 AUROC:0.6386 Precision:0.5953 Recall:0.6322 F1:0.6132 AUPR:0.6167
Epoch:5 Train_loss:5.3378 ACC:0.6014 AUROC:0.6362 Precision:0.5964 Recall:0.6271 F1:0.6114 AUPR:0.6122
Epoch:5 Val_loss:5.2957 ACC:0.6043 AUROC:0.6547 Precision:0.6229 Recall:0.5290 F1:0.5721 AUPR:0.6394
==> Saving model...
Epoch:6 Train_loss:5.3311 ACC:0.6019 AUROC:0.6388 Precision:0.5965 Recall:0.6298 F1:0.6127 AUPR:0.6165
Epoch:7 Train_loss:5.3167 ACC:0.6034 AUROC:0.6430 Precision:0.5983 Recall:0.6296 F1:0.6135 AUPR:0.6236
Epoch:8 Train_loss:5.3058 ACC:0.6068 AUROC:0.6460 Precision:0.6028 Recall:0.6259 F1:0.6141 AUPR:0.6260
Epoch:9 Train_loss:5.3037 ACC:0.6058 AUROC:0.6469 Precision:0.6028 Recall:0.6205 F1:0.6115 AUPR:0.6268
Epoch:10 Train_loss:5.2871 ACC:0.6104 AUROC:0.6522 Precision:0.6083 Recall:0.6203 F1:0.6142 AUPR:0.6335
Epoch:10 Val_loss:5.2694 ACC:0.6054 AUROC:0.6786 Precision:0.6834 Recall:0.3932 F1:0.4992 AUPR:0.6695
==> Saving model...
==> Saving model...
Epoch:11 Train_loss:5.2724 ACC:0.6127 AUROC:0.6556 Precision:0.6127 Recall:0.6129 F1:0.6128 AUPR:0.6443
Epoch:12 Train_loss:5.2567 ACC:0.6172 AUROC:0.6596 Precision:0.6184 Recall:0.6123 F1:0.6153 AUPR:0.6486
Epoch:13 Train_loss:5.2905 ACC:0.6085 AUROC:0.6503 Precision:0.6071 Recall:0.6152 F1:0.6111 AUPR:0.6356
Epoch:14 Train_loss:5.3367 ACC:0.6013 AUROC:0.6363 Precision:0.5954 Recall:0.6324 F1:0.6134 AUPR:0.6106
Epoch:15 Train_loss:5.3250 ACC:0.6015 AUROC:0.6397 Precision:0.5954 Recall:0.6335 F1:0.6138 AUPR:0.6157
Epoch:15 Val_loss:5.2981 ACC:0.6024 AUROC:0.6581 Precision:0.6405 Recall:0.4672 F1:0.5403 AUPR:0.6392
Epoch:16 Train_loss:5.3194 ACC:0.6051 AUROC:0.6421 Precision:0.6015 Recall:0.6228 F1:0.6120 AUPR:0.6204
Epoch:17 Train_loss:5.3060 ACC:0.6084 AUROC:0.6464 Precision:0.6041 Recall:0.6293 F1:0.6164 AUPR:0.6241
Epoch:18 Train_loss:5.3117 ACC:0.6051 AUROC:0.6441 Precision:0.6013 Recall:0.6239 F1:0.6124 AUPR:0.6230
Epoch:19 Train_loss:5.3054 ACC:0.6081 AUROC:0.6460 Precision:0.6049 Recall:0.6229 F1:0.6138 AUPR:0.6264
Epoch:20 Train_loss:5.3068 ACC:0.6062 AUROC:0.6459 Precision:0.6021 Recall:0.6261 F1:0.6139 AUPR:0.6245
Epoch:20 Val_loss:5.2242 ACC:0.6197 AUROC:0.6686 Precision:0.6186 Recall:0.6247 F1:0.6216 AUPR:0.6541
==> Saving model...
Epoch:21 Train_loss:5.2967 ACC:0.6076 AUROC:0.6485 Precision:0.6048 Recall:0.6209 F1:0.6127 AUPR:0.6282
Epoch:22 Train_loss:5.3023 ACC:0.6080 AUROC:0.6470 Precision:0.6042 Recall:0.6267 F1:0.6152 AUPR:0.6267
Epoch:23 Train_loss:5.2943 ACC:0.6088 AUROC:0.6490 Precision:0.6063 Recall:0.6205 F1:0.6133 AUPR:0.6324
Epoch:24 Train_loss:5.2917 ACC:0.6101 AUROC:0.6499 Precision:0.6072 Recall:0.6234 F1:0.6152 AUPR:0.6315
Epoch:25 Train_loss:5.2760 ACC:0.6119 AUROC:0.6541 Precision:0.6106 Recall:0.6181 F1:0.6143 AUPR:0.6384
Epoch:25 Val_loss:5.2004 ACC:0.6237 AUROC:0.6739 Precision:0.6156 Recall:0.6590 F1:0.6366 AUPR:0.6617
Epoch:26 Train_loss:5.2705 ACC:0.6127 AUROC:0.6559 Precision:0.6117 Recall:0.6173 F1:0.6145 AUPR:0.6388
Epoch:27 Train_loss:5.2622 ACC:0.6108 AUROC:0.6576 Precision:0.6114 Recall:0.6083 F1:0.6098 AUPR:0.6482
Epoch:28 Train_loss:5.2629 ACC:0.6126 AUROC:0.6576 Precision:0.6126 Recall:0.6125 F1:0.6126 AUPR:0.6441
Epoch:29 Train_loss:5.2536 ACC:0.6161 AUROC:0.6599 Precision:0.6179 Recall:0.6086 F1:0.6132 AUPR:0.6483
Epoch:30 Train_loss:5.2459 ACC:0.6148 AUROC:0.6610 Precision:0.6156 Recall:0.6113 F1:0.6135 AUPR:0.6513
Epoch:30 Val_loss:5.1557 ACC:0.6285 AUROC:0.6858 Precision:0.6482 Recall:0.5623 F1:0.6022 AUPR:0.6815
==> Saving model...
==> Saving model...
Epoch:31 Train_loss:5.2373 ACC:0.6184 AUROC:0.6634 Precision:0.6206 Recall:0.6093 F1:0.6149 AUPR:0.6560
Epoch:32 Train_loss:5.2205 ACC:0.6196 AUROC:0.6667 Precision:0.6236 Recall:0.6034 F1:0.6133 AUPR:0.6630
Epoch:33 Train_loss:5.2068 ACC:0.6210 AUROC:0.6691 Precision:0.6250 Recall:0.6048 F1:0.6147 AUPR:0.6683
Epoch:34 Train_loss:5.1977 ACC:0.6234 AUROC:0.6714 Precision:0.6289 Recall:0.6022 F1:0.6153 AUPR:0.6704
Epoch:35 Train_loss:5.1846 ACC:0.6268 AUROC:0.6747 Precision:0.6331 Recall:0.6033 F1:0.6178 AUPR:0.6743
Epoch:35 Val_loss:5.0923 ACC:0.6394 AUROC:0.6959 Precision:0.6623 Recall:0.5690 F1:0.6121 AUPR:0.6994
==> Saving model...
Epoch:36 Train_loss:5.1847 ACC:0.6258 AUROC:0.6741 Precision:0.6317 Recall:0.6031 F1:0.6171 AUPR:0.6752
Epoch:37 Train_loss:5.1834 ACC:0.6253 AUROC:0.6745 Precision:0.6311 Recall:0.6035 F1:0.6170 AUPR:0.6751
Epoch:38 Train_loss:5.1785 ACC:0.6256 AUROC:0.6754 Precision:0.6324 Recall:0.5999 F1:0.6157 AUPR:0.6757
Epoch:39 Train_loss:5.1590 ACC:0.6292 AUROC:0.6801 Precision:0.6376 Recall:0.5988 F1:0.6176 AUPR:0.6819
Epoch:40 Train_loss:5.1650 ACC:0.6290 AUROC:0.6785 Precision:0.6385 Recall:0.5947 F1:0.6158 AUPR:0.6797
Epoch:40 Val_loss:5.0668 ACC:0.6413 AUROC:0.7007 Precision:0.6620 Recall:0.5776 F1:0.6170 AUPR:0.7072
==> Saving model...
==> Saving model...
Epoch:41 Train_loss:5.1623 ACC:0.6292 AUROC:0.6790 Precision:0.6363 Recall:0.6031 F1:0.6193 AUPR:0.6808
Epoch:42 Train_loss:5.1652 ACC:0.6308 AUROC:0.6788 Precision:0.6395 Recall:0.5998 F1:0.6190 AUPR:0.6797
Epoch:43 Train_loss:5.1559 ACC:0.6293 AUROC:0.6801 Precision:0.6375 Recall:0.5994 F1:0.6178 AUPR:0.6822
Epoch:44 Train_loss:5.1560 ACC:0.6306 AUROC:0.6808 Precision:0.6391 Recall:0.6002 F1:0.6190 AUPR:0.6819
Epoch:45 Train_loss:5.1492 ACC:0.6313 AUROC:0.6819 Precision:0.6402 Recall:0.5994 F1:0.6191 AUPR:0.6835
Epoch:45 Val_loss:5.1604 ACC:0.6247 AUROC:0.7033 Precision:0.7282 Recall:0.3980 F1:0.5147 AUPR:0.7085
==> Saving model...
Epoch:46 Train_loss:5.1430 ACC:0.6310 AUROC:0.6822 Precision:0.6387 Recall:0.6033 F1:0.6205 AUPR:0.6859
Epoch:47 Train_loss:5.1464 ACC:0.6328 AUROC:0.6830 Precision:0.6406 Recall:0.6048 F1:0.6222 AUPR:0.6840
Epoch:48 Train_loss:5.1438 ACC:0.6324 AUROC:0.6830 Precision:0.6413 Recall:0.6010 F1:0.6205 AUPR:0.6859
Epoch:49 Train_loss:5.1508 ACC:0.6311 AUROC:0.6815 Precision:0.6391 Recall:0.6026 F1:0.6203 AUPR:0.6834
Epoch:50 Train_loss:5.1657 ACC:0.6280 AUROC:0.6788 Precision:0.6353 Recall:0.6011 F1:0.6177 AUPR:0.6788
Epoch:50 Val_loss:5.0864 ACC:0.6412 AUROC:0.6980 Precision:0.6696 Recall:0.5575 F1:0.6084 AUPR:0.6968
==> Saving model...
Parameters of pre-trained model have been save to./antigenTCR_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 ‘zero-shot_sample.csv’ and model parameters ‘seq-level_parameters’.

[8]:
df = run_antigenTCR_seq.Inference('./test_antigenTCR/Data/sequence/zero-shot_sample.csv', model_path='./antigenTCR_training_log/seq-level_parameters.pt')
Prediction results have been saved to./antigenTCR_Output/seq-level/pTCR_predictions.csv
[9]:
df
[9]:
peptide binding_TCR score label
0 VQYLGMFPV CASSQNGSEAAYSNQPQHF 0.485075 1
1 VQYLGMFPV CASSTPGGWNTEAFF 0.481262 1
2 VQYLGMFPV CASNSGPNEKLFF 0.470695 1
3 VQYLGMFPV CASSLGQGYNEQFF 0.776766 1
4 YLDELIRNT CASSVEGALTDTQYF 0.622858 1
... ... ... ... ...
1709 CLAGLLTMV CAWSKLLQGGGYTF 0.347367 0
1710 ASFRPELAEFW CASSFRGRSAGSEQYF 0.291915 0
1711 NLAPMVATV CAWGQGIIYF 0.346782 0
1712 ALGGLLTMV CASRKRGGIQETQYF 0.262955 0
1713 LAITPEIAPYF CATSRDLTSHYGYTF 0.404531 0

1714 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_antigenTCR_20_0.png

Inference anitgen-TCR binding at the atom level using deepAntigen

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

[11]:
peptide_atoms, TCR_atoms, contact_maps = run_antigenTCR_atom.Inference('./test_antigenTCR/Data/crystal_structure/sample.csv')
Prediction results have been saved to./antigenTCR_Output/atom-level/
../_images/notebooks_test_antigenTCR_23_1.png

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

Fine-tune deepAntigen using antigen-TCR 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_antigenTCR/Data/crystal_structure/pdb', './test_antigenTCR/Data/crystal_structure/info_noredudant.csv')
8gom
8gon
7q99
7q9a
7nme
7pbe
5wkh
3w0w
5w1v
7rtr
2nx5
5nht
2p5e
5jzi
6am5
3mv8
3kpr
5hyj
6rpb
5xov
3uts
6avg
7rm4
3pwp
7n6e
3d39
3dxa
6rp9
4mji
6vmx
2f53
3qdj
6bj2
3qdm
6avf
5c07
6vqo
6zkz
4qrp
6tmo
5wkf
5d2n
6mtm
5bs0
6eqb
5e6i
3kps
7ow5
5c09
4prh
1qrn
2bnq
5c0a
7n2n
5yxu
8gvb
5d2l
5nmg
5hho
1qse
3sjv
8gvi
6bj8
7qpj
3vxm
6eqa
6bj3
1qsf
1oga
2gj6
7n2q
6r2l
3qdg
8cx4
7n2s
4qok
5c08
3hg1
4mnq
4eup
7n1e
3qeq
5w1w
3vxr
7nmg
5isz
2vlr
6rsy
1mi5
3vxs
8gvg
4qrr
5hhm
5c0b
7pb2
6rpa
5c0c
6d78
6vrm
6zkx
5brz
3o4l
5nme
5euo
6dkp
6amu
5eu6
3h9s
4prp
5nmf
4g9f
7n2o
5tez
6zkw
4ftv
6vrn
2esv
4jfd
6tro
7n2p
7r80
1bd2
7phr
3ffc
4jry
7n2r
3qfj
3gsn
7ow6
4g8g
4jfe
1ao7
4jff
Processed pdb files have been saved to/quejinhao/deepAntigen/test_antigenTCR/Data/crystal_structure/pdb_Extracted

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

[13]:
calculate_distance('./test_antigenTCR/Data/crystal_structure/pdb_Extracted/')
3vxr
1ao7
5w1w
3ffc
8gon
5hho
3pwp
7ow6
3dxa
6dkp
7n2o
6bj2
4jry
7r80
6avf
5wkh
8gvi
6tmo
7pb2
3qdm
7nme
1qsf
5d2n
2f53
3kpr
6zkw
2esv
3vxs
4jff
7qpj
5jzi
7n2r
5hhm
3d39
4mnq
5isz
7n2q
5wkf
5nht
2nx5
6vqo
5d2l
5c09
6avg
3sjv
1bd2
7q9a
5c08
3uts
5nmf
7n1e
4qrr
1qrn
6eqb
6zkz
7ow5
6bj3
3gsn
5c0b
5c0a
1mi5
7n2p
3qdg
1oga
3mv8
3h9s
6bj8
4ftv
6vrm
4prp
4qrp
3kps
5w1v
5c07
3w0w
4qok
5nme
3hg1
4eup
5c0c
7phr
7n2n
7rtr
6amu
6rpa
7nmg
2vlr
4prh
8gom
4jfe
6am5
3qeq
3o4l
6rp9
7n2s
3qdj
6eqa
7pbe
7rm4
2bnq
6vrn
6tro
4g9f
8gvg
5bs0
5yxu
2p5e
5euo
5eu6
5e6i
7n6e
6r2l
6rsy
5brz
4jfd
3vxm
6vmx
8cx4
5tez
2gj6
4mji
3qfj
8gvb
6rpb
5hyj
5xov
5nmg
6zkx
1qse
6d78
4g8g
7q99
6mtm
Distance matrixs have been saved to /quejinhao/deepAntigen/test_antigenTCR/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_antigenTCR_atom.Train('./test_antigenTCR/Data/crystal_structure/info_noredudant.csv', config_path='./test_antigenTCR/config_atom.ini')
7pb2
Start finetuning topk layer
Epoch:0,Loss:0.2037
Epoch:1,Loss:0.1573
Epoch:2,Loss:0.1411
Epoch:3,Loss:0.1364
Epoch:4,Loss:0.1326
Epoch:5,Loss:0.1241
Epoch:6,Loss:0.1218
Epoch:7,Loss:0.1200
Epoch:8,Loss:0.1172
Epoch:9,Loss:0.1146
Epoch:10,Loss:0.1109
Epoch:11,Loss:0.1107
Epoch:12,Loss:0.1113
Epoch:13,Loss:0.1068
Epoch:14,Loss:0.1060
Epoch:15,Loss:0.1051
Epoch:16,Loss:0.1043
Epoch:17,Loss:0.1013
Epoch:18,Loss:0.1022
Epoch:19,Loss:0.1014
Epoch:20,Loss:0.0990
Epoch:21,Loss:0.1011
Epoch:22,Loss:0.0981
Epoch:23,Loss:0.0973
Epoch:24,Loss:0.0979
Epoch:25,Loss:0.0956
Epoch:26,Loss:0.0994
Epoch:27,Loss:0.0957
Epoch:28,Loss:0.0948
Epoch:29,Loss:0.0989
Epoch:30,Loss:0.0957
Epoch:31,Loss:0.0932
Epoch:32,Loss:0.0940
Epoch:33,Loss:0.0933
Epoch:34,Loss:0.0912
Epoch:35,Loss:0.0936
Epoch:36,Loss:0.0907
Epoch:37,Loss:0.0903
Epoch:38,Loss:0.0873
Epoch:39,Loss:0.0892
Epoch:40,Loss:0.0902
Epoch:41,Loss:0.0885
Epoch:42,Loss:0.0888
Epoch:43,Loss:0.0883
Epoch:44,Loss:0.0879
Epoch:45,Loss:0.0872
Epoch:46,Loss:0.0861
Epoch:47,Loss:0.0871
Epoch:48,Loss:0.0869
Epoch:49,Loss:0.0853
Epoch:50,Loss:0.0867
Epoch:51,Loss:0.0857
Epoch:52,Loss:0.0863
Epoch:53,Loss:0.0842
Epoch:54,Loss:0.0843
Epoch:55,Loss:0.0835
Epoch:56,Loss:0.0851
Epoch:57,Loss:0.0861
Epoch:58,Loss:0.0859
Epoch:59,Loss:0.0838
Epoch:60,Loss:0.0837
Epoch:61,Loss:0.0838
Epoch:62,Loss:0.0819
Epoch:63,Loss:0.0818
Epoch:64,Loss:0.0843
Epoch:65,Loss:0.0828
Epoch:66,Loss:0.0831
Epoch:67,Loss:0.0817
Epoch:68,Loss:0.0808
Epoch:69,Loss:0.0814
Epoch:70,Loss:0.0823
Epoch:71,Loss:0.0809
Epoch:72,Loss:0.0807
Epoch:73,Loss:0.0816
Epoch:74,Loss:0.0799
Epoch:75,Loss:0.0810
Epoch:76,Loss:0.0835
Epoch:77,Loss:0.0833
Epoch:78,Loss:0.0799
Epoch:79,Loss:0.0815
Epoch:80,Loss:0.0804
Epoch:81,Loss:0.0774
Epoch:82,Loss:0.0806
Epoch:83,Loss:0.0802
Epoch:84,Loss:0.0796
Epoch:85,Loss:0.0792
Epoch:86,Loss:0.0802
Epoch:87,Loss:0.0775
Epoch:88,Loss:0.0786
Epoch:89,Loss:0.0795
Epoch:90,Loss:0.0795
Epoch:91,Loss:0.0771
Epoch:92,Loss:0.0794
Epoch:93,Loss:0.0785
Epoch:94,Loss:0.0788
Epoch:95,Loss:0.0778
Epoch:96,Loss:0.0777
Epoch:97,Loss:0.0782
Epoch:98,Loss:0.0772
Epoch:99,Loss:0.0785
Epoch:100,Loss:0.0760
Epoch:101,Loss:0.0730
Epoch:102,Loss:0.0709
Epoch:103,Loss:0.0715
Epoch:104,Loss:0.0714
Epoch:105,Loss:0.0712
Epoch:106,Loss:0.0696
Epoch:107,Loss:0.0702
Epoch:108,Loss:0.0707
Epoch:109,Loss:0.0694
Epoch:110,Loss:0.0701
Epoch:111,Loss:0.0692
Epoch:112,Loss:0.0698
Epoch:113,Loss:0.0702
Epoch:114,Loss:0.0711
Epoch:115,Loss:0.0701
Epoch:116,Loss:0.0708
Epoch:117,Loss:0.0701
Epoch:118,Loss:0.0706
Epoch:119,Loss:0.0690
Epoch:120,Loss:0.0704
Epoch:121,Loss:0.0694
Epoch:122,Loss:0.0696
Epoch:123,Loss:0.0695
Epoch:124,Loss:0.0697
Epoch:125,Loss:0.0686
Epoch:126,Loss:0.0699
Epoch:127,Loss:0.0708
Epoch:128,Loss:0.0690
Epoch:129,Loss:0.0685
Epoch:130,Loss:0.0690
Epoch:131,Loss:0.0686
Epoch:132,Loss:0.0681
Epoch:133,Loss:0.0689
Epoch:134,Loss:0.0684
Epoch:135,Loss:0.0693
Epoch:136,Loss:0.0694
Epoch:137,Loss:0.0695
Epoch:138,Loss:0.0688
Epoch:139,Loss:0.0678
Epoch:140,Loss:0.0685
Epoch:141,Loss:0.0680
Epoch:142,Loss:0.0684
Epoch:143,Loss:0.0682
Epoch:144,Loss:0.0673
Epoch:145,Loss:0.0685
Epoch:146,Loss:0.0670
Epoch:147,Loss:0.0686
Epoch:148,Loss:0.0668
Epoch:149,Loss:0.0683
Epoch:150,Loss:0.0678
Epoch:151,Loss:0.0680
Epoch:152,Loss:0.0680
Epoch:153,Loss:0.0677
Epoch:154,Loss:0.0668
Epoch:155,Loss:0.0664
Epoch:156,Loss:0.0668
Epoch:157,Loss:0.0681
Epoch:158,Loss:0.0680
Epoch:159,Loss:0.0672
Epoch:160,Loss:0.0662
Epoch:161,Loss:0.0672
Epoch:162,Loss:0.0671
Epoch:163,Loss:0.0667
Epoch:164,Loss:0.0670
Epoch:165,Loss:0.0669
Epoch:166,Loss:0.0670
Epoch:167,Loss:0.0671
Epoch:168,Loss:0.0669
Epoch:169,Loss:0.0670
Epoch:170,Loss:0.0663
Epoch:171,Loss:0.0664
Epoch:172,Loss:0.0656
Epoch:173,Loss:0.0670
Epoch:174,Loss:0.0663
Epoch:175,Loss:0.0665
Epoch:176,Loss:0.0666
Epoch:177,Loss:0.0665
Epoch:178,Loss:0.0676
Epoch:179,Loss:0.0664
Epoch:180,Loss:0.0655
Epoch:181,Loss:0.0668
Epoch:182,Loss:0.0679
Epoch:183,Loss:0.0668
Epoch:184,Loss:0.0649
Epoch:185,Loss:0.0665
Epoch:186,Loss:0.0657
Epoch:187,Loss:0.0664
Epoch:188,Loss:0.0653
Epoch:189,Loss:0.0655
Epoch:190,Loss:0.0655
Epoch:191,Loss:0.0655
Epoch:192,Loss:0.0656
Epoch:193,Loss:0.0662
Epoch:194,Loss:0.0655
Epoch:195,Loss:0.0663
Epoch:196,Loss:0.0659
Epoch:197,Loss:0.0657
Epoch:198,Loss:0.0658
Epoch:199,Loss:0.0661
Start finetuning classifier layer
Epoch:0,Loss:5.6952
==> Saving model...
Epoch:1,Loss:5.2551
==> Saving model...
Epoch:2,Loss:5.2238
==> Saving model...
Epoch:3,Loss:5.0737
==> Saving model...
Epoch:4,Loss:4.9461
==> Saving model...
Epoch:5,Loss:4.8391
==> Saving model...
Epoch:6,Loss:4.7851
==> Saving model...
Epoch:7,Loss:4.6411
==> Saving model...
Epoch:8,Loss:4.6028
==> Saving model...
Epoch:9,Loss:4.5101
==> Saving model...
Epoch:10,Loss:4.5186
Epoch:11,Loss:4.4334
==> Saving model...
Epoch:12,Loss:4.4233
==> Saving model...
Epoch:13,Loss:4.4036
==> Saving model...
Epoch:14,Loss:4.3425
==> Saving model...
Epoch:15,Loss:4.3292
==> Saving model...
Epoch:16,Loss:4.3463
Epoch:17,Loss:4.2656
==> Saving model...
Epoch:18,Loss:4.1963
==> Saving model...
Epoch:19,Loss:4.2551
Epoch:20,Loss:4.2004
Epoch:21,Loss:4.1918
==> Saving model...
Epoch:22,Loss:4.1241
==> Saving model...
Epoch:23,Loss:4.1368
Epoch:24,Loss:4.1082
==> Saving model...
Epoch:25,Loss:4.1639
Epoch:26,Loss:3.9917
==> Saving model...
Epoch:27,Loss:3.9804
==> Saving model...
Epoch:28,Loss:3.9709
==> Saving model...
Epoch:29,Loss:4.0375
Epoch:30,Loss:4.0101
Epoch:31,Loss:4.0170
Epoch:32,Loss:3.9618
==> Saving model...
Epoch:33,Loss:4.0127
Epoch:34,Loss:3.9846
Epoch:35,Loss:3.9032
==> Saving model...
Epoch:36,Loss:3.8727
==> Saving model...
Epoch:37,Loss:3.9518
Epoch:38,Loss:3.8623
==> Saving model...
Epoch:39,Loss:3.8896
Epoch:40,Loss:3.8617
==> Saving model...
Epoch:41,Loss:3.8755
Epoch:42,Loss:3.9014
Epoch:43,Loss:3.8577
==> Saving model...
Epoch:44,Loss:3.8187
==> Saving model...
Epoch:45,Loss:3.7619
==> Saving model...
Epoch:46,Loss:3.7583
==> Saving model...
Epoch:47,Loss:3.8436
Epoch:48,Loss:3.8271
Epoch:49,Loss:3.8189
Epoch:50,Loss:3.7923
Epoch:51,Loss:3.7155
==> Saving model...
Epoch:52,Loss:3.8098
Epoch:53,Loss:3.7702
Epoch:54,Loss:3.7201
Epoch:55,Loss:3.7459
Epoch:56,Loss:3.7113
==> Saving model...
Epoch:57,Loss:3.7247
Epoch:58,Loss:3.6949
==> Saving model...
Epoch:59,Loss:3.7525
Epoch:60,Loss:3.7730
Epoch:61,Loss:3.6748
==> Saving model...
Epoch:62,Loss:3.5957
==> Saving model...
Epoch:63,Loss:3.6506
Epoch:64,Loss:3.6795
Epoch:65,Loss:3.7092
Epoch:66,Loss:3.6119
Epoch:67,Loss:3.6979
Epoch:68,Loss:3.6674
Epoch:69,Loss:3.6762
Epoch:70,Loss:3.6053
Epoch:71,Loss:3.5464
==> Saving model...
Epoch:72,Loss:3.5878
Epoch:73,Loss:3.6741
Epoch:74,Loss:3.6192
Epoch:75,Loss:3.6399
Epoch:76,Loss:3.5955
Epoch:77,Loss:3.5448
==> Saving model...
Epoch:78,Loss:3.5502
Epoch:79,Loss:3.5776
Epoch:80,Loss:3.5342
==> Saving model...
Epoch:81,Loss:3.6092
Epoch:82,Loss:3.6223
Epoch:83,Loss:3.5488
Epoch:84,Loss:3.5615
Epoch:85,Loss:3.4917
==> Saving model...
Epoch:86,Loss:3.5412
Epoch:87,Loss:3.5789
Epoch:88,Loss:3.6041
Epoch:89,Loss:3.5743
Epoch:90,Loss:3.5281
Epoch:91,Loss:3.5336
Epoch:92,Loss:3.5249
Epoch:93,Loss:3.5900
Epoch:94,Loss:3.5884
Epoch:95,Loss:3.4855
==> Saving model...
Epoch:96,Loss:3.4593
==> Saving model...
Epoch:97,Loss:3.5348
Epoch:98,Loss:3.4727
Epoch:99,Loss:3.4888
Epoch:100,Loss:3.4669
Epoch:101,Loss:3.4282
==> Saving model...
Epoch:102,Loss:3.4504
Epoch:103,Loss:3.4117
==> Saving model...
Epoch:104,Loss:3.4661
Epoch:105,Loss:3.3491
==> Saving model...
Epoch:106,Loss:3.4788
Epoch:107,Loss:3.3751
Epoch:108,Loss:3.3805
Epoch:109,Loss:3.4261
Epoch:110,Loss:3.4323
Epoch:111,Loss:3.5177
Epoch:112,Loss:3.4006
Epoch:113,Loss:3.4381
Epoch:114,Loss:3.4600
Epoch:115,Loss:3.4246
Epoch:116,Loss:3.3923
Epoch:117,Loss:3.4085
Epoch:118,Loss:3.3681
Epoch:119,Loss:3.4084
Epoch:120,Loss:3.3639
Epoch:121,Loss:3.3570
Epoch:122,Loss:3.3262
==> Saving model...
Epoch:123,Loss:3.4028
Epoch:124,Loss:3.4102
Epoch:125,Loss:3.4081
Epoch:126,Loss:3.4168
Epoch:127,Loss:3.3772
Epoch:128,Loss:3.3400
Epoch:129,Loss:3.3232
==> Saving model...
Epoch:130,Loss:3.4567
Epoch:131,Loss:3.3174
==> Saving model...
Epoch:132,Loss:3.3744
Epoch:133,Loss:3.3590
Epoch:134,Loss:3.4244
Epoch:135,Loss:3.3721
Epoch:136,Loss:3.3906
Epoch:137,Loss:3.3407
Epoch:138,Loss:3.3247
Epoch:139,Loss:3.3186
Epoch:140,Loss:3.3646
Epoch:141,Loss:3.3026
==> Saving model...
Epoch:142,Loss:3.3668
Epoch:143,Loss:3.3393
Epoch:144,Loss:3.2588
==> Saving model...
Epoch:145,Loss:3.3549
Epoch:146,Loss:3.2962
Epoch:147,Loss:3.3546
Epoch:148,Loss:3.3538
Epoch:149,Loss:3.3318
Epoch:150,Loss:3.2827
Epoch:151,Loss:3.3016
Epoch:152,Loss:3.3513
Epoch:153,Loss:3.3819
Epoch:154,Loss:3.3240
Epoch:155,Loss:3.2934
Epoch:156,Loss:3.3802
Epoch:157,Loss:3.3446
Epoch:158,Loss:3.3233
Epoch:159,Loss:3.3200
Epoch:160,Loss:3.3567
Epoch:161,Loss:3.3492
Epoch:162,Loss:3.4214
Epoch:163,Loss:3.2993
Epoch:164,Loss:3.2781
Epoch:165,Loss:3.2987
Epoch:166,Loss:3.2865
Epoch:167,Loss:3.3606
Epoch:168,Loss:3.3897
Epoch:169,Loss:3.3009
Epoch:170,Loss:3.2667
Epoch:171,Loss:3.2565
==> Saving model...
Epoch:172,Loss:3.3755
Epoch:173,Loss:3.2469
==> Saving model...
Epoch:174,Loss:3.3299
Epoch:175,Loss:3.2937
Epoch:176,Loss:3.2770
Epoch:177,Loss:3.2655
Epoch:178,Loss:3.3035
Epoch:179,Loss:3.3447
Epoch:180,Loss:3.2584
Epoch:181,Loss:3.2670
Epoch:182,Loss:3.3727
Epoch:183,Loss:3.2873
Epoch:184,Loss:3.3234
Epoch:185,Loss:3.2903
Epoch:186,Loss:3.2564
Epoch:187,Loss:3.3100
Epoch:188,Loss:3.3277
Epoch:189,Loss:3.2567
Epoch:190,Loss:3.2779
Epoch:191,Loss:3.2079
==> Saving model...
Epoch:192,Loss:3.3724
Epoch:193,Loss:3.2560
Epoch:194,Loss:3.2980
Epoch:195,Loss:3.2349
Epoch:196,Loss:3.2198
Epoch:197,Loss:3.3041
Epoch:198,Loss:3.3591
Epoch:199,Loss:3.2905
Parameters of fine-tuned model have been saved to./antigenTCR_finetune_log/7pb2
NPCC:0.9096
ACC:0.8700 AUROC:0.8560 Precision:0.3333 Recall:0.6250 F1:0.4348 AUPR:0.2341
Validation results have been saved to./antigenTCR_Output/atom-level/7pb2
../_images/notebooks_test_antigenTCR_31_1.png
../_images/notebooks_test_antigenTCR_31_2.png

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