Jeremiah_

EEG-MLP.py

Oct 22nd, 2019
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.54 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Mon Oct 21 00:16:21 2019
  5.  
  6. @author: jeremiah
  7. """
  8.  
  9. #%% importings
  10. import numpy as np
  11. import pandas as pd
  12. import matplotlib.pyplot as plt
  13.  
  14. from keras.models import Sequential
  15. from keras.layers import Dense, Dropout
  16. #from keras.wrappers.scikit_learn import KerasClassifier
  17. from keras.optimizers import SGD
  18. #from keras.constraints import maxnorm
  19. from keras.callbacks import ModelCheckpoint
  20.  
  21. from scipy.io import arff
  22.  
  23. #from sklearn.model_selection import cross_val_score, StratifiedKFold
  24. from sklearn.preprocessing import LabelEncoder, StandardScaler
  25. #from sklearn.pipeline import Pipeline
  26. #%%
  27. seed = 7
  28. np.random.seed(7)
  29. #%% data preparation
  30. path = '/home/jeremiah/data_analysis/datasets/EEG-Eye-State.arff'
  31.  
  32. data = arff.loadarff(path)
  33. df = pd.DataFrame(data[0])
  34. dataset = df.to_numpy().astype(float)
  35.  
  36. np.random.shuffle(dataset)
  37.  
  38. test_per = 0.3
  39. train_size = int(len(dataset)*(1-test_per))
  40. X = dataset[:train_size,:-1]
  41. Y = dataset[:train_size, -1]
  42.  
  43. X_test = dataset[train_size:,:-1]
  44. Y_test = dataset[train_size:,-1]
  45. #%% defining model
  46. def create_model():
  47.     #dp_rate = 0.1
  48.    
  49.    
  50.     model = Sequential()
  51.     model.add(Dense(20, input_dim=14, kernel_initializer='normal', activation='relu'))
  52.     #model.add(Dropout(rate=dp_rate))
  53.  
  54.     #model.add(Dense(32, kernel_initializer='normal', activation='relu',
  55.               #kernel_constraint=maxnorm(3)))
  56.     #model.add(Dropout(rate=dp_rate))
  57.    
  58.     model.add(Dense(10, kernel_initializer='normal', activation='relu'))
  59.     #model.add(Dropout(rate=dp_rate))
  60.    
  61.     model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
  62.    
  63.     sgd = SGD(lr=0.065, decay=0.002)
  64.    
  65.     model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  66.     return model
  67.  
  68. #%% training model
  69. batch_size = 20
  70. epochs = 300
  71. model = create_model()
  72.  
  73. scaler = StandardScaler()
  74. scaler.fit(X)
  75. std_x = scaler.transform(X)
  76.  
  77. checkpoint = ModelCheckpoint('/home/jeremiah/trained_models/best.model.h5',
  78.                              monitor='val_acc', verbose=1, save_best_only=True, mode='max')
  79.  
  80. callback_list = [checkpoint]
  81.  
  82. history = model.fit(std_x, Y, validation_split=0.33, batch_size=batch_size, epochs=epochs, verbose=1,
  83.                     callbacks=callback_list)
  84.  
  85.  
  86. #%% viewing results
  87. print(history.history.keys())
  88. print('acc: %.2f%%\tval_acc: %.2f%%' %(history.history['acc'][-1]*100, history.history['val_acc'][-1]*100))
  89.  
  90.  
  91.  
  92. plt.figure(figsize=(14, 5))
  93.  
  94. plt.subplot(1, 2, 1)
  95. plt.plot(history.history['acc'], 'b-', history.history['val_acc'], 'r-')
  96. plt.title('model accuracy')
  97. plt.ylabel('accuracy')
  98. plt.xlabel('epoch')
  99. plt.legend(['train', 'test'], loc='best')
  100.  
  101. plt.subplot(1, 2, 2)
  102. plt.plot(history.history['loss'], 'b-', history.history['val_loss'], 'r-')
  103. plt.title('model loss')
  104. plt.ylabel('loss')
  105. plt.xlabel('epoch')
  106. plt.legend(['train', 'test'], loc='best')
  107. plt.savefig('/home/jeremiah/trained_models/EEG-MLP-02.png')
  108.  
  109. #%% loading best model weights
  110. model.load_weights('/home/jeremiah/trained_models/best.model.h5')
  111. print('model loaded!')
  112.  
  113. #%% saving model
  114. model_json = model.to_json()
  115. with open('/home/jeremiah/trained_models/EEG-MLP-02.json', 'w') as file:
  116.     file.write(model_json)
  117. model.save_weights('/home/jeremiah/trained_models/EEG-MLP-02.h5')
  118. print('model saved successfully!')
  119.  
  120. #%%
  121. scaler.fit(X_test)
  122. std_x_test = scaler.transform(X_test)
  123. scores = model.evaluate(std_x_test, Y_test, batch_size=16)
  124. print('Results:\n%s: %.2f%%' %(model.metrics_names[1], scores[1]*100))
Advertisement
Add Comment
Please, Sign In to add comment