tested steroids

master
Nicolasticot 2019-10-29 22:03:06 +01:00
parent 015b4fa1e1
commit ed4fe52cfe
1 changed files with 70 additions and 29 deletions

View File

@ -11,7 +11,7 @@
import numpy as np import numpy as np
import tensorflow as tf import tensorflow as tf
from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import LabelEncoder
from keras.models import Sequential from keras.models import Sequential, load_model
from keras import optimizers, callbacks from keras import optimizers, callbacks
from keras.layers import Dense, Flatten, TimeDistributed, Dropout from keras.layers import Dense, Flatten, TimeDistributed, Dropout
from keras import Input, Model from keras import Input, Model
@ -23,16 +23,6 @@ from keras.layers import Convolution3D, MaxPooling3D
# ### used to store model prediction in order to plot roc curve # ### used to store model prediction in order to plot roc curve
# In[ ]:
class prediction_history(callbacks.Callback):
def __init__(self):
self.predhis = []
def on_epoch_end(self, epoch, logs={}):
self.predhis.append(model.predict(predictor_train))
# ### Creating input and ouputs # ### Creating input and ouputs
# In[ ]: # In[ ]:
@ -130,7 +120,7 @@ def model_heavy(): # créer un objet modèle
# In[8]: # In[8]:
def model_new(): # créer un objet modèle def model_fast_k32(): # créer un objet modèle
""" """
Return a simple sequentiel model Return a simple sequentiel model
@ -138,10 +128,10 @@ def model_new(): # créer un objet modèle
- model : keras.Model - model : keras.Model
""" """
inputs = Input(shape=(14,32,32,32)) inputs = Input(shape=(14,32,32,32))
conv_1 = Convolution3D(filters=64, kernel_size=5, padding="valid", data_format='channels_first')(inputs) conv_1 = Convolution3D(filters=64, kernel_size=32, padding="valid", data_format='channels_first')(inputs)
activation_1 = LeakyReLU(alpha = 0.1)(conv_1) activation_1 = LeakyReLU(alpha = 0.1)(conv_1)
drop_1 = Dropout(0.2)(activation_1) drop_1 = Dropout(0.2)(activation_1)
conv_2 = Convolution3D(filters=64, kernel_size=3, padding="valid", data_format='channels_first')(drop_1) conv_2 = Convolution3D(filters=128, kernel_size=32, padding="valid", data_format='channels_first')(drop_1)
activation_2 = LeakyReLU(alpha = 0.1)(conv_2) activation_2 = LeakyReLU(alpha = 0.1)(conv_2)
maxpool = MaxPooling3D(pool_size=(2,2,2), maxpool = MaxPooling3D(pool_size=(2,2,2),
strides=None, strides=None,
@ -149,7 +139,37 @@ def model_new(): # créer un objet modèle
data_format='channels_first')(activation_2) data_format='channels_first')(activation_2)
drop_2 = Dropout(0.4)(maxpool) drop_2 = Dropout(0.4)(maxpool)
flatters = Flatten()(drop_2) flatters = Flatten()(drop_2)
dense = Dense(128)(flatters) dense = Dense(256)(flatters)
activation_3 = LeakyReLU(alpha = 0.1)(dense)
drop_3 = Dropout(0.4)(activation_3)
output = Dense(3, activation='softmax')(drop_3)
model = Model(inputs=inputs, outputs=output)
my_opt = optimizers.Adam(learning_rate=0.000001, beta_1=0.9, beta_2=0.999, amsgrad=False)
print(model.summary)
model.compile(optimizer=my_opt, loss="categorical_crossentropy",
metrics=["accuracy"])
return model
def model_fast_k16(): # créer un objet modèle
"""
Return a simple sequentiel model
Returns :
- model : keras.Model
"""
inputs = Input(shape=(14,32,32,32))
conv_1 = Convolution3D(filters=64, kernel_size=16, padding="valid", data_format='channels_first')(inputs)
activation_1 = LeakyReLU(alpha = 0.1)(conv_1)
drop_1 = Dropout(0.2)(activation_1)
conv_2 = Convolution3D(filters=128, kernel_size=16, padding="valid", data_format='channels_first')(drop_1)
activation_2 = LeakyReLU(alpha = 0.1)(conv_2)
maxpool = MaxPooling3D(pool_size=(2,2,2),
strides=None,
padding='valid',
data_format='channels_first')(activation_2)
drop_2 = Dropout(0.4)(maxpool)
flatters = Flatten()(drop_2)
dense = Dense(256)(flatters)
activation_3 = LeakyReLU(alpha = 0.1)(dense) activation_3 = LeakyReLU(alpha = 0.1)(dense)
drop_3 = Dropout(0.4)(activation_3) drop_3 = Dropout(0.4)(activation_3)
output = Dense(3, activation='softmax')(drop_3) output = Dense(3, activation='softmax')(drop_3)
@ -200,51 +220,72 @@ def model_light(): # créer un objet modèle
# In[ ]: # In[ ]:
sample = 1000
data = in_out_lists(1400) data = in_out_lists(sample)
pockets = np.cumsum(data[1], axis=0)[-1] pockets = np.cumsum(data[1], axis=0)[-1]
# In[ ]: # In[ ]:
print("with random seed=9001 and a 1400 pockets dataset the rates are:\n {} heme, {} nucleotide, {} control\n Total avaible dataset are composed of the following proportions:\n {} heme, {} nucleotide, {} control".format(pockets[0]/1400, pockets[1]/1400,pockets[2]/1400, print("with random seed=9001 and a {} pockets dataset the rates are:\n {} heme, {} nucleotide, {} control\n Total avaible dataset are composed of the following proportions:\n {} heme, {} nucleotide, {} control".format(sample, pockets[0]/sample,
pockets[1]/sample,pockets[2]/sample,
0.145, 0.380, 0.475)) 0.145, 0.380, 0.475))
# In[ ]: # In[ ]:
train = int(sample*0.6)
data_onehot = data[0] data_onehot = data[0]
output = data[1] output = data[1]
X_train = data_onehot[0:1000,]
Y_train = output[0:1000,] X_train = data_onehot[0:train,]
X_test = data_onehot[1000:,] Y_train = output[0:train,]
Y_test = output[1000:,] X_test = data_onehot[train:,]
Y_test = output[train:,]
# In[ ]: # In[ ]:
my_model = model_new() my_model = model_fast_k16()
# In[ ]: # In[ ]:
tf.test.is_gpu_available() tf.test.is_gpu_available()
#my_model.fit(X_train, Y_train, epochs=50, batch_size=30)
# In[ ]: # In[ ]:
history_mild_2mp = my_model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=30, batch_size=32) my_model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=50, batch_size=32)
my_model.save('new_model_e30_b32_t1000.h5') #my_model.save('new_model_e50_b32_t1600.h5')
#my_model = load_model('new_model_e50_b32_t1600.h5')
# ## Testing steroids
# In[ ]: with open("steroid.list", "r") as filin:
steroid = filin.read()
steroid = steroid.split("\n")
steroid.pop()
X_steroid = np.ndarray(shape=(69, 14, 32, 32, 32))
#predictions=prediction_history() i = -1
for pocket in steroid:
i += 1
X_steroid[i,] = np.load("deepdrug3d_voxel_data/"+pocket+".npy")
Y_pred_steroid = my_model.predict(X_steroid)
Y_pred_steroid = Y_pred_steroid.round()
steroid_predict = Y_pred_steroid.cumsum(axis=0)
print("On 69 steroid-binded pockets, prediction are the following:\n\
predicted as heme:\t{}\npredicted as nucleotide:\t{}\n\
predicted as control:\t{}\n".format(steroid_predict[0],
steroid_predict[1],
steroid_predict[2]))