From dae9fc885748f613fe92a5a310333532783f0598 Mon Sep 17 00:00:00 2001
From: Akrem Sellami <akrem.sellami@lis-lab.fr>
Date: Thu, 20 Feb 2020 15:37:50 +0100
Subject: [PATCH] Upload New File

---
 .../mdae_shared_three_layers.py               | 442 ++++++++++++++++++
 1 file changed, 442 insertions(+)
 create mode 100644 multi_view_representation_learning/mdae_shared_three_layers.py

diff --git a/multi_view_representation_learning/mdae_shared_three_layers.py b/multi_view_representation_learning/mdae_shared_three_layers.py
new file mode 100644
index 0000000..1ee9a75
--- /dev/null
+++ b/multi_view_representation_learning/mdae_shared_three_layers.py
@@ -0,0 +1,442 @@
+
+"""""""""""""""
+Monomodal Autoenconder  code
+"""""""""""""""
+import keras
+from keras.layers import Input, Dense, concatenate
+from keras.models import Model
+from keras.layers import Dropout
+from keras.callbacks import EarlyStopping
+import matplotlib.pyplot as plt
+plt.switch_backend('agg')
+import sys as os
+import os
+from sklearn.preprocessing import StandardScaler, MinMaxScaler
+from sklearn.decomposition import PCA
+from sklearn.metrics import mean_squared_error
+from math import sqrt
+from keras.optimizers import SGD, Adadelta, Adam
+import numpy as np
+from sklearn.model_selection import KFold
+from keras.callbacks import ModelCheckpoint
+from keras.models import load_model
+
+
+
+
+# loading multimodal fMRI data
+def load_data(sub, view):
+
+    # Import Task fMRI data
+    if view == 1:
+        view_tfmri = np.load(os.path.join(path, "tfmri/{}/gii_matrix_fsaverage5.npy".format(sub)))
+        return view_tfmri
+
+    # Import Resting-State fMRI data
+    if view == 2:
+        view_rsfmri = np.load(os.path.join(path, "rsfmri/{}/correlation_matrix_fsaverage5.npy".format(sub)))
+        return view_rsfmri
+
+    # Import concatenated fMRI data
+    if view ==3:
+        view_rsfmri = np.load(os.path.join(path, "rsfmri/{}/correlation_matrix_fsaverage5.npy".format(sub)))
+        view_tfmri = np.load(os.path.join(path, "tfmri/{}/gii_matrix_fsaverage5.npy".format(sub)))
+        fmri_data =np.concatenate([view_tfmri, view_rsfmri], axis=1)
+        return fmri_data
+
+
+
+
+
+# Path
+path = "/home/asellami/data_fsaverage5"
+
+print('View 1: task-fMRI')
+print('View 2: resting-state fMRI')
+print('View=3: concatenated views (task-fMRI + rest-fMRI)')
+
+
+# activation functions
+hidden_layer='linear'
+output_layer='linear'
+
+# MSE (tfmri+ rsfmri)
+mse_train = []
+mse_test = []
+# RMSE (tfmri+ rsfmri)
+rmse_train = []
+rmse_test = []
+#
+# Standard deviation MSE (tfmri+ rsfmri)
+std_mse_train = []
+std_mse_test = []
+# Standard deviation RMSE (tfmri+ rsfmri)
+std_rmse_train = []
+std_rmse_test = []
+
+
+# MSE (tfmri)
+mse_tfmri_train=[]
+mse_tfmri_test=[]
+# RMSE (tfmri)
+rmse_tfmri_train=[]
+rmse_tfmri_test=[]
+# std mse (tfmri)
+std_mse_tfmri_train=[]
+std_mse_tfmri_test=[]
+# std rmse (tfmri)
+std_rmse_tfmri_train=[]
+std_rmse_tfmri_test=[]
+
+# MSE (rsfmri)
+mse_rsfmri_train=[]
+mse_rsfmri_test=[]
+# RMSE (rsfmri)
+rmse_rsfmri_train=[]
+rmse_rsfmri_test=[]
+# std mse (rsfmri)
+std_mse_rsfmri_train=[]
+std_mse_rsfmri_test=[]
+# std rmse (rsfmri)
+std_rmse_rsfmri_train=[]
+std_rmse_rsfmri_test=[]
+
+# missing data
+missing_data=[36]
+index_subjects=np.arange(3,43)
+index_subjects = np.delete(index_subjects, np.argwhere(index_subjects == missing_data))
+
+#ar = np.arange(75,101)
+#dimensions = ar[ar%2==0]
+
+dimensions=[2, 6, 10, 16, 20, 26, 30, 36, 40, 46, 50, 56, 60, 66, 70, 76, 80, 86, 90, 96, 100]
+batch_1=dimensions[0:6]
+batch_2=dimensions[6:12]
+batch_3=dimensions[12:17]
+batch_4=dimensions[17:21]
+for dim in batch_1:
+    # create directory
+    directory = '{}'.format(dim)
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+    # Cross Validation
+    kf = KFold(n_splits=10)
+    print(kf.get_n_splits(index_subjects))
+    print("number of splits:", kf)
+    print("number of features:", dimensions)
+    cvscores_mse_test = []
+    cvscores_rmse_test = []
+    cvscores_mse_train = []
+    cvscores_rmse_train = []
+    cvscores_mse_tfmri_train=[]
+    cvscores_mse_tfmri_test = []
+    cvscores_rmse_tfmri_train = []
+    cvscores_rmse_tfmri_test = []
+    cvscores_mse_rsfmri_train = []
+    cvscores_mse_rsfmri_test = []
+    cvscores_rmse_rsfmri_train = []
+    cvscores_rmse_rsfmri_test = []
+    fold = 0
+    for train_index, test_index in kf.split(index_subjects):
+        fold += 1
+        # create directory
+        directory = '{}/fold_{}'.format(dim, fold)
+        if not os.path.exists(directory):
+            os.makedirs(directory)
+        print(f"Fold #{fold}")
+        print("TRAIN:", index_subjects[train_index], "TEST:", index_subjects[test_index])
+        # load training and testing data
+        print('Load training data...')
+        train_tfmri_data = np.concatenate([load_data(sub, 1) for sub in index_subjects[train_index]])
+        train_rsfmri_data = np.concatenate([load_data(sub, 2) for sub in index_subjects[train_index]])
+        print("Shape of the training data:", train_tfmri_data.shape)
+        print('Load testdata...')
+        test_tfmri_data = np.concatenate([load_data(sub, 1) for sub in index_subjects[test_index]])
+        test_rsfmri_data = np.concatenate([load_data(sub, 2) for sub in index_subjects[test_index]])
+        print("Shape of the test data:", test_tfmri_data.shape)
+        # Data normalization to range [-1, 1]
+        print("Data normalization to range [0, 1]")
+        scaler = MinMaxScaler()
+        normalized_train_tfmri_data = scaler.fit_transform(train_tfmri_data)
+        normalized_test_tfmri_data = scaler.fit_transform(test_tfmri_data)
+        normalized_train_rsfmri_data = scaler.fit_transform(train_rsfmri_data)
+        normalized_test_rsfmri_data = scaler.fit_transform(test_rsfmri_data)
+
+        # Apply linear autoencoder
+        # Inputs Shape
+        input_view_tfmri = Input(shape=(normalized_train_tfmri_data[0].shape))
+        input_view_rsfmri = Input(shape=(normalized_train_rsfmri_data[0].shape))
+
+        #input_train_data = Input(shape=(normalized_train_data[0].shape))
+        # Encoder Model
+        # First view
+        encoded_tfmri=Dense(100, activation=hidden_layer)(input_view_tfmri) # Layer 1, View 1
+        encoded_tfmri = Dense(70, activation=hidden_layer)(encoded_tfmri)
+        print("encoded tfmri shape", encoded_tfmri.shape)
+        # Second view
+        encoded_rsfmri=Dense(100, activation=hidden_layer)(input_view_rsfmri) # Layer 1, View 2
+        encoded_rsfmri = Dense(70, activation=hidden_layer)(encoded_rsfmri)
+        print("encoded rsfmri shape", encoded_rsfmri.shape)
+        # Shared representation with concatenation
+        shared_layer = concatenate([encoded_tfmri, encoded_rsfmri]) # Layer 3: Bottelneck layer
+        print("Shared Layer", shared_layer.shape)
+        output_shared_layer=Dense(dim, activation=hidden_layer)(shared_layer)
+        print("Output Shared Layer", output_shared_layer.shape)
+
+        # Decoder Model
+
+        decoded_tfmri=Dense(70, activation=hidden_layer)(output_shared_layer)
+        decoded_tfmri = Dense(100, activation=hidden_layer)(decoded_tfmri)
+        decoded_tfmri = Dense(normalized_train_tfmri_data[0].shape[0], activation=output_layer, name="dec_tfmri")(decoded_tfmri)
+        print("decoded_tfmri", decoded_tfmri.shape)
+        # Second view
+        decoded_rsfmri = Dense(70, activation=hidden_layer)(output_shared_layer)
+        decoded_rsfmri = Dense(100, activation=hidden_layer)(decoded_rsfmri)
+        decoded_rsfmri = Dense(normalized_train_rsfmri_data[0].shape[0], activation=output_layer, name="dec_rsfmri")(decoded_rsfmri)
+        print("decoded_rsfmri", decoded_rsfmri.shape)
+
+        # This model maps an input to its reconstruction
+        multimodal_autoencoder = Model(inputs=[input_view_tfmri, input_view_rsfmri],
+                                       outputs=[decoded_tfmri, decoded_rsfmri])
+        adam= Adam(lr=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
+        multimodal_autoencoder.compile(optimizer=adam, loss='mse')
+        print(multimodal_autoencoder.summary())
+        # fit Autoencoder on training set
+        history = multimodal_autoencoder.fit([normalized_train_tfmri_data, normalized_train_rsfmri_data], [normalized_train_tfmri_data, normalized_train_rsfmri_data],
+                                  epochs=70,
+                                  batch_size=1000,
+                                  shuffle=True,
+                                  validation_data=([normalized_test_tfmri_data, normalized_test_rsfmri_data], [normalized_test_tfmri_data, normalized_test_rsfmri_data]))
+        # list all data in history
+        print(history.history.keys())
+        # save models
+        # Save the results weights
+
+        # This model maps an inputs to its encoded representation
+        # First view
+        encoder_tfmri = Model(input_view_tfmri, encoded_tfmri)
+        encoder_tfmri.summary()
+        # Second view
+        encoder_rsfmri = Model(input_view_rsfmri, encoded_rsfmri)
+        encoder_rsfmri.summary()
+        # This model maps a two inputs to its bottelneck layer (shared layer)
+        encoder_shared_layer = Model(inputs=[input_view_tfmri, input_view_rsfmri], outputs=output_shared_layer)
+        encoder_shared_layer.summary()
+        # Separate Decoder model
+        # create a placeholder for an encoded (32-dimensional) input
+        encoded_input = Input(shape=(dim,))
+        # retrieve the layers of the autoencoder model
+        # First view
+        decoder_tfmri_layer1 = multimodal_autoencoder.layers[-6]  # Index of the first layer (after bottelneck layer)
+        decoder_tfmri_layer2 = multimodal_autoencoder.layers[-4]
+        decoder_tfmri_layer3 = multimodal_autoencoder.layers[-2]
+        # create the decoder model
+        decoder_tfmri = Model(encoded_input, decoder_tfmri_layer3(decoder_tfmri_layer2(decoder_tfmri_layer1(encoded_input))))
+        decoder_tfmri.summary()
+        # Second view
+        decoder_rsfmri_layer1 = multimodal_autoencoder.layers[-5]
+        decoder_rsfmri_layer2 = multimodal_autoencoder.layers[-3]
+        decoder_rsfmri_layer3 = multimodal_autoencoder.layers[-1]
+        # create the decoder model
+        decoder_rsfmri = Model(encoded_input, decoder_rsfmri_layer3(decoder_rsfmri_layer2(decoder_rsfmri_layer1(encoded_input))))
+        decoder_rsfmri.summary()
+        multimodal_autoencoder.save('{}/fold_{}/multimodal_autoencoder.h5'.format(dim, fold))
+        encoder_shared_layer.save('{}/fold_{}/encoder_shared_layer.h5'.format(dim, fold))
+        encoder_tfmri.save('{}/fold_{}/encoder_tfmri.h5'.format(dim, fold))
+        encoder_rsfmri.save('{}/fold_{}/encoder_rsfmri.h5'.format(dim, fold))
+        decoder_tfmri.save('{}/fold_{}/decoder_tfmri.h5'.format(dim, fold))
+        decoder_rsfmri.save('{}/fold_{}/decoder_rsfmri.h5'.format(dim, fold))
+        # plot our loss
+        plt.plot(history.history['loss'], label='loss_fold_{}'.format(fold))
+        plt.plot(history.history['val_loss'], label='val_loss_fold_{}'.format(fold))
+        print("vector of val_loss", history.history['val_loss'])
+        plt.title('model train vs validation loss')
+        plt.ylabel('loss')
+        plt.xlabel('epoch')
+        plt.legend()
+        plt.savefig('{}/fold_{}/loss.png'.format(dim, fold))
+        plt.savefig('{}/fold_{}/loss.pdf'.format(dim, fold))
+        plt.close()
+
+        # Reconstruction of training data
+        print("Reconstruction of training data... ")
+        [X_train_new_tfmri, X_train_new_rsfmri] = multimodal_autoencoder.predict([normalized_train_tfmri_data, normalized_train_rsfmri_data])
+
+        # Training
+
+        # tfmri
+        print("Max value of predicted training tfmri data ", np.max(X_train_new_tfmri))
+        print("Min value of predicted training tfmri data", np.min(X_train_new_tfmri))
+        print("Reconstructed tfmri matrix shape:", X_train_new_tfmri.shape)
+        val_mse_train_tfmri = mean_squared_error(normalized_train_tfmri_data, X_train_new_tfmri)
+        cvscores_mse_tfmri_train.append(val_mse_train_tfmri)
+        print('Reconstruction MSE of tfmri:', val_mse_train_tfmri)
+        val_rmse_tfmri = sqrt(val_mse_train_tfmri)
+        print('Reconstruction RMSE of tfmri : ', val_rmse_tfmri)
+        cvscores_rmse_tfmri_train.append(val_rmse_tfmri)
+
+        #rsfmri
+
+        print("Max value of predicted training rsfmri data ", np.max(X_train_new_rsfmri))
+        print("Min value of predicted training rsfmri data", np.min(X_train_new_rsfmri))
+        print("Reconstructed rsfmri matrix shape:", X_train_new_rsfmri.shape)
+        val_mse_train_rsfmri = mean_squared_error(normalized_train_rsfmri_data, X_train_new_rsfmri)
+        cvscores_mse_rsfmri_train.append(val_mse_train_rsfmri)
+        print('Reconstruction MSE of rsfmri:', val_mse_train_rsfmri)
+        val_rmse_rsfmri = sqrt(val_mse_train_rsfmri)
+        print('Reconstruction RMSE of rsfmri : ', val_rmse_rsfmri)
+        cvscores_rmse_rsfmri_train.append(val_rmse_rsfmri)
+
+        #sum of MSE (tfmri + rsfmri)
+        cvscores_mse_train.append(np.sum([val_mse_train_tfmri, val_mse_train_rsfmri]))
+        # sum of RMSE (tfmri + rsfmri)
+        cvscores_rmse_train.append(sqrt(np.sum([val_mse_train_tfmri, val_mse_train_rsfmri])))
+
+        # Reconstruction of test data
+        print("Reconstruction of test data... ")
+        [X_test_new_tfmri, X_test_new_rsfmri] = multimodal_autoencoder.predict([normalized_test_tfmri_data, normalized_test_rsfmri_data])
+
+        # Test
+        # tfmri
+        print("Max value of predicted testing tfmri data ", np.max(X_test_new_tfmri))
+        print("Min value of predicted testing tfmri data", np.min(X_test_new_tfmri))
+        print("Reconstructed tfmri matrix shape:", X_test_new_tfmri.shape)
+        val_mse_test_tfmri = mean_squared_error(normalized_test_tfmri_data, X_test_new_tfmri)
+        cvscores_mse_tfmri_test.append(val_mse_test_tfmri)
+        print('Reconstruction MSE of tfmri:', val_mse_test_tfmri)
+        val_rmse_tfmri = sqrt(val_mse_test_tfmri)
+        print('Reconstruction RMSE of tfmri : ', val_rmse_tfmri)
+        cvscores_rmse_tfmri_test.append(val_rmse_tfmri)
+
+        # rsfmri
+
+        print("Max value of predicted testing rsfmri data ", np.max(X_test_new_rsfmri))
+        print("Min value of predicted testing rsfmri data", np.min(X_test_new_rsfmri))
+        print("Reconstructed rsfmri matrix shape:", X_test_new_rsfmri.shape)
+        val_mse_test_rsfmri = mean_squared_error(normalized_test_rsfmri_data, X_test_new_rsfmri)
+        cvscores_mse_rsfmri_test.append(val_mse_test_rsfmri)
+        print('Reconstruction MSE of rsfmri:', val_mse_test_rsfmri)
+        val_rmse_rsfmri = sqrt(val_mse_test_rsfmri)
+        print('Reconstruction RMSE of rsfmri : ', val_rmse_rsfmri)
+        cvscores_rmse_rsfmri_test.append(val_rmse_rsfmri)
+
+        # sum of MSE (tfmri + rsfmri)
+        cvscores_mse_test.append(np.sum([val_mse_test_tfmri, val_mse_test_rsfmri]))
+        # sum of MSE (tfmri + rsfmri)
+        cvscores_rmse_test.append(sqrt(np.sum([val_mse_test_tfmri, val_mse_test_rsfmri])))
+
+
+    # Save MSE, RMSE (tfmri +rsfmr)
+    print("shape of vector mse train", np.array([cvscores_mse_train]).shape)
+    print(cvscores_mse_train)
+    np.save('{}/cvscores_mse_train.npy'.format(dim), np.array([cvscores_mse_train]))
+    print("shape of  mse vector(test):", np.array([cvscores_mse_test]).shape)
+    print(cvscores_mse_test)
+    np.save('{}/cvscores_mse_test.npy'.format(dim), np.array([cvscores_mse_test]))
+    print("shape of rmse vector (train):", np.array([cvscores_rmse_train]).shape)
+    print(cvscores_rmse_train)
+    np.save('{}/cvscores_rmse_train.npy'.format(dim), np.array([cvscores_rmse_train]))
+    print("shape of rmse vector (test):", np.array([cvscores_rmse_test]).shape)
+    print(cvscores_rmse_test)
+    np.save('{}/cvscores_rmse_test.npy'.format(dim), np.array([cvscores_rmse_test]))
+    print("%.3f%% (+/- %.5f%%)" % (np.mean(cvscores_mse_test), np.std(cvscores_mse_test)))
+    mse_train.append(np.mean(cvscores_mse_train))
+    std_mse_train.append(np.std(cvscores_mse_train))
+    mse_test.append(np.mean(cvscores_mse_test))
+    std_mse_test.append(np.std(cvscores_mse_test))
+    rmse_train.append(np.mean(cvscores_rmse_train))
+    std_rmse_train.append(np.std(cvscores_rmse_train))
+    rmse_test.append(np.mean(cvscores_rmse_test))
+    std_rmse_test.append(np.std(cvscores_rmse_test))
+
+    # Save MSE, RMSE (tfmri)
+    print("shape of vector mse train (tfmri)", np.array([cvscores_mse_tfmri_train]).shape)
+    print(cvscores_mse_tfmri_train)
+    np.save('{}/cvscores_mse_tfmri_train.npy'.format(dim), np.array([cvscores_mse_tfmri_train]))
+    print("shape of  mse vector(test):", np.array([cvscores_mse_tfmri_test]).shape)
+    print(cvscores_mse_tfmri_test)
+    np.save('{}/cvscores_mse_tfmri_test.npy'.format(dim), np.array([cvscores_mse_tfmri_test]))
+    print("shape of rmse vector (train):", np.array([cvscores_rmse_tfmri_train]).shape)
+    print(cvscores_rmse_tfmri_train)
+    np.save('{}/cvscores_rmse_tfmri_train.npy'.format(dim), np.array([cvscores_rmse_tfmri_test]))
+    print("shape of rmse vector tfmri (test):", np.array([cvscores_rmse_tfmri_test]).shape)
+    print(cvscores_rmse_tfmri_test)
+    np.save('{}/cvscores_rmse_tfmri_test.npy'.format(dim), np.array([cvscores_rmse_tfmri_test]))
+    mse_tfmri_train.append(np.mean(cvscores_mse_tfmri_train))
+    std_mse_tfmri_train.append(np.std(cvscores_mse_tfmri_train))
+    mse_tfmri_test.append(np.mean(cvscores_mse_tfmri_test))
+    std_mse_tfmri_test.append(np.std(cvscores_mse_tfmri_test))
+    rmse_tfmri_train.append(np.mean(cvscores_rmse_tfmri_train))
+    std_rmse_tfmri_train.append(np.std(cvscores_rmse_tfmri_train))
+    rmse_tfmri_test.append(np.mean(cvscores_rmse_tfmri_test))
+    std_rmse_tfmri_test.append(np.std(cvscores_rmse_tfmri_test))
+
+    # Save MSE, RMSE (rsfmri)
+    print("shape of vector mse train (rsfmri)", np.array([cvscores_mse_rsfmri_train]).shape)
+    print(cvscores_mse_rsfmri_train)
+    np.save('{}/cvscores_mse_rsfmri_train.npy'.format(dim), np.array([cvscores_mse_rsfmri_train]))
+    print("shape of  mse vector(test):", np.array([cvscores_mse_rsfmri_test]).shape)
+    print(cvscores_mse_rsfmri_test)
+    np.save('{}/cvscores_mse_rsfmri_test.npy'.format(dim), np.array([cvscores_mse_rsfmri_test]))
+    print("shape of rmse vector (train):", np.array([cvscores_rmse_rsfmri_train]).shape)
+    print(cvscores_rmse_rsfmri_train)
+    np.save('{}/cvscores_rmse_rsfmri_train.npy'.format(dim), np.array([cvscores_rmse_rsfmri_test]))
+    print("shape of rmse vector rsfmri (test):", np.array([cvscores_rmse_rsfmri_test]).shape)
+    print(cvscores_rmse_rsfmri_test)
+    np.save('{}/cvscores_rmse_rsfmri_test.npy'.format(dim), np.array([cvscores_rmse_rsfmri_test]))
+    mse_rsfmri_train.append(np.mean(cvscores_mse_rsfmri_train))
+    std_mse_rsfmri_train.append(np.std(cvscores_mse_rsfmri_train))
+    mse_rsfmri_test.append(np.mean(cvscores_mse_rsfmri_test))
+    std_mse_rsfmri_test.append(np.std(cvscores_mse_rsfmri_test))
+    rmse_rsfmri_train.append(np.mean(cvscores_rmse_rsfmri_train))
+    std_rmse_rsfmri_train.append(np.std(cvscores_rmse_rsfmri_train))
+    rmse_rsfmri_test.append(np.mean(cvscores_rmse_rsfmri_test))
+    std_rmse_rsfmri_test.append(np.std(cvscores_rmse_rsfmri_test))
+
+
+# save MSE, RMSE, and STD vectors for training and test sets
+np.save('mse_train_mean.npy', np.array([mse_train]))
+np.save('rmse_train_mean.npy', np.array([rmse_train]))
+np.save('std_mse_train_mean.npy', np.array([std_mse_train]))
+np.save('std_rmse_train_mean.npy', np.array([std_rmse_train]))
+np.save('mse_test_mean.npy', np.array([mse_test]))
+np.save('rmse_test_mean.npy', np.array([rmse_test]))
+np.save('std_mse_test_mean.npy', np.array([std_mse_test]))
+np.save('std_rmse_test_mean.npy', np.array([std_rmse_test]))
+
+
+# save MSE, RMSE, and STD vectors for training and test sets (rsfmri)
+
+np.save( 'mse_test_mean_rsfmri.npy', np.array([mse_rsfmri_test]))
+np.save( 'rmse_test_mean_rsfmri.npy', np.array([rmse_rsfmri_test]))
+np.save( 'mse_train_mean_rsfmri.npy', np.array([mse_rsfmri_train]))
+np.save( 'rmse_train_mean_rsfmri.npy', np.array([rmse_rsfmri_train]))
+np.save( 'std_mse_mean_rsfmri.npy', np.array([std_mse_rsfmri_test]))
+np.save( 'std_rmse_mean_rsfmri.npy', np.array([std_rmse_rsfmri_test]))
+
+
+# plotting the mse train
+# setting x and y axis range
+# plotting the mse train
+plt.plot(dimensions, mse_train, label="mse_train")
+plt.plot(dimensions, mse_test, label="mse_test")
+plt.xlabel('Encoding dimension')
+plt.ylabel('Reconstruction error (MSE)')
+# showing legend
+plt.legend()
+plt.savefig('reconstruction_error_mse.pdf')
+plt.savefig('reconstruction_error_mse.png')
+plt.close()
+# plotting the rmse train
+# setting x and y axis range
+plt.plot(dimensions, rmse_train, label="rmse_train")
+plt.plot(dimensions, rmse_test, label="rmse_test")
+plt.xlabel('Encoding dimension')
+plt.ylabel('Reconstruction error (RMSE)')
+# showing legend
+plt.legend()
+plt.savefig('reconstruction_error_rmse.pdf')
+plt.savefig('reconstruction_error_rmse.png')
+plt.close()
+
+
-- 
GitLab