{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib\nimport cv2","metadata":{"id":"qsQj-NqF3Orm","execution":{"iopub.status.busy":"2021-12-11T10:19:09.205719Z","iopub.execute_input":"2021-12-11T10:19:09.206526Z","iopub.status.idle":"2021-12-11T10:19:09.211289Z","shell.execute_reply.started":"2021-12-11T10:19:09.206480Z","shell.execute_reply":"2021-12-11T10:19:09.210480Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/digit-recognizer/train.csv')\ntest_df = pd.read_csv('../input/digit-recognizer/test.csv')","metadata":{"id":"4jdOhfPf3c7e","execution":{"iopub.status.busy":"2021-12-11T10:19:09.212784Z","iopub.execute_input":"2021-12-11T10:19:09.213005Z","iopub.status.idle":"2021-12-11T10:19:12.718336Z","shell.execute_reply.started":"2021-12-11T10:19:09.212957Z","shell.execute_reply":"2021-12-11T10:19:12.717466Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = train_df.drop(['label'], axis = 1).values\ny_train = train_df['label'].values\nX_test = test_df.values","metadata":{"id":"fYydfjuS6BrT","execution":{"iopub.status.busy":"2021-12-11T10:19:12.719376Z","iopub.execute_input":"2021-12-11T10:19:12.719650Z","iopub.status.idle":"2021-12-11T10:19:12.811455Z","shell.execute_reply.started":"2021-12-11T10:19:12.719620Z","shell.execute_reply":"2021-12-11T10:19:12.810531Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test = X_train / 255.0, X_test / 255.0","metadata":{"id":"lY1V5waH_Gl7","execution":{"iopub.status.busy":"2021-12-11T10:19:12.812745Z","iopub.execute_input":"2021-12-11T10:19:12.812956Z","iopub.status.idle":"2021-12-11T10:19:13.018857Z","shell.execute_reply.started":"2021-12-11T10:19:12.812930Z","shell.execute_reply":"2021-12-11T10:19:13.018032Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.shape","metadata":{"id":"C6Rf6aSsBP3n","outputId":"6b904a26-f34a-40b3-cf5f-0cc20f8f7b94","execution":{"iopub.status.busy":"2021-12-11T10:19:13.020837Z","iopub.execute_input":"2021-12-11T10:19:13.021054Z","iopub.status.idle":"2021-12-11T10:19:13.026617Z","shell.execute_reply.started":"2021-12-11T10:19:13.021027Z","shell.execute_reply":"2021-12-11T10:19:13.025829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test = X_train.reshape(-1, 28, 28, 1), X_test.reshape(-1, 28, 28, 1)","metadata":{"id":"Ib7jdH_Q_XeL","execution":{"iopub.status.busy":"2021-12-11T10:19:13.027861Z","iopub.execute_input":"2021-12-11T10:19:13.028098Z","iopub.status.idle":"2021-12-11T10:19:13.036219Z","shell.execute_reply.started":"2021-12-11T10:19:13.028070Z","shell.execute_reply":"2021-12-11T10:19:13.035500Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index_list = [1, 0, 16, 7, 3, 8, 21, 6, 10, 11]\nfig, axes = plt.subplots(2, 5, figsize = (20, 10))\n\nk = 0\n\nfor i in range(2):\n  for j in range(5):\n    img_arr = cv2.resize(X_train[index_list[k]], (224, 224))\n    axes[i, j].imshow(img_arr, cmap = 'gray')\n    axes[i, j].set_title(y_train[index_list[k]], {'fontsize' : '30'})\n    axes[i, j].axes.get_xaxis().set_visible(False)\n    axes[i, j].axes.get_yaxis().set_visible(False)\n    k += 1","metadata":{"id":"uTW6gYqcCnsZ","outputId":"e08a3c2b-b358-4cff-9f2b-96eef367e36c","execution":{"iopub.status.busy":"2021-12-11T10:19:13.037223Z","iopub.execute_input":"2021-12-11T10:19:13.037959Z","iopub.status.idle":"2021-12-11T10:19:13.941536Z","shell.execute_reply.started":"2021-12-11T10:19:13.037929Z","shell.execute_reply":"2021-12-11T10:19:13.940614Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\n\n\nfrom tensorflow.keras.layers import Conv2D, MaxPool2D, Flatten, Dropout, Dense","metadata":{"id":"NzfZMoMXFl6i","execution":{"iopub.status.busy":"2021-12-11T10:19:13.942722Z","iopub.execute_input":"2021-12-11T10:19:13.942954Z","iopub.status.idle":"2021-12-11T10:19:13.947245Z","shell.execute_reply.started":"2021-12-11T10:19:13.942925Z","shell.execute_reply":"2021-12-11T10:19:13.946477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.Sequential()\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5), padding = 'same', activation ='relu', input_shape = (28,28,1)))\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5), padding = 'same', activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'same', activation ='relu'))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'same', activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(Dropout(0.25))\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = 'relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation = \"softmax\"))\nmodel.compile(optimizer=tf.keras.optimizers.Adam(learning_rate = 0.0001), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])\n\nmodel.summary()","metadata":{"id":"l9BcgM8gE3ug","outputId":"fdaa29c8-82af-4756-8e54-2548e107cdbb","execution":{"iopub.status.busy":"2021-12-11T10:19:13.948525Z","iopub.execute_input":"2021-12-11T10:19:13.948776Z","iopub.status.idle":"2021-12-11T10:19:14.051398Z","shell.execute_reply.started":"2021-12-11T10:19:13.948746Z","shell.execute_reply":"2021-12-11T10:19:14.050463Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(X_train, y_train, epochs = 30, validation_split = 0.3)","metadata":{"id":"y4oO5bI8FyfP","outputId":"e3365b4f-b09a-4c72-ff44-010fc039a8c4","execution":{"iopub.status.busy":"2021-12-11T10:19:14.053038Z","iopub.execute_input":"2021-12-11T10:19:14.053282Z","iopub.status.idle":"2021-12-11T10:49:53.417505Z","shell.execute_reply.started":"2021-12-11T10:19:14.053251Z","shell.execute_reply":"2021-12-11T10:49:53.416426Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = model.predict(X_test)\nprediction = np.argmax(prediction, axis = 1)\nprediction = pd.Series(prediction, name = \"Label\")","metadata":{"id":"06B3kWSYItJh","execution":{"iopub.status.busy":"2021-12-11T10:49:53.419408Z","iopub.execute_input":"2021-12-11T10:49:53.419724Z","iopub.status.idle":"2021-12-11T10:50:09.245811Z","shell.execute_reply.started":"2021-12-11T10:49:53.419681Z","shell.execute_reply":"2021-12-11T10:50:09.244851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Reference\n[Introduction to CNN Keras - 0.997 (top 6%)](https://www.kaggle.com/yassineghouzam/introduction-to-cnn-keras-0-997-top-6)","metadata":{}}]}