In [2]:
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.regularizers import l2, l1
from keras.constraints import maxnorm
from keras.optimizers import SGD, Adam, RMSprop
from keras.utils import np_utils
import numpy as np
import pandas as pd
from sklearn.datasets import fetch_mldata
from sklearn.cross_validation import train_test_split
from sklearn.datasets import fetch_mldata
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from time import time

In [2]:
batch_size = 64
nb_classes = 10
nb_epoch = 20

np.random.seed(1337) # for reproducibility

In [5]:
mnist = fetch_mldata('mnist-original')
X_train, X_test, y_train, y_test = train_test_split(
        (mnist.data / 255.0).astype(np.float32),
        mnist.target.astype(np.int32),
        test_size=0.33, random_state=1234)

In [7]:
# convert class vectors to binary class matrices
y_train = np_utils.to_categorical(y_train, nb_classes)
y_test = np_utils.to_categorical(y_test, nb_classes)

In [8]:
model = Sequential()
model.add(Dense(784, 128))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(128, 128))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(128, 10))
model.add(Activation('softmax'))

rms = RMSprop()
model.compile(loss='categorical_crossentropy', optimizer=rms)

t0 = time()
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=nb_epoch, show_accuracy=True, verbose=2, validation_data=(X_test, y_test))
print "escape time : ", round(time()-t0, 3), "s"

score = model.evaluate(X_test, y_test, show_accuracy=True, verbose=0)
print 'Test score : %s' %score[0]
print 'Test accuracy : %s' %score[1]


Train on 46900 samples, validate on 23100 samples
Epoch 0
4s - loss: 0.4527 - acc.: 0.8671 - val. loss: 0.2070 - val. acc.: 0.9374
Epoch 1
4s - loss: 0.1980 - acc.: 0.9414 - val. loss: 0.1413 - val. acc.: 0.9564
Epoch 2
4s - loss: 0.1446 - acc.: 0.9569 - val. loss: 0.1192 - val. acc.: 0.9638
Epoch 3
4s - loss: 0.1177 - acc.: 0.9643 - val. loss: 0.1009 - val. acc.: 0.9699
Epoch 4
4s - loss: 0.1037 - acc.: 0.9677 - val. loss: 0.1042 - val. acc.: 0.9699
Epoch 5
4s - loss: 0.0903 - acc.: 0.9728 - val. loss: 0.0863 - val. acc.: 0.9745
Epoch 6
4s - loss: 0.0810 - acc.: 0.9752 - val. loss: 0.0938 - val. acc.: 0.9731
Epoch 7
4s - loss: 0.0754 - acc.: 0.9763 - val. loss: 0.0856 - val. acc.: 0.9754
Epoch 8
4s - loss: 0.0694 - acc.: 0.9782 - val. loss: 0.0892 - val. acc.: 0.9756
Epoch 9
4s - loss: 0.0645 - acc.: 0.9793 - val. loss: 0.0832 - val. acc.: 0.9771
Epoch 10
4s - loss: 0.0586 - acc.: 0.9812 - val. loss: 0.0834 - val. acc.: 0.9781
Epoch 11
4s - loss: 0.0557 - acc.: 0.9820 - val. loss: 0.0918 - val. acc.: 0.9759
Epoch 12
4s - loss: 0.0531 - acc.: 0.9828 - val. loss: 0.0911 - val. acc.: 0.9762
Epoch 13
4s - loss: 0.0475 - acc.: 0.9851 - val. loss: 0.0913 - val. acc.: 0.9777
Epoch 14
4s - loss: 0.0491 - acc.: 0.9842 - val. loss: 0.0918 - val. acc.: 0.9766
Epoch 15
4s - loss: 0.0441 - acc.: 0.9863 - val. loss: 0.0942 - val. acc.: 0.9787
Epoch 16
4s - loss: 0.0447 - acc.: 0.9858 - val. loss: 0.0927 - val. acc.: 0.9776
Epoch 17
4s - loss: 0.0416 - acc.: 0.9865 - val. loss: 0.0900 - val. acc.: 0.9788
Epoch 18
4s - loss: 0.0405 - acc.: 0.9867 - val. loss: 0.0933 - val. acc.: 0.9779
Epoch 19
4s - loss: 0.0373 - acc.: 0.9884 - val. loss: 0.0949 - val. acc.: 0.9779
escape time :  86.6 s
Test score : 0.0952238568285
Test accuracy : 0.977889042357

In [ ]: