Guest User

Untitled

a guest
Feb 17th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. from __future__ import print_function
  2. import keras
  3. import numpy
  4. from keras.models import Sequential
  5. from keras.layers.core import *
  6. from sklearn.model_selection import train_test_split
  7. from app_flag import FLAGS
  8.  
  9. class StackedAutoencoder(object):
  10. """
  11. Implementation of stacked autoencoder multi-class classifier using the Keras Python package.
  12. This classifier is used to classify cells to cell cycle phases S, G1 or G2M.
  13. """
  14. def __init__(self, features, labels, num_labels):
  15. self.features = features
  16. self.labels = labels
  17. self.auto_encoder = None
  18. self.encoding_dim = num_labels
  19.  
  20.  
  21. # fix random seed for reproducibility
  22. self.seed = 7
  23. numpy.random.seed(7)
  24.  
  25. def create_autoencoder(self):
  26. """
  27. Build the stacked auto-encoder using multiple hidden layers.
  28. The stacked auto-encoder is then trained and weights are freezed afterwards.
  29. A softmax classification layer is that appended to the last layer, replacing the input
  30. re-constructed layer of the auto-encoder.
  31. :return: Compiled classification neural network model.
  32. """
  33. self.auto_encoder = Sequential()
  34. self.auto_encoder.add(Dense(3000, activation='relu', input_dim=self.features.shape[1]))
  35. self.auto_encoder.add(Dense(1000, activation='relu'))
  36. self.auto_encoder.add(Dense(30, activation='relu'))
  37.  
  38. self.auto_encoder.add(Dense(3000, activation='relu'))
  39. self.auto_encoder.add(Dense(self.features.shape[1], activation='sigmoid'))
  40.  
  41. self.auto_encoder.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  42. self.auto_encoder.fit(self.features, self.features,
  43. epochs=10,
  44. batch_size=5,
  45. shuffle=True,
  46. validation_split=0.33,
  47. validation_data=None)
  48.  
  49. self.auto_encoder.layers.pop()
  50. self.auto_encoder.add(Dense(self.encoding_dim, activation='softmax'))
  51. self.auto_encoder.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
  52. print(self.auto_encoder.summary())
  53.  
  54. # Freeze all weights after training the stacked auto-encoder and all the classification layer
  55. for i in range(0, len(self.auto_encoder.layers)-1):
  56. self.auto_encoder.layers[i].trainable = False
  57.  
  58. return self.auto_encoder
  59.  
  60. def evaluate_autoencoder(self):
  61. """
  62. Fit the trained neural network and validate it using splitting the dataset to training and testing sets.
  63. :return: Accuracy score of the classification.
  64. """
  65. self.auto_encoder.fit(self.features, self.labels,
  66. epochs=10,
  67. batch_size=5,
  68. shuffle=True)
  69.  
  70. X_train, X_test, Y_train, Y_test = train_test_split(self.features, self.labels, test_size=0.33, random_state=self.seed)
  71. #predictions = self.auto_encoder.predict_classes(X_test)
  72. #print(predictions)
  73. #print(self.label_encoder.inverse_transform(predictions))
  74. score = self.auto_encoder.evaluate(X_test, Y_test, batch_size=5, verbose=1)
  75. return score
Add Comment
Please, Sign In to add comment