import os
import sys
import numpy as np
os.environ['KERAS_BACKEND'] = "cntk"
import keras as K
import cntk
from keras.models import Sequential
from keras.layers import Dense, Embedding, GRU, CuDNNGRU
from common.params_lstm import *
from common.utils import *
Using CNTK backend
print("OS: ", sys.platform)
print("Python: ", sys.version)
print("Keras: ", K.__version__)
print("Numpy: ", np.__version__)
print("CNTK: ", cntk.__version__)
print(K.backend.backend())
OS: linux Python: 3.5.2 |Anaconda custom (64-bit)| (default, Jul 2 2016, 17:53:06) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] Keras: 2.1.1 Numpy: 1.13.3 CNTK: 2.2 cntk
def create_symbol(CUDNN=True):
model = Sequential()
model.add(Embedding(MAXFEATURES, EMBEDSIZE, input_length=MAXLEN))
# Only return last output
if not CUDNN:
model.add(GRU(NUMHIDDEN, return_sequences=False, return_state=False))
else:
model.add(CuDNNGRU(NUMHIDDEN, return_sequences=False, return_state=False))
model.add(Dense(2, activation='softmax'))
return model
def init_model(m):
m.compile(
loss = "categorical_crossentropy",
optimizer = K.optimizers.Adam(LR, BETA_1, BETA_2, EPS),
metrics = ['accuracy'])
return m
%%time
# Data into format for library
x_train, x_test, y_train, y_test = imdb_for_library(seq_len=MAXLEN, max_features=MAXFEATURES, one_hot=True)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)
print(x_train.dtype, x_test.dtype, y_train.dtype, y_test.dtype)
Preparing train set... Preparing test set... Trimming to 30000 max-features Padding to length 150 (25000, 150) (25000, 150) (25000, 2) (25000, 2) int32 int32 int32 int32 CPU times: user 5.3 s, sys: 278 ms, total: 5.58 s Wall time: 5.58 s
%%time
# Load symbol
# CuDNN RNNs are only available with the TensorFlow backend.
sym = create_symbol(CUDNN=False)
CPU times: user 137 ms, sys: 107 ms, total: 244 ms Wall time: 111 ms
%%time
# Initialise model
model = init_model(sym)
CPU times: user 7.83 ms, sys: 0 ns, total: 7.83 ms Wall time: 7.8 ms
model.summary()
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_2 (Embedding) (None, 150, 125) 3750000 _________________________________________________________________ gru_1 (GRU) (None, 100) 67800 _________________________________________________________________ dense_1 (Dense) (None, 2) 202 ================================================================= Total params: 3,818,002 Trainable params: 3,818,002 Non-trainable params: 0 _________________________________________________________________
%%time
# 86s
# Train model
model.fit(x_train,
y_train,
batch_size=BATCHSIZE,
epochs=EPOCHS,
verbose=1)
Epoch 1/3 25000/25000 [==============================] - 29s 1ms/step - loss: 0.4392 - acc: 0.7803 Epoch 2/3 25000/25000 [==============================] - 29s 1ms/step - loss: 0.2057 - acc: 0.9239 Epoch 3/3 25000/25000 [==============================] - 29s 1ms/step - loss: 0.1104 - acc: 0.9631 CPU times: user 1min 23s, sys: 3.78 s, total: 1min 27s Wall time: 1min 26s
<keras.callbacks.History at 0x7f33482c9550>
%%time
y_guess = model.predict(x_test, batch_size=BATCHSIZE)
y_guess = np.argmax(y_guess, axis=-1)
y_truth = np.argmax(y_test, axis=-1)
CPU times: user 10.2 s, sys: 236 ms, total: 10.4 s Wall time: 10.4 s
print("Accuracy: ", sum(y_guess == y_truth)/len(y_guess))
Accuracy: 0.86092