Skip to content

Instantly share code, notes, and snippets.

@pyben
Last active December 22, 2016 08:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save pyben/41d12f33c9a4717e3adf to your computer and use it in GitHub Desktop.
Save pyben/41d12f33c9a4717e3adf 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))
@Hua0909
Copy link

Hua0909 commented Dec 22, 2016

Excuse me, I couldn't find out the model of "from keras.layers import containers""from keras.models import Sequential". Could you please tell me the whole project?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment