{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Digit Recognizer with CNN"},{"metadata":{},"cell_type":"markdown","source":"This notebook is like note to self.\nI am trying to recognize digits with CNN\nMNIST is called Hello world of Deep learning.\n\nLets start!"},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow import keras\nimport matplotlib.pyplot as plt \n%matplotlib inline\nfrom keras.utils.np_utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Read train and test set"},{"metadata":{"trusted":true},"cell_type":"code","source":"train= pd.read_csv(\"../input/digit-recognizer/train.csv\")\ntest= pd.read_csv(\"../input/digit-recognizer/test.csv\")\nprint(\"number of training images: %d\"%train.shape[0])\nprint (\"number of pixels : %d\"%train.shape[1])\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Explore and Visualize the Dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"train.isnull().any().describe()\n#thers is not any null values!!","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.isnull().any().describe()\n#thers is not any null values!!","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Split train set to features and label"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train=train.drop(['label'],axis=1)\ny_train= train['label']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_train_arr = x_train.to_numpy(dtype=np.int32)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Visualization"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train_show = img_train_arr[::,::].reshape(-1,28,28)\nfig = plt.figure(figsize=(10,10))\nfor i in range (25):\n    fig.add_subplot(5 , 5 ,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(x_train_show[i] ,cmap=plt.cm.binary)\n    plt.title(y_train[i])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Data preparation on train set to get ready"},{"metadata":{},"cell_type":"markdown","source":"## Reshape data  "},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train= img_train_arr[::,::].reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Normlizing"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train=x_train/255","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Convert label cloumn to categorical"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train= to_categorical(y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train,X_val,Y_train ,Y_val = train_test_split(x_train,y_train, test_size=0.2 ,random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Build  CNN Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"model=Sequential()\nmodel.add(Conv2D(32,kernel_size=(3,3),input_shape=(28,28,1), activation='relu',padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Conv2D(32,kernel_size=(3,3), activation= 'relu',padding='same'))\nmodel.add(Dropout(0.2))\n\n\nmodel.add(Conv2D(64,kernel_size=(3,3), activation='relu', padding='same'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Conv2D(64,kernel_size=(3,3), activation='relu', padding='same'))\nmodel.add(Dropout(0.2))\n\n\nmodel.add(Flatten())\nmodel.add(Dense(512,activation='relu'))\nmodel.add(Dropout(0.4))\nmodel.add(Dense(256,activation = 'relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(64,activation ='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(10,activation='softmax'))\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(X_train, Y_train, epochs=15, validation_data=(X_val, Y_val))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Plot model accuracy"},{"metadata":{"trusted":true},"cell_type":"code","source":"print(history.history.keys())\nplt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Same data preparation on test set"},{"metadata":{"trusted":true},"cell_type":"code","source":"img_test_arr = test.to_numpy(dtype=np.int32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test=img_test_arr[::,::].reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test=test/255","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Test the model"},{"metadata":{"trusted":true},"cell_type":"code","source":"pred=model.predict(test)\npred = np.argmax(pred,axis = 1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"ids=range(1,len(pred)+1)\nsubmission=pd.DataFrame(columns=['ImageId','Label'])\nsubmission['ImageId']=ids\nsubmission['Label']=pred\nsubmission.to_csv(\"submission_result.csv\", index=False)","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.6"}},"nbformat":4,"nbformat_minor":1}