{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"sourceType":"competition"}],"dockerImageVersionId":30646,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Digit Recognizer using Convolutional Neural Networks (CNN)\n\n### This Notebook consist of:\n\n**1. Importing Dependencies and Data**\n\n**2. Reshaping Data**\n\n**3. Model Construction and Fitting**\n\n**4. Predictions**\n\n**5. Submission**","metadata":{}},{"cell_type":"markdown","source":"## 1. Importing Dependencies and Data","metadata":{}},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport os\nimport re\nimport warnings","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:29:02.601651Z","iopub.execute_input":"2024-01-30T19:29:02.602089Z","iopub.status.idle":"2024-01-30T19:29:03.030618Z","shell.execute_reply.started":"2024-01-30T19:29:02.602060Z","shell.execute_reply":"2024-01-30T19:29:03.029267Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train=pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\ntest=pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")\n","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:29:03.034197Z","iopub.execute_input":"2024-01-30T19:29:03.034898Z","iopub.status.idle":"2024-01-30T19:29:09.691968Z","shell.execute_reply.started":"2024-01-30T19:29:03.034852Z","shell.execute_reply":"2024-01-30T19:29:09.690581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2. Reshaping Data","metadata":{}},{"cell_type":"code","source":"X_train=(train.drop(['label'], axis=1)).values\nY_train=(train['label']).values\nX_train = X_train.reshape(42000, 28, 28, 1)\nX_train.shape","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:29:09.693433Z","iopub.execute_input":"2024-01-30T19:29:09.693884Z","iopub.status.idle":"2024-01-30T19:29:09.837594Z","shell.execute_reply.started":"2024-01-30T19:29:09.693842Z","shell.execute_reply":"2024-01-30T19:29:09.836441Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3. Model Construction and Fitting","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras import layers, models\ncnn = models.Sequential([\n    layers.Conv2D(filters=32, kernel_size=(2, 2), activation='relu', input_shape=(28, 28, 1)),\n    layers.MaxPooling2D((2, 2)),\n    layers.Conv2D(filters=64, kernel_size=(2, 2), activation='relu'),\n    layers.MaxPooling2D((2, 2)),\n    \n    layers.Flatten(),\n    layers.Dense(64, activation='relu'),\n    layers.Dropout(0.3),\n    layers.Dense(32, activation='relu'),\n    layers.Dropout(0.2),\n    layers.Dense(10, activation='softmax')\n])\ncnn.compile(optimizer='adam',\n             loss='sparse_categorical_crossentropy',\n             metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:29:09.840086Z","iopub.execute_input":"2024-01-30T19:29:09.840458Z","iopub.status.idle":"2024-01-30T19:29:25.366839Z","shell.execute_reply.started":"2024-01-30T19:29:09.840418Z","shell.execute_reply":"2024-01-30T19:29:25.365399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn.fit(X_train, Y_train, epochs=30, validation_split=0.2)","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:29:25.368313Z","iopub.execute_input":"2024-01-30T19:29:25.368782Z","iopub.status.idle":"2024-01-30T19:32:48.917985Z","shell.execute_reply.started":"2024-01-30T19:29:25.368740Z","shell.execute_reply":"2024-01-30T19:32:48.916577Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4. Predictions","metadata":{}},{"cell_type":"code","source":"X_test=test.values\nX_test = X_test.reshape(28000, 28, 28, 1)\npred=cnn.predict(X_test)\npred_classes=[np.argmax(element) for element in pred]","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:32:48.919621Z","iopub.execute_input":"2024-01-30T19:32:48.920011Z","iopub.status.idle":"2024-01-30T19:32:54.395653Z","shell.execute_reply.started":"2024-01-30T19:32:48.919978Z","shell.execute_reply":"2024-01-30T19:32:54.394411Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 5. Submission","metadata":{}},{"cell_type":"code","source":"test['label']=pred_classes\ntest['ImageId'] = (test.reset_index().index)+1\nSubmission=test[['ImageId', 'label']]\nSubmission.to_csv('submission.csv', index=None)","metadata":{"execution":{"iopub.status.busy":"2024-01-30T19:32:54.397437Z","iopub.execute_input":"2024-01-30T19:32:54.397888Z","iopub.status.idle":"2024-01-30T19:32:54.798172Z","shell.execute_reply.started":"2024-01-30T19:32:54.397854Z","shell.execute_reply":"2024-01-30T19:32:54.796882Z"},"trusted":true},"execution_count":null,"outputs":[]}]}