|
a |
|
b/GP/run_mlp.py |
|
|
1 |
from CNN.cnn import acc_pearson_r as acc_pearson_r |
|
|
2 |
from MLP.mlp import mlp_main as mlp_main |
|
|
3 |
from MLP.mlp import mlp_main_cat as mlp_main_cat |
|
|
4 |
import os |
|
|
5 |
import sys |
|
|
6 |
import pandas as pd |
|
|
7 |
import numpy as np |
|
|
8 |
import talos as ta |
|
|
9 |
|
|
|
10 |
from matplotlib import pyplot as plt |
|
|
11 |
|
|
|
12 |
from keras import backend as K |
|
|
13 |
from keras.models import Sequential |
|
|
14 |
from keras.layers import Dense, Activation |
|
|
15 |
from keras.layers import Dropout |
|
|
16 |
from keras import regularizers |
|
|
17 |
from keras.activations import relu, elu, linear, softmax, tanh, softplus |
|
|
18 |
from keras.callbacks import EarlyStopping, Callback |
|
|
19 |
from keras.wrappers.scikit_learn import KerasRegressor |
|
|
20 |
from keras.optimizers import Adam, Nadam, sgd, Adadelta, RMSprop |
|
|
21 |
from keras.losses import mean_squared_error, categorical_crossentropy, logcosh |
|
|
22 |
from keras.utils.np_utils import to_categorical |
|
|
23 |
from keras import metrics |
|
|
24 |
|
|
|
25 |
# keras to CNN |
|
|
26 |
from keras.layers import Flatten, Conv1D, MaxPooling1D |
|
|
27 |
# defining network |
|
|
28 |
from keras.layers import Flatten, Conv1D, MaxPooling1D |
|
|
29 |
from keras import regularizers |
|
|
30 |
|
|
|
31 |
import wrangle as wr |
|
|
32 |
from talos.metrics.keras_metrics import fmeasure_acc |
|
|
33 |
from talos.model.layers import hidden_layers |
|
|
34 |
from talos import live |
|
|
35 |
from talos.model import lr_normalizer, early_stopper, hidden_layers |
|
|
36 |
import os |
|
|
37 |
from talos import Deploy |
|
|
38 |
|
|
|
39 |
|
|
|
40 |
def run_mlp_main(X_tr, y_tr, X_vl, y_val, output, main, prop,trait,cat, |
|
|
41 |
lr,dr_1,dr_2,reg_1,reg_2,act_1,hn,hl,epochs,op,bs,N_neurons_FL): |
|
|
42 |
# population: Number of networks/genomes in each generation. |
|
|
43 |
# we only need to train the new ones.... |
|
|
44 |
# generations: Number of times to evolve the population. |
|
|
45 |
# hyperparameters |
|
|
46 |
p = {'lr': lr, |
|
|
47 |
'reg1': reg_1, |
|
|
48 |
'reg2': reg_2, |
|
|
49 |
'first_neuron': N_neurons_FL, |
|
|
50 |
'hidden_neurons': hn, |
|
|
51 |
'hidden_layers': hl, |
|
|
52 |
'batch_size': bs, |
|
|
53 |
'epochs': epochs, |
|
|
54 |
'dropout_1': dr_1, |
|
|
55 |
'dropout_2': dr_2, |
|
|
56 |
'optimizer': op, |
|
|
57 |
'activation': act_1, |
|
|
58 |
'last_activation': [linear]} |
|
|
59 |
if cat is False: |
|
|
60 |
talos_mlp = ta.Scan(x=X_tr, |
|
|
61 |
y=y_tr, |
|
|
62 |
model=mlp_main, params=p, |
|
|
63 |
grid_downsample=prop, |
|
|
64 |
print_params=True, |
|
|
65 |
dataset_name='mlp_model') |
|
|
66 |
best_model = talos_mlp.best_model(metric='val_acc_pearson_r', asc=False) |
|
|
67 |
else: |
|
|
68 |
talos_mlp = ta.Scan(x=X_tr, |
|
|
69 |
y=y_tr, |
|
|
70 |
model=mlp_main_cat, params=p, |
|
|
71 |
grid_downsample=prop, |
|
|
72 |
print_params=True, |
|
|
73 |
dataset_name='mlp_model') |
|
|
74 |
best_model = talos_mlp.best_model(metric='val_acc') |
|
|
75 |
|
|
|
76 |
x_val = X_vl |
|
|
77 |
yy_hat = best_model.predict(x_val, batch_size=128) |
|
|
78 |
|
|
|
79 |
|
|
|
80 |
# save model |
|
|
81 |
|
|
|
82 |
talos_Data = pd.DataFrame(talos_mlp.data) |
|
|
83 |
talos_Data["val_loss"] = pd.to_numeric(talos_Data["val_loss"], errors="coerce") |
|
|
84 |
if cat is False: |
|
|
85 |
talos_Data["acc_pearson_r"] = pd.to_numeric(talos_Data["acc_pearson_r"], errors="coerce") |
|
|
86 |
talos_Data["val_acc_pearson_r"] = pd.to_numeric(talos_Data["val_acc_pearson_r"], errors="coerce") |
|
|
87 |
|
|
|
88 |
|
|
|
89 |
os.chdir(output) |
|
|
90 |
|
|
|
91 |
if not os.path.exists("mlp"): |
|
|
92 |
os.makedirs("mlp") |
|
|
93 |
dir = output + "mlp/" |
|
|
94 |
|
|
|
95 |
os.chdir(os.path.join(output, 'mlp/')) |
|
|
96 |
|
|
|
97 |
# write output |
|
|
98 |
talos_Data.to_csv("mlp_prediction_talos.csv", index=False) |
|
|
99 |
|
|
|
100 |
r = ta.Reporting("mlp_prediction_talos.csv") |
|
|
101 |
|
|
|
102 |
if not os.path.exists("figures"): |
|
|
103 |
os.makedirs("figures") |
|
|
104 |
dir = output + "mlp/figures/" |
|
|
105 |
|
|
|
106 |
os.chdir(os.path.join(output, 'mlp/figures/')) |
|
|
107 |
if cat is False: |
|
|
108 |
try: |
|
|
109 |
number= y_tr.shape[1] |
|
|
110 |
for i in range(0, number): |
|
|
111 |
corr = np.corrcoef(y_val[:, i], yy_hat[:, i])[0, 1] |
|
|
112 |
# correlation btw predicted and observed |
|
|
113 |
fig = plt.figure() |
|
|
114 |
# plot observed vs. predicted targets |
|
|
115 |
plt.title('mlp: Observed vs Predicted Y trait_' + str(i) + 'cor:' + str(corr)) |
|
|
116 |
plt.ylabel('Predicted') |
|
|
117 |
plt.xlabel('Observed') |
|
|
118 |
plt.scatter(y_val[:, i], yy_hat[:, i], marker='o') |
|
|
119 |
fig.savefig("mlp_Tunne_trait_" + str(i) + '.png', |
|
|
120 |
dpi=300) |
|
|
121 |
plt.close(fig) |
|
|
122 |
except IndexError: |
|
|
123 |
yy_hat=np.reshape(yy_hat,-1) |
|
|
124 |
|
|
|
125 |
corr = np.corrcoef(y_val, yy_hat)[0, 1] |
|
|
126 |
# correlation btw predicted and observed |
|
|
127 |
fig = plt.figure() |
|
|
128 |
# plot observed vs. predicted targets |
|
|
129 |
plt.title('mlp: Observed vs Predicted Y trait_' + str(trait) + 'cor:' + str(corr)) |
|
|
130 |
plt.ylabel('Predicted') |
|
|
131 |
plt.xlabel('Observed') |
|
|
132 |
plt.scatter(y_val, yy_hat, marker='o') |
|
|
133 |
fig.savefig("mlp_Tunne_trait_" + str(trait) + '.png', |
|
|
134 |
dpi=300) |
|
|
135 |
plt.close(fig) |
|
|
136 |
|
|
|
137 |
|
|
|
138 |
os.chdir(output) |
|
|
139 |
if os.path.exists("best_model"): |
|
|
140 |
os.rmdir("best_model") |
|
|
141 |
os.makedirs("best_model") |
|
|
142 |
if not os.path.exists("best_model"): |
|
|
143 |
os.makedirs("best_model") |
|
|
144 |
|
|
|
145 |
os.chdir(os.path.join(output, 'best_model/')) |
|
|
146 |
|
|
|
147 |
# os.chdir(main) |
|
|
148 |
if cat is False: |
|
|
149 |
Deploy(talos_mlp, 'mlp_optimize', metric='val_acc_pearson_r', asc=False) |
|
|
150 |
else: |
|
|
151 |
Deploy(talos_mlp,'mlp_optimize') |