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

Switch to side-by-side view

--- a
+++ b/GP/run_cnn.py
@@ -0,0 +1,159 @@
+from CNN.cnn import acc_pearson_r  as acc_pearson_r
+from CNN.cnn import cnn_main as cnn_main
+from CNN.cnn import cnn_main_cat as cnn_main_cat
+import os
+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_cnn_main(X_tr,y_tr,X_vl,y_val,output,main,prop,trait,cat,
+lr,dr_1,dr_2,reg_1,reg_2,reg_3,nconv,act_1,act_2,hn,ps,hl,ks,
+ns,epochs,nf,op,bs):
+    """Evolve a genome."""
+    # 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 = {'hidden_neurons':hn,
+         'reg1': reg_1,
+         'reg2': reg_2,
+         'reg3': reg_3,
+         'pool':ps,
+         'lr': lr,
+         'nconv':nconv,
+         'hidden_layers': hl,
+         'kernel_size': ks,
+         'nStride': ns,  # stride between convolutions
+         'nFilter': nf,  # no. of convolutions'
+         'batch_size': bs,
+         'epochs': epochs,
+         'dropout_1':dr_1,
+         'dropout_2':  dr_2,
+         'optimizer':  op, #[Adam,Nadam],#
+         'activation_1':act_1,
+         'activation_2': act_2,
+         'last_activation': [linear]}
+
+    print(p)
+
+
+    if cat is False:
+        talos_cnn = ta.Scan(x=X_tr,
+                            y=y_tr,
+                            model=cnn_main, params=p,
+                            grid_downsample=prop,
+                            print_params=True,
+                            dataset_name='cnn_model')
+
+        #best_model = talos_cnn.best_model(metric='val_acc_pearson_r', asc=False)
+        best_model = talos_cnn.best_model(metric='val_loss', asc=True)
+    else:
+        talos_cnn = ta.Scan(x=X_tr,
+                            y=y_tr,
+                            model=cnn_main_cat, params=p,
+                            grid_downsample=prop,
+                            print_params=True,
+                            dataset_name='cnn_model')
+        best_model = talos_cnn.best_model(metric='val_acc')
+
+
+    x_val = np.expand_dims(np.asarray(X_vl), axis=2)
+    yy_hat = best_model.predict(x_val, batch_size=32)
+
+    # save model
+
+    talos_Data = pd.DataFrame(talos_cnn.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("cnn"):
+        os.makedirs("cnn")
+        dir = output + "cnn/"
+
+    os.chdir(os.path.join(output, 'cnn/'))
+
+    # write output
+    talos_Data.to_csv("cnn_prediction_talos.csv", index=False)
+
+    r = ta.Reporting("cnn_prediction_talos.csv")
+    if cat is False:
+
+        if not os.path.exists("figures"):
+            os.makedirs("figures")
+            dir = output + "cnn/figures/"
+
+        os.chdir(os.path.join(output, 'cnn/figures/'))
+        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('CNN: 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("CNN_Tunne_trait_" + str(i) + '.png',
+                            dpi=300)
+                plt.close(fig)
+            os.chdir(output)
+        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('cnn: 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("cnn_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/'))
+    if cat is False:
+        Deploy(talos_cnn, 'CNN_optimize', metric='val_acc_pearson_r', asc=False)
+    else:
+        Deploy(talos_cnn,'CNN_optimize')