{"cells":[{"metadata":{},"cell_type":"markdown","source":"![](https://media1.tenor.com/images/268bede39f4a5110e9cc1bd560db5474/tenor.gif?itemid=3565457)","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"### **Importing the Libraries**","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport keras \nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.layers.core import Dense, Dropout, Activation, Flatten\nfrom keras.layers.convolutional import Conv2D, MaxPooling2D, SeparableConv2D,AveragePooling2D\nfrom keras.layers.normalization import BatchNormalization\nfrom keras.utils.vis_utils import plot_model\nfrom keras.layers import Input, GlobalAveragePooling2D\nfrom keras import models\nfrom keras.models import Model","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### **Loading the dataset** ","execution_count":null},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/digit-recognizer/train.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### **Preprocessing Steps**","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"Y = train[\"label\"]\nX = train.drop([\"label\"], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = X.values.reshape(-1,28,28,1)\nX = X/255.0\nX.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_X, val_X, train_Y, val_Y = train_test_split(X, Y, test_size=0.2, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"nRows,nCols,nDims = train_X.shape[1:]\ninput_shape = (nRows, nCols, nDims)\ninput_img = Input(shape=(28, 28, 1))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### **Model Architecture**","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"l1 = Conv2D(64, (3,3), activation='relu', padding = 'valid')(input_img)\nl2 = Conv2D(32, (1,1), padding='valid', activation='relu')(l1)\nl3 = MaxPooling2D((2,2),strides=(2,2))(l2)\nmid = Conv2D(8, (3,3), padding='valid', activation='relu')(l3)\nl4 = Conv2D(8, (1,1), padding='valid', activation='relu')(mid)\nl5 = MaxPooling2D((2,2),strides=(1,1))(l4)\nl6 = Conv2D(8, (3,3), padding='valid', activation='relu')(l5)\nl7 = Conv2D(6, (1,1), padding='valid', activation='relu')(l6)\noutput = Flatten()(l7)\nout    = Dense(10, activation='softmax')(output)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Model(inputs = input_img, outputs = out)\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot_model(model, to_file='model_plot_MNIST_9.5K.png', show_shapes=True, show_layer_names=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='sparse_categorical_crossentropy', optimizer=\"adam\",metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### **Training the Model** ","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(train_X, train_Y, validation_data=(val_X, val_Y), epochs=20, batch_size=32)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### **Output Visualizations** ","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('Training Accuracy vs Validation Accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Validation'], loc='upper left')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['loss'])\nplt.plot(history.history['val_loss'])\nplt.title('Training Loss vs Validation Loss')\nplt.ylabel('Loss')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Validation'], loc='upper left')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"If you liked this notebook, then do **Upvote** as it will keep me motivated in creating such kernels ahead. **Thanks!!**\n","execution_count":null}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}