In [1]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
In [2]:
training_set = pd.read_csv('train.csv')
test_set = pd.read_csv('test.csv')
In [3]:
training_set.head()
Out[3]:
In [4]:
test_set.head()
Out[4]:
In [5]:
x_train = training_set.iloc[:, 1:].values
y_train = training_set.iloc[:, 0:1].values
x_test = test_set.iloc[:, :].values
In [6]:
x_train = x_train.reshape(-1, 28, 28, 1)
x_test = x_test.reshape(-1, 28, 28, 1)
In [7]:
x_train = x_train/255.
x_test = x_test/255.
In [8]:
from keras.utils import np_utils
y_train = np_utils.to_categorical(y_train, num_classes = 10)
y_train
Out[8]:
In [9]:
from keras.models import Sequential
from keras.layers import Dense, Dropout, Conv2D, MaxPool2D, Flatten
In [25]:
classifier = Sequential()
classifier.add(Conv2D(32, (5, 5), padding = 'Same', input_shape = (28, 28, 1), activation = 'relu'))
#classifier.add(MaxPool2D(pool_size = (2, 2)))
#classifier.add(Conv2D(32, (5, 5), padding = 'Same', activation = 'relu'))
classifier.add(MaxPool2D(pool_size = (2, 2)))
classifier.add(Dropout(0.25))
classifier.add(Conv2D(64, (3, 3),padding = 'Same', activation = 'relu'))
classifier.add(Conv2D(64, (3, 3),padding = 'Same', activation = 'relu'))
classifier.add(MaxPool2D(pool_size = (2, 2), strides = (2, 2)))
classifier.add(Dropout(0.25))
#classifier.add(Conv2D(64, (3, 3), activation = 'relu'))
#classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 256, activation = 'relu'))
classifier.add(Dropout(0.5))
classifier.add(Dense(units = 10, activation = 'sigmoid'))
In [26]:
classifier.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy', metrics = ['accuracy'])
In [27]:
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
rotation_range=10,
zoom_range = 0.1,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=False,
vertical_flip=False)
datagen.fit(x_train)
In [28]:
track = classifier.fit_generator(datagen.flow(x_train,y_train, batch_size= 128),
epochs = 30, steps_per_epoch=x_train.shape[0]//128)
In [29]:
track.history.keys()
Out[29]:
In [30]:
plt.subplot(2, 1, 1)
plt.plot(track.history['loss'])
plt.title("Model Loss")
plt.subplot(2, 1, 2)
plt.plot(track.history['acc'])
plt.title("Model Accuracy")
Out[30]:
In [31]:
predict = classifier.predict(x_test)
predict
Out[31]:
In [32]:
predict = np.argmax(predict, axis = 1)
In [33]:
predict
Out[33]:
In [34]:
submit = pd.DataFrame(predict, columns = ['Label'])
submit.reset_index(inplace = True)
submit['index'] = submit['index'] + 1
submit.rename(columns = {'index' : 'ImageId'}, inplace = True)
submit.index = submit['ImageId']
submit = submit.drop('ImageId', axis = 1)
In [35]:
submit.head()
Out[35]:
In [36]:
submit.to_csv('digit_submit.csv')
In [37]:
submit.shape
Out[37]:
In [38]:
n = 9
plt.figure(figsize = (20, 8))
for i in range(n):
ax = plt.subplot(1, n, i+1)
plt.imshow(x_test[i].reshape(28, 28))
plt.show()
In [ ]: