Diff of /GP/run_mlp.py [000000] .. [5bc2f8]

Switch to side-by-side view

--- a
+++ b/GP/run_mlp.py
@@ -0,0 +1,151 @@
+from CNN.cnn import acc_pearson_r  as acc_pearson_r
+from MLP.mlp import mlp_main as mlp_main
+from MLP.mlp import mlp_main_cat as mlp_main_cat
+import os
+import sys
+import pandas as pd
+import numpy as np
+import talos as ta
+
+from matplotlib import pyplot as plt
+
+from keras import backend as K
+from keras.models import Sequential
+from keras.layers import Dense, Activation
+from keras.layers import Dropout
+from keras import regularizers
+from keras.activations import relu, elu, linear, softmax, tanh, softplus
+from keras.callbacks import EarlyStopping, Callback
+from keras.wrappers.scikit_learn import KerasRegressor
+from keras.optimizers import Adam, Nadam, sgd, Adadelta, RMSprop
+from keras.losses import mean_squared_error, categorical_crossentropy, logcosh
+from keras.utils.np_utils import to_categorical
+from keras import metrics
+
+# keras to CNN
+from keras.layers import Flatten, Conv1D, MaxPooling1D
+# defining network
+from keras.layers import Flatten, Conv1D, MaxPooling1D
+from keras import regularizers
+
+import wrangle as wr
+from talos.metrics.keras_metrics import fmeasure_acc
+from talos.model.layers import hidden_layers
+from talos import live
+from talos.model import lr_normalizer, early_stopper, hidden_layers
+import os
+from talos import Deploy
+
+
+def run_mlp_main(X_tr, y_tr, X_vl, y_val, output, main, prop,trait,cat,
+lr,dr_1,dr_2,reg_1,reg_2,act_1,hn,hl,epochs,op,bs,N_neurons_FL):
+    # population: Number of networks/genomes in each generation.
+    # we only need to train the new ones....
+    # generations: Number of times to evolve the population.
+    # hyperparameters
+    p = {'lr':  lr,
+         'reg1': reg_1,
+         'reg2': reg_2,
+         'first_neuron': N_neurons_FL,
+         'hidden_neurons': hn,
+         'hidden_layers': hl,
+         'batch_size': bs,
+         'epochs': epochs,
+         'dropout_1': dr_1,
+         'dropout_2': dr_2,
+         'optimizer': op,
+         'activation': act_1,
+         'last_activation': [linear]}
+    if cat is False:
+        talos_mlp = ta.Scan(x=X_tr,
+                            y=y_tr,
+                            model=mlp_main, params=p,
+                            grid_downsample=prop,
+                            print_params=True,
+                            dataset_name='mlp_model')
+        best_model = talos_mlp.best_model(metric='val_acc_pearson_r', asc=False)
+    else:
+        talos_mlp = ta.Scan(x=X_tr,
+                            y=y_tr,
+                            model=mlp_main_cat, params=p,
+                            grid_downsample=prop,
+                            print_params=True,
+                            dataset_name='mlp_model')
+        best_model = talos_mlp.best_model(metric='val_acc')
+
+    x_val = X_vl
+    yy_hat = best_model.predict(x_val, batch_size=128)
+
+
+    # save model
+
+    talos_Data = pd.DataFrame(talos_mlp.data)
+    talos_Data["val_loss"] = pd.to_numeric(talos_Data["val_loss"], errors="coerce")
+    if cat is False:
+        talos_Data["acc_pearson_r"] = pd.to_numeric(talos_Data["acc_pearson_r"], errors="coerce")
+        talos_Data["val_acc_pearson_r"] = pd.to_numeric(talos_Data["val_acc_pearson_r"], errors="coerce")
+
+
+    os.chdir(output)
+
+    if not os.path.exists("mlp"):
+        os.makedirs("mlp")
+        dir = output + "mlp/"
+
+    os.chdir(os.path.join(output, 'mlp/'))
+
+    # write output
+    talos_Data.to_csv("mlp_prediction_talos.csv", index=False)
+
+    r = ta.Reporting("mlp_prediction_talos.csv")
+
+    if not os.path.exists("figures"):
+        os.makedirs("figures")
+        dir = output + "mlp/figures/"
+
+    os.chdir(os.path.join(output, 'mlp/figures/'))
+    if cat is False:
+        try:
+            number= y_tr.shape[1]
+            for i in range(0, number):
+                corr = np.corrcoef(y_val[:, i], yy_hat[:, i])[0, 1]
+                # correlation btw predicted and observed
+                fig = plt.figure()
+                # plot observed vs. predicted targets
+                plt.title('mlp: Observed vs Predicted Y trait_' + str(i) + 'cor:' + str(corr))
+                plt.ylabel('Predicted')
+                plt.xlabel('Observed')
+                plt.scatter(y_val[:, i], yy_hat[:, i], marker='o')
+                fig.savefig("mlp_Tunne_trait_" + str(i) + '.png',
+                            dpi=300)
+                plt.close(fig)
+        except IndexError:
+            yy_hat=np.reshape(yy_hat,-1)
+
+            corr = np.corrcoef(y_val, yy_hat)[0, 1]
+            # correlation btw predicted and observed
+            fig = plt.figure()
+            # plot observed vs. predicted targets
+            plt.title('mlp: Observed vs Predicted Y trait_' + str(trait) + 'cor:' + str(corr))
+            plt.ylabel('Predicted')
+            plt.xlabel('Observed')
+            plt.scatter(y_val, yy_hat, marker='o')
+            fig.savefig("mlp_Tunne_trait_" + str(trait) + '.png',
+                        dpi=300)
+            plt.close(fig)
+
+
+    os.chdir(output)
+    if os.path.exists("best_model"):
+        os.rmdir("best_model")
+        os.makedirs("best_model")
+    if not os.path.exists("best_model"):
+        os.makedirs("best_model")
+
+    os.chdir(os.path.join(output, 'best_model/'))
+
+    # os.chdir(main)
+    if cat is False:
+        Deploy(talos_mlp, 'mlp_optimize', metric='val_acc_pearson_r', asc=False)
+    else:
+        Deploy(talos_mlp,'mlp_optimize')