In [36]:
#%env KERAS_BACKEND=theano # This is WRONG, use K.set_image_dim_ordering('th') instead
#import numpy
#import theano
#print numpy.__version__
#print theano.__version__
#import keras
#print keras.__version__
import numpy as np
np.random.seed(123) # for reproducibility
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
K.set_image_dim_ordering('th')
%matplotlib inline
In [37]:
from six.moves import cPickle as pickle
pickle_file = 'notMNIST.pickle'
try:
with open(pickle_file) as f:
save=pickle.load(f)
except Exception as e:
print('Unable to load data from', pickle_file, ':', e)
raise
X_train_dataset=save['train_dataset']
Y_train_labels=save['train_labels']
X_test_dataset=save['test_dataset']
Y_test_labels=save['test_labels']
X_valid_dataset=save['valid_dataset']
Y_valid_labels=save['valid_labels']
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
In [38]:
print (X_train_dataset.shape)
print (Y_train_labels)
print (X_test_dataset.shape)
print (Y_test_labels)
print (X_valid_dataset.shape)
print (Y_valid_labels)
In [41]:
sample_no=34
from matplotlib import pyplot as plt
plt.imshow(X_train_dataset[sample_no] , cmap='gray')
print (letters[Y_train_labels[sample_no]])
In [5]:
X_train_dataset = X_train_dataset.reshape(X_train_dataset.shape[0], 1, 28, 28)
X_test_dataset = X_test_dataset.reshape(X_test_dataset.shape[0], 1, 28, 28)
X_train_dataset = X_train_dataset.astype('float32')
X_test_dataset = X_test_dataset.astype('float32')
X_train_dataset /= 255
X_test_dataset /= 255
# Convert 1-dimensional class arrays to 10-dimensional class matrices
Y_train_labels = np_utils.to_categorical(Y_train_labels, 10)
Y_test_labels = np_utils.to_categorical(Y_test_labels, 10)
# VALID
X_valid_dataset = X_valid_dataset.reshape(X_valid_dataset.shape[0], 1, 28, 28)
X_valid_dataset = X_valid_dataset.astype('float32')
X_valid_dataset /= 255
# Convert 1-dimensional class arrays to 10-dimensional class matrices
Y_valid_labels = np_utils.to_categorical(Y_valid_labels, 10)
In [6]:
model = Sequential()
#model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
#model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(Convolution2D(256, 5, 5, subsample=(2, 2), border_mode = 'same', activation='relu',input_shape=(1,28,28)))
model.add(Convolution2D(256, 5, 5, subsample=(2, 2), border_mode = 'same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
In [7]:
history=model.fit(X_train_dataset, Y_train_labels, validation_split=0.33,
batch_size=32, nb_epoch=10, verbose=1)
In [25]:
history=model.fit(X_train_dataset, Y_train_labels, validation_split=0.33, initial_epoch=11,
batch_size=32, nb_epoch=15, verbose=1)
In [26]:
score_test = model.evaluate(X_test_dataset, Y_test_labels, verbose=1)
In [27]:
print("%s: %.2f%%" % (model.metrics_names[1], score_test[1]*100))
In [28]:
score_valid = model.evaluate(X_valid_dataset, Y_valid_labels, verbose=1)
In [29]:
print("%s: %.2f%%" % (model.metrics_names[1], score_valid[1]*100))
In [30]:
print(history.history.keys())
# summarize history for accuracy
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
In [ ]: