{"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 numpy as np\nimport pandas as pd\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.047689,"end_time":"2022-05-13T09:52:48.020827","exception":false,"start_time":"2022-05-13T09:52:47.973138","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:39.478498Z","iopub.execute_input":"2022-05-16T15:22:39.478928Z","iopub.status.idle":"2022-05-16T15:22:39.522590Z","shell.execute_reply.started":"2022-05-16T15:22:39.478834Z","shell.execute_reply":"2022-05-16T15:22:39.521571Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# select model\nfrom keras.datasets import mnist\nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.layers import Conv2D, Dense, Dropout, BatchNormalization, MaxPooling2D, Flatten\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","metadata":{"execution":{"iopub.status.busy":"2022-05-16T20:47:41.387698Z","iopub.execute_input":"2022-05-16T20:47:41.388000Z","iopub.status.idle":"2022-05-16T20:47:41.393883Z","shell.execute_reply.started":"2022-05-16T20:47:41.387968Z","shell.execute_reply":"2022-05-16T20:47:41.392985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"root = '/kaggle/input/digit-recognizer'","metadata":{"papermill":{"duration":0.032823,"end_time":"2022-05-13T09:52:48.080557","exception":false,"start_time":"2022-05-13T09:52:48.047734","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:39.524719Z","iopub.execute_input":"2022-05-16T15:22:39.525245Z","iopub.status.idle":"2022-05-16T15:22:39.530023Z","shell.execute_reply.started":"2022-05-16T15:22:39.525197Z","shell.execute_reply":"2022-05-16T15:22:39.529000Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# load data","metadata":{}},{"cell_type":"code","source":"train_data = pd.read_csv(os.path.join(root, 'train.csv'))\ntrain_data.head()","metadata":{"papermill":{"duration":3.440655,"end_time":"2022-05-13T09:52:51.546925","exception":false,"start_time":"2022-05-13T09:52:48.10627","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:39.531257Z","iopub.execute_input":"2022-05-16T15:22:39.531786Z","iopub.status.idle":"2022-05-16T15:22:43.771994Z","shell.execute_reply.started":"2022-05-16T15:22:39.531746Z","shell.execute_reply":"2022-05-16T15:22:43.769958Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Analyze data","metadata":{}},{"cell_type":"code","source":"train_data.isnull().sum()","metadata":{"papermill":{"duration":0.071953,"end_time":"2022-05-13T09:52:51.642901","exception":false,"start_time":"2022-05-13T09:52:51.570948","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:43.775323Z","iopub.execute_input":"2022-05-16T15:22:43.775801Z","iopub.status.idle":"2022-05-16T15:22:43.834052Z","shell.execute_reply.started":"2022-05-16T15:22:43.775750Z","shell.execute_reply":"2022-05-16T15:22:43.832815Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y = train_data['label']\nimages = train_data.drop(['label'], axis=1)\nprint(images.shape, Y.shape)\ndel train_data","metadata":{"papermill":{"duration":0.113384,"end_time":"2022-05-13T09:52:51.781078","exception":false,"start_time":"2022-05-13T09:52:51.667694","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:43.836064Z","iopub.execute_input":"2022-05-16T15:22:43.836405Z","iopub.status.idle":"2022-05-16T15:22:43.978402Z","shell.execute_reply.started":"2022-05-16T15:22:43.836361Z","shell.execute_reply":"2022-05-16T15:22:43.977318Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = images.to_numpy(dtype='float32').reshape((42000, 28, 28, 1)) / 255.0\nX.shape","metadata":{"papermill":{"duration":0.13348,"end_time":"2022-05-13T09:52:51.940653","exception":false,"start_time":"2022-05-13T09:52:51.807173","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:43.979821Z","iopub.execute_input":"2022-05-16T15:22:43.980117Z","iopub.status.idle":"2022-05-16T15:22:44.161202Z","shell.execute_reply.started":"2022-05-16T15:22:43.980082Z","shell.execute_reply":"2022-05-16T15:22:44.160525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Show image","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nplt.imshow(X[10])","metadata":{"papermill":{"duration":0.247412,"end_time":"2022-05-13T09:52:52.215935","exception":false,"start_time":"2022-05-13T09:52:51.968523","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:44.162167Z","iopub.execute_input":"2022-05-16T15:22:44.162580Z","iopub.status.idle":"2022-05-16T15:22:44.376832Z","shell.execute_reply.started":"2022-05-16T15:22:44.162543Z","shell.execute_reply":"2022-05-16T15:22:44.375709Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# select model","metadata":{}},{"cell_type":"code","source":"num_classes = 10\n\nY = to_categorical(Y, num_classes=num_classes)","metadata":{"papermill":{"duration":5.654983,"end_time":"2022-05-13T09:52:57.898502","exception":false,"start_time":"2022-05-13T09:52:52.243519","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:44.378833Z","iopub.execute_input":"2022-05-16T15:22:44.379152Z","iopub.status.idle":"2022-05-16T15:22:53.773647Z","shell.execute_reply.started":"2022-05-16T15:22:44.379119Z","shell.execute_reply":"2022-05-16T15:22:53.772534Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def summarize_diagnostics(history):\n    plt.subplot(221)\n    plt.title('Cross Entropy Loss')\n    plt.plot(history.history['loss'], color='blue', label='train')\n    plt.plot(history.history['val_loss'], color='orange', label='test')\n    plt.subplot(222)\n    plt.title('Classification Accuracy')\n    plt.plot(history.history['accuracy'], color='blue', label='train')\n    plt.plot(history.history['val_accuracy'], color='orange', label='test')\n    pass\n\nmodel = Sequential()\nmodel.add(Conv2D(32, kernel_size=(3,3), padding='same', input_shape=(28, 28, 1), activation='relu'))\nmodel.add(Conv2D(32, (3,3), padding='same', activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))\nmodel.add(Dropout(0.1))\n\nmodel.add(Conv2D(64, (3,3), padding='same', activation='relu'))\nmodel.add(Conv2D(64, (3,3), padding='same', activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(128, (3,3), padding='same', activation='relu'))\nmodel.add(Conv2D(64, (3,3), padding='same', activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))\nmodel.add(Dropout(0.3))\n\nmodel.add(Conv2D(256, (3,3), padding='same', activation='relu'))\nmodel.add(Conv2D(256, (3,3), padding='same', activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))\nmodel.add(Dropout(0.4))\n\nmodel.add(Flatten())\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dense(10, activation='softmax'))\n\nmodel.summary()","metadata":{"papermill":{"duration":2.976362,"end_time":"2022-05-13T09:53:01.023788","exception":false,"start_time":"2022-05-13T09:52:58.047426","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:53.810824Z","iopub.execute_input":"2022-05-16T15:22:53.811161Z","iopub.status.idle":"2022-05-16T15:22:54.196599Z","shell.execute_reply.started":"2022-05-16T15:22:53.811114Z","shell.execute_reply":"2022-05-16T15:22:54.195291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen = ImageDataGenerator(rotation_range=5,\n                             zoom_range = 0.01,\n                             width_shift_range=0.1, \n                             height_shift_range=0.1\n                            )\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics='accuracy')","metadata":{"papermill":{"duration":0.03605,"end_time":"2022-05-13T09:53:01.086869","exception":false,"start_time":"2022-05-13T09:53:01.050819","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:54.198928Z","iopub.execute_input":"2022-05-16T15:22:54.201181Z","iopub.status.idle":"2022-05-16T15:22:54.211102Z","shell.execute_reply.started":"2022-05-16T15:22:54.201060Z","shell.execute_reply":"2022-05-16T15:22:54.209364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"steps = int(X.shape[0] // 64)\nhistory = model.fit(datagen.flow(X, Y, batch_size=32),\n                    steps_per_epoch=steps, epochs=40, batch_size=64, verbose=0)","metadata":{"papermill":{"duration":418.503551,"end_time":"2022-05-13T09:59:59.689105","exception":false,"start_time":"2022-05-13T09:53:01.185554","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T15:22:54.236979Z","iopub.execute_input":"2022-05-16T15:22:54.237217Z","iopub.status.idle":"2022-05-16T16:14:52.795329Z","shell.execute_reply.started":"2022-05-16T15:22:54.237189Z","shell.execute_reply":"2022-05-16T16:14:52.794657Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"(train_X, train_y), (test_X, test_y) = mnist.load_data()\nprint(type(train_X), train_X.shape, test_X.shape)","metadata":{"papermill":{"duration":0.64515,"end_time":"2022-05-13T10:00:00.625473","exception":false,"start_time":"2022-05-13T09:59:59.980323","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T16:14:52.820589Z","iopub.execute_input":"2022-05-16T16:14:52.821145Z","iopub.status.idle":"2022-05-16T16:14:53.444671Z","shell.execute_reply.started":"2022-05-16T16:14:52.821105Z","shell.execute_reply":"2022-05-16T16:14:53.443613Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = np.concatenate((train_X, test_X), axis=0)\nY = np.concatenate((train_y, test_y), axis=0)\nprint(X.shape, Y.shape)","metadata":{"papermill":{"duration":0.075768,"end_time":"2022-05-13T10:00:00.753876","exception":false,"start_time":"2022-05-13T10:00:00.678108","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T16:14:53.447130Z","iopub.execute_input":"2022-05-16T16:14:53.447666Z","iopub.status.idle":"2022-05-16T16:14:53.479463Z","shell.execute_reply.started":"2022-05-16T16:14:53.447624Z","shell.execute_reply":"2022-05-16T16:14:53.478812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.reshape(-1, 28, 28, 1)\nX.shape","metadata":{"papermill":{"duration":0.042,"end_time":"2022-05-13T10:00:00.828329","exception":false,"start_time":"2022-05-13T10:00:00.786329","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T16:14:53.480285Z","iopub.execute_input":"2022-05-16T16:14:53.480490Z","iopub.status.idle":"2022-05-16T16:14:53.486267Z","shell.execute_reply.started":"2022-05-16T16:14:53.480464Z","shell.execute_reply":"2022-05-16T16:14:53.485684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X / 255.0\nY = to_categorical(Y, num_classes=num_classes)\nY.shape","metadata":{"papermill":{"duration":0.181378,"end_time":"2022-05-13T10:00:01.042412","exception":false,"start_time":"2022-05-13T10:00:00.861034","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T16:14:53.487072Z","iopub.execute_input":"2022-05-16T16:14:53.487258Z","iopub.status.idle":"2022-05-16T16:14:53.689736Z","shell.execute_reply.started":"2022-05-16T16:14:53.487233Z","shell.execute_reply":"2022-05-16T16:14:53.688689Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(x=X, y=Y, batch_size=64, epochs=100)","metadata":{"papermill":{"duration":862.921038,"end_time":"2022-05-13T10:14:23.994118","exception":false,"start_time":"2022-05-13T10:00:01.07308","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T16:14:53.690874Z","iopub.execute_input":"2022-05-16T16:14:53.691112Z","iopub.status.idle":"2022-05-16T20:38:38.575262Z","shell.execute_reply.started":"2022-05-16T16:14:53.691074Z","shell.execute_reply":"2022-05-16T20:38:38.574593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = pd.read_csv(os.path.join(root, 'test.csv'))\ntest = test / 255.0\ntest = np.array(test).reshape(-1,28,28,1)","metadata":{"papermill":{"duration":7.205839,"end_time":"2022-05-13T10:14:36.517215","exception":false,"start_time":"2022-05-13T10:14:29.311376","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T20:38:38.577340Z","iopub.execute_input":"2022-05-16T20:38:38.578047Z","iopub.status.idle":"2022-05-16T20:38:41.495797Z","shell.execute_reply.started":"2022-05-16T20:38:38.578002Z","shell.execute_reply":"2022-05-16T20:38:41.494801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model.predict(test)\ny_pred = np.argmax(y_pred, axis=1)","metadata":{"papermill":{"duration":8.459458,"end_time":"2022-05-13T10:14:50.4059","exception":false,"start_time":"2022-05-13T10:14:41.946442","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T20:38:41.497079Z","iopub.execute_input":"2022-05-16T20:38:41.497830Z","iopub.status.idle":"2022-05-16T20:39:02.124164Z","shell.execute_reply.started":"2022-05-16T20:38:41.497801Z","shell.execute_reply":"2022-05-16T20:39:02.123514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred","metadata":{"papermill":{"duration":5.538769,"end_time":"2022-05-13T10:15:01.007467","exception":false,"start_time":"2022-05-13T10:14:55.468698","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T20:39:02.125450Z","iopub.execute_input":"2022-05-16T20:39:02.126222Z","iopub.status.idle":"2022-05-16T20:39:02.133031Z","shell.execute_reply.started":"2022-05-16T20:39:02.126167Z","shell.execute_reply":"2022-05-16T20:39:02.131962Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_df = pd.DataFrame()\nimage_id = [i for i in range(1, 28001)]\nsubmission_df['ImageId'] = image_id\nsubmission_df['Label'] = y_pred\nsubmission_df","metadata":{"papermill":{"duration":5.206316,"end_time":"2022-05-13T10:15:11.290042","exception":false,"start_time":"2022-05-13T10:15:06.083726","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T20:39:02.134604Z","iopub.execute_input":"2022-05-16T20:39:02.135413Z","iopub.status.idle":"2022-05-16T20:39:02.190210Z","shell.execute_reply.started":"2022-05-16T20:39:02.135366Z","shell.execute_reply":"2022-05-16T20:39:02.189539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# save submission as csv file","metadata":{}},{"cell_type":"code","source":"submission_df.to_csv('submission.csv', index = False)","metadata":{"papermill":{"duration":5.239603,"end_time":"2022-05-13T10:15:22.243269","exception":false,"start_time":"2022-05-13T10:15:17.003666","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-16T20:39:02.191357Z","iopub.execute_input":"2022-05-16T20:39:02.191776Z","iopub.status.idle":"2022-05-16T20:39:02.245804Z","shell.execute_reply.started":"2022-05-16T20:39:02.191745Z","shell.execute_reply":"2022-05-16T20:39:02.245104Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":5.061128,"end_time":"2022-05-13T10:15:32.506871","exception":false,"start_time":"2022-05-13T10:15:27.445743","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}