From ed4fe52cfe3f664b184061dfa67d2b88634a2dbc Mon Sep 17 00:00:00 2001 From: Nicolasticot Date: Tue, 29 Oct 2019 22:03:06 +0100 Subject: [PATCH] tested steroids --- DeepDrug.py | 99 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 70 insertions(+), 29 deletions(-) diff --git a/DeepDrug.py b/DeepDrug.py index aa85e5e..402701d 100644 --- a/DeepDrug.py +++ b/DeepDrug.py @@ -11,7 +11,7 @@ import numpy as np import tensorflow as tf from sklearn.preprocessing import LabelEncoder -from keras.models import Sequential +from keras.models import Sequential, load_model from keras import optimizers, callbacks from keras.layers import Dense, Flatten, TimeDistributed, Dropout 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 -# 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 # In[ ]: @@ -130,7 +120,7 @@ def model_heavy(): # créer un objet modèle # 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 @@ -138,10 +128,10 @@ def model_new(): # créer un objet modèle - model : keras.Model """ 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) 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) maxpool = MaxPooling3D(pool_size=(2,2,2), strides=None, @@ -149,7 +139,37 @@ def model_new(): # créer un objet modèle data_format='channels_first')(activation_2) drop_2 = Dropout(0.4)(maxpool) 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) drop_3 = Dropout(0.4)(activation_3) output = Dense(3, activation='softmax')(drop_3) @@ -200,51 +220,72 @@ def model_light(): # créer un objet modèle # In[ ]: - -data = in_out_lists(1400) +sample = 1000 +data = in_out_lists(sample) pockets = np.cumsum(data[1], axis=0)[-1] # 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, - 0.145, 0.380, 0.475)) +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)) # In[ ]: +train = int(sample*0.6) data_onehot = data[0] output = data[1] -X_train = data_onehot[0:1000,] -Y_train = output[0:1000,] -X_test = data_onehot[1000:,] -Y_test = output[1000:,] + +X_train = data_onehot[0:train,] +Y_train = output[0:train,] +X_test = data_onehot[train:,] +Y_test = output[train:,] # In[ ]: -my_model = model_new() +my_model = model_fast_k16() # In[ ]: tf.test.is_gpu_available() -#my_model.fit(X_train, Y_train, epochs=50, batch_size=30) # In[ ]: -history_mild_2mp = my_model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=30, batch_size=32) -my_model.save('new_model_e30_b32_t1000.h5') +my_model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=50, batch_size=32) +#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]))