In [16]:
import numpy
from keras.datasets import imdb
from keras.layers import Dense, LSTM, Dropout
from keras.models import Sequential
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence

In [4]:
numpy.random.seed(7)
top_words = 5000
(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words=top_words)

In [5]:
max_review_length = 500
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_review_length)

In [12]:
embedding_vector_length=32
model = Sequential()
model.add(Embedding(top_words, embedding_vector_length, input_length=max_review_length))
model.add(LSTM(30))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_train, y_train, validation_data=(X_test,y_test), nb_epoch=4, batch_size=64)


____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
embedding_2 (Embedding)          (None, 500, 32)       160000      embedding_input_2[0][0]          
____________________________________________________________________________________________________
lstm_2 (LSTM)                    (None, 30)            7560        embedding_2[0][0]                
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 1)             31          lstm_2[0][0]                     
====================================================================================================
Total params: 167591
____________________________________________________________________________________________________
None
Train on 25000 samples, validate on 25000 samples
Epoch 1/4
25000/25000 [==============================] - 775s - loss: 0.5446 - acc: 0.7292 - val_loss: 0.3788 - val_acc: 0.8444
Epoch 2/4
25000/25000 [==============================] - 788s - loss: 0.3975 - acc: 0.8250 - val_loss: 0.3376 - val_acc: 0.8587
Epoch 3/4
25000/25000 [==============================] - 779s - loss: 0.2522 - acc: 0.9010 - val_loss: 0.2923 - val_acc: 0.8805
Epoch 4/4
25000/25000 [==============================] - 762s - loss: 0.2034 - acc: 0.9243 - val_loss: 0.2977 - val_acc: 0.8792
Out[12]:
<keras.callbacks.History at 0x7feb61faf828>

In [13]:
scores = model.evaluate(X_test, y_test, verbose=0)

In [14]:
print("Accuracy: %.2f%%" % (scores[1]*100))


Accuracy: 87.92%

In [18]:
model = Sequential()
model.add(Embedding(top_words, embedding_vector_length, input_length=max_review_length, dropout=0.2))
model.add(Dropout(0.2))
model.add(LSTM(30))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, nb_epoch=3, batch_size=100)
score = model.evaluate(X_test,y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))


Epoch 1/3
25000/25000 [==============================] - 606s - loss: 0.5585 - acc: 0.7099   
Epoch 2/3
25000/25000 [==============================] - 597s - loss: 0.3467 - acc: 0.8553   
Epoch 3/3
25000/25000 [==============================] - 593s - loss: 0.3070 - acc: 0.8770   
Accuracy: 87.92%