DeepAcceptor / abcBERT.py
jinysun's picture
Upload 10 files
36c5570
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 2 15:05:03 2023
@author: BM109X32G-10GPU-02
"""
import tensorflow as tf
import tensorflow.keras as keras
import tensorflow.keras.layers as layers
from tensorflow.keras.constraints import max_norm
import pandas as pd
import numpy as np
import sys
from dataset import predict_smiles
from sklearn.metrics import r2_score,roc_auc_score
from model import PredictModel,BertModel
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true"
def main(smiles):
keras.backend.clear_session()
os.environ['CUDA_VISIBLE_DEVICES'] = "-1"
small = {'name': 'Small', 'num_layers': 3, 'num_heads': 4, 'd_model': 128, 'path': 'small_weights','addH':True}
medium = {'name': 'Medium', 'num_layers': 6, 'num_heads': 8, 'd_model': 256, 'path': 'medium_weights2','addH':True}
medium3 = {'name': 'Medium', 'num_layers': 8, 'num_heads': 8, 'd_model': 256, 'path': 'medium_weights2',
'addH': True}
large = {'name': 'Large', 'num_layers': 12, 'num_heads': 12, 'd_model': 576, 'path': 'large_weights','addH':True}
medium_without_H = {'name': 'Medium', 'num_layers': 6, 'num_heads': 8, 'd_model': 256, 'path': 'weights_without_H','addH':False}
medium_without_pretrain = {'name': 'Medium', 'num_layers': 6, 'num_heads': 8, 'd_model': 256,'path': 'medium_without_pretraining_weights','addH':True}
arch = medium3## small 3 4 128 medium: 6 6 256 large: 12 8 516
pretraining = False
pretraining_str = 'pretraining' if pretraining else ''
trained_epoch = 80
task = 'data'
seed = 14
num_layers = arch['num_layers']
num_heads = arch['num_heads']
d_model = arch['d_model']
addH = arch['addH']
dff = d_model * 2
vocab_size =60
dropout_rate = 0.1
tf.random.set_seed(seed=seed)
graph_dataset = predict_smiles(smiles, addH=addH)
# graph_dataset = Graph_Regression_Dataset('data/reg/{}.csv', smiles_field='SMILES',
# label_field='PCE',addH=addH)
test_dataset = graph_dataset.get_data()
#value_range = graph_dataset.value_range()
x, adjoin_matrix, y = next(iter(test_dataset.take(1)))
seq = tf.cast(tf.math.equal(x, 0), tf.float32)
mask = seq[:, tf.newaxis, tf.newaxis, :]
model = PredictModel(num_layers=num_layers, d_model=d_model, dff=dff, num_heads=num_heads, vocab_size=vocab_size,
dense_dropout=0.2)
preds = model(x, mask=mask, adjoin_matrix=adjoin_matrix, training=False)
model.load_weights('{}.h5'.format('15data'))
class CustomSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):
def __init__(self, d_model, total_steps=4000):
super(CustomSchedule, self).__init__()
self.d_model = d_model
self.d_model = tf.cast(self.d_model, tf.float32)
self.total_step = total_steps
self.warmup_steps = total_steps*0.10
def __call__(self, step):
arg1 = step/self.warmup_steps
arg2 = 1-(step-self.warmup_steps)/(self.total_step-self.warmup_steps)
return 10e-5* tf.math.minimum(arg1, arg2)
steps_per_epoch = len(test_dataset)
value_range = 1
y_true = []
y_preds = []
for x, adjoin_matrix, y in test_dataset:
seq = tf.cast(tf.math.equal(x, 0), tf.float32)
mask = seq[:, tf.newaxis, tf.newaxis, :]
preds = model(x, mask=mask, adjoin_matrix=adjoin_matrix, training=False)
y_true.append(y.numpy())
y_preds.append(preds.numpy())
y_true = np.concatenate(y_true, axis=0).reshape(-1)
y_preds = np.concatenate(y_preds, axis=0).reshape(-1)
return y_preds