Skip to content

Instantly share code, notes, and snippets.

@cadrev
Forked from pyben/sda.py
Created September 28, 2016 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cadrev/e8399b0612ad2238c192346a746e53b5 to your computer and use it in GitHub Desktop.
Save cadrev/e8399b0612ad2238c192346a746e53b5 to your computer and use it in GitHub Desktop.
import numpy as np
from keras.datasets import imdb
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import containers
from keras.layers.noise import GaussianNoise
from keras.layers.core import Dense, AutoEncoder
from keras.utils import np_utils
from sklearn.metrics import (precision_score, recall_score,
f1_score, accuracy_score)
np.random.seed(1337)
max_len = 800
max_words = 20000
batch_size = 64
nb_classes = 2
nb_epoch = 2
nb_hidden_layers = [800, 500, 300, 100]
nb_noise_layers = [0.6, 0.4, 0.3, ]
(X_train, y_train), (X_test, y_test) = \
imdb.load_data(nb_words=max_words, test_split=0.2)
X_train = pad_sequences(X_train, maxlen=max_len, dtype='float32')
X_test = pad_sequences(X_test, maxlen=max_len, dtype='float32')
X_train_tmp = np.copy(X_train)
y_train = np.asarray(y_train)
y_test = np.asarray(y_test)
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
print('Train: {}'.format(X_train.shape))
print('Test: {}'.format(X_test.shape))
trained_encoders = []
for i, (n_in, n_out) in enumerate(
zip(nb_hidden_layers[:-1], nb_hidden_layers[1:]), start=1):
print('Pre-training the layer: Input {} -> Output {}'
.format(n_in, n_out))
ae = Sequential()
encoder = containers.Sequential([
GaussianNoise(nb_noise_layers[i - 1], input_shape=(n_in,)),
Dense(input_dim=n_in, output_dim=n_out, activation='sigmoid'),
])
decoder = Dense(input_dim=n_out, output_dim=n_in, activation='sigmoid')
ae.add(AutoEncoder(encoder=encoder, decoder=decoder,
output_reconstruction=False))
ae.compile(loss='mean_squared_error', optimizer='rmsprop')
ae.fit(X_train_tmp, X_train_tmp, batch_size=batch_size, nb_epoch=nb_epoch)
trained_encoders.append(ae.layers[0].encoder)
X_train_tmp = ae.predict(X_train_tmp)
model = Sequential()
for encoder in trained_encoders:
model.add(encoder)
model.add(Dense(input_dim=nb_hidden_layers[-1],
output_dim=nb_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
show_accuracy=True, validation_data=(X_test, Y_test))
y_pred = model.predict_classes(X_test)
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print('Accuracy: {}'.format(accuracy))
print('Recall: {}'.format(recall))
print('Precision: {}'.format(precision))
print('F1: {}'.format(f1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment