In [1]:
# importing requirements
from __future__ import print_function
from keras.datasets import cifar100
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.optimizers import SGD
from keras.utils import np_utils
from matplotlib import pyplot
from scipy.misc import toimage
%matplotlib inline
In [5]:
# keras is having some in built mechanism to download test data and load it
# load data
(X_train, y_train), (X_test, y_test) = cifar100.load_data()
In [41]:
# lets print data size of all four section
print ("X_train Size: ", len(X_train)," y_train Size :" ,len(y_train)," X_test Size : ",len(X_test)," y_testSize : ",len(y_test))
In [14]:
pyplot.imshow(toimage(X_train[0])) #showing first image
pyplot.show()
pyplot.imshow(toimage(X_train[1])) #showing second image
pyplot.show()
pyplot.imshow(toimage(X_train[2])) #showing third image
pyplot.show()
In [15]:
batch_size = 500 # take only this many samples in gpu
nb_classes = 100 # number of output classes
nb_epoch = 25 # run for 25 epoches
data_augmentation = True
In [25]:
# 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 [18]:
Y_test[0]
Out[18]:
In [19]:
model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same',
input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
model.summary()
In [20]:
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, Y_test))
In [23]:
# saving the model
model.save_weights("cifar_trained_for_tutorial.h5")
In [42]:
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
In [32]:
# finally lets predict on the test dataset using previously built model
score = (model.predict_classes(X_test, batch_size=32, verbose=1))
In [35]:
# printing classes and lenght
print (score), len(score)
Out[35]:
In [39]:
# lets see whats there in first few images
pyplot.imshow(toimage(X_test[0])) #showing first image
pyplot.show()
pyplot.imshow(toimage(X_test[1])) #showing first image
pyplot.show()