{"cells":[{"metadata":{},"cell_type":"markdown","source":"Import Pandas Library"},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Read training & test dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.read_csv(\"../input/train.csv\")\ntest_df = pd.read_csv(\"../input/test.csv\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Get label dataset from training set"},{"metadata":{"trusted":true},"cell_type":"code","source":"label = train_df[\"label\"]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Drop label set from training set"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = train_df.drop([\"label\"], axis=1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Normalise dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = train_df.astype('float32') / 255\ntest_df = test_df.astype('float32') / 255","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Reframe datset to fit into (28,28,1) structure"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_images = train_df.values.reshape((42000,28,28,1))\ntest_images = test_df.values.reshape((28000,28,28,1))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Import model_selection from sklearn & solit training set into training & validation set"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn import model_selection","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_x,valid_x,train_y,valid_y = model_selection.train_test_split(train_images,label,\n                                                                   test_size=0.1,stratify=label,random_state=0)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Import to_categorical from Keras for One hot encoding of label set"},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.utils import to_categorical","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_labels = to_categorical(train_y)\ntest_labels = to_categorical(valid_y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\ngen = ImageDataGenerator(rotation_range=8, width_shift_range=0.08, shear_range=0.3,\n                         height_shift_range=0.08, zoom_range=0.08)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Import Keras Library"},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras import models\nfrom keras import layers\nfrom keras.layers.normalization import BatchNormalization\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Built a CNN model with droput & batch normalization"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = models.Sequential()\nmodel.add(layers.Conv2D(128,(3,3),activation='relu',input_shape=(28,28,1)))\nmodel.add(layers.MaxPooling2D((2,2)))\nmodel.add(BatchNormalization())\nmodel.add(layers.Dropout(0.4))\nmodel.add(layers.Conv2D(128,(3,3),activation='relu'))\nmodel.add(layers.MaxPooling2D((2,2)))\nmodel.add(BatchNormalization())\nmodel.add(layers.Dropout(0.4))\nmodel.add(layers.Conv2D(128,(3,3),activation='relu'))\n#model.add(layers.MaxPooling2D((2,2)))\nmodel.add(layers.Dropout(0.4))\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(128,activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(layers.Dense(10,activation='softmax'))\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(gen.flow(train_x,train_labels, batch_size=64),\n                              epochs = 20, validation_data = (valid_x,test_labels),\n                              steps_per_epoch=train_x.shape[0] // 64)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#model.fit(train_x,train_labels,epochs=20,batch_size=64,validation_data=(valid_x, test_labels))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"valid_loss, valid_acc = model.evaluate(valid_x, test_labels)\nvalid_acc","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred_test = model.predict(test_images)\nytestpred = pred_test.argmax(axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/sample_submission.csv')\ndf['Label'] = ytestpred\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.5.2"}},"nbformat":4,"nbformat_minor":1}