{"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\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\n\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, Lambda, MaxPool2D ,AveragePooling2D\nfrom keras.layers import Dense, Dropout, Flatten \nfrom keras.layers import BatchNormalization\n\nfrom keras.preprocessing.image import ImageDataGenerator\n\nfrom keras.utils.np_utils import to_categorical","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-02-27T15:38:54.805533Z","iopub.execute_input":"2023-02-27T15:38:54.806498Z","iopub.status.idle":"2023-02-27T15:39:02.882351Z","shell.execute_reply.started":"2023-02-27T15:38:54.806445Z","shell.execute_reply":"2023-02-27T15:39:02.881209Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train,test,sub = pd.read_csv('../input/digit-recognizer/train.csv'), pd.read_csv('../input/digit-recognizer/test.csv'),pd.read_csv('../input/digit-recognizer/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:02.884714Z","iopub.execute_input":"2023-02-27T15:39:02.885503Z","iopub.status.idle":"2023-02-27T15:39:07.890885Z","shell.execute_reply.started":"2023-02-27T15:39:02.885462Z","shell.execute_reply":"2023-02-27T15:39:07.889852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:07.895419Z","iopub.execute_input":"2023-02-27T15:39:07.898076Z","iopub.status.idle":"2023-02-27T15:39:07.929972Z","shell.execute_reply.started":"2023-02-27T15:39:07.898038Z","shell.execute_reply":"2023-02-27T15:39:07.929115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train,y_train=train.drop('label',axis=1),train['label']","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:07.934840Z","iopub.execute_input":"2023-02-27T15:39:07.935788Z","iopub.status.idle":"2023-02-27T15:39:08.027921Z","shell.execute_reply.started":"2023-02-27T15:39:07.935750Z","shell.execute_reply":"2023-02-27T15:39:08.026803Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train/=255.0\ntest/=255.0","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:08.029419Z","iopub.execute_input":"2023-02-27T15:39:08.029994Z","iopub.status.idle":"2023-02-27T15:39:08.231737Z","shell.execute_reply.started":"2023-02-27T15:39:08.029955Z","shell.execute_reply":"2023-02-27T15:39:08.230721Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train = x_train.values.reshape(-1,28,28,1)\ntest = test.values.reshape(-1,28,28,1)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:08.233229Z","iopub.execute_input":"2023-02-27T15:39:08.233835Z","iopub.status.idle":"2023-02-27T15:39:08.240965Z","shell.execute_reply.started":"2023-02-27T15:39:08.233793Z","shell.execute_reply":"2023-02-27T15:39:08.239495Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = to_categorical(y_train, num_classes = 10)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:08.242972Z","iopub.execute_input":"2023-02-27T15:39:08.243783Z","iopub.status.idle":"2023-02-27T15:39:08.256897Z","shell.execute_reply.started":"2023-02-27T15:39:08.243629Z","shell.execute_reply":"2023-02-27T15:39:08.255812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_val, y_train, y_val = train_test_split(x_train, y_train, test_size = 0.1, shuffle=True,random_state=42)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:08.258782Z","iopub.execute_input":"2023-02-27T15:39:08.259191Z","iopub.status.idle":"2023-02-27T15:39:08.635988Z","shell.execute_reply.started":"2023-02-27T15:39:08.259152Z","shell.execute_reply":"2023-02-27T15:39:08.634954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.shape, X_val.shape, y_train.shape, y_val.shape","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:08.637510Z","iopub.execute_input":"2023-02-27T15:39:08.638075Z","iopub.status.idle":"2023-02-27T15:39:08.645293Z","shell.execute_reply.started":"2023-02-27T15:39:08.638036Z","shell.execute_reply":"2023-02-27T15:39:08.644244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen = ImageDataGenerator(\n        featurewise_center=False,  # set input mean to 0 over the dataset\n        samplewise_center=False,  # set each sample mean to 0\n        featurewise_std_normalization=False,  # divide inputs by std of the dataset\n        samplewise_std_normalization=False,  # divide each input by its std\n        zca_whitening=False,  # apply ZCA whitening\n        rotation_range=15,  # randomly rotate images in the range (degrees, 0 to 180)\n        zoom_range = 0.01, # Randomly zoom image \n        width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)\n        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)\n        horizontal_flip=False,  # randomly flip images\n        vertical_flip=False)  # randomly flip images\n\n\ndatagen.fit(X_train)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-27T15:39:08.648963Z","iopub.execute_input":"2023-02-27T15:39:08.649613Z","iopub.status.idle":"2023-02-27T15:39:08.745980Z","shell.execute_reply.started":"2023-02-27T15:39:08.649577Z","shell.execute_reply":"2023-02-27T15:39:08.744951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(filters = 64, kernel_size = (5,5),padding = 'Same', activation ='relu', input_shape = (28,28,1)))\nmodel.add(BatchNormalization())\n\nmodel.add(Conv2D(filters = 64, kernel_size = (5,5),padding = 'Same', activation ='relu'))\nmodel.add(BatchNormalization())\n\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', activation ='relu'))\nmodel.add(BatchNormalization())\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', activation ='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3), padding = 'Same',  activation ='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.25))\n\nmodel.add(Dense(10, activation = \"softmax\"))\n    \nmodel.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2023-02-27T16:01:26.689280Z","iopub.execute_input":"2023-02-27T16:01:26.690193Z","iopub.status.idle":"2023-02-27T16:01:26.863820Z","shell.execute_reply.started":"2023-02-27T16:01:26.690155Z","shell.execute_reply":"2023-02-27T16:01:26.862806Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rp = keras.callbacks.ReduceLROnPlateau(\n        monitor=\"val_acc\",\n        factor=0.2,\n        patience=3,\n        verbose=1,\n        mode=\"max\",\n        min_lr=0.000001,\n     )\nhistory = model.fit_generator(datagen.flow(X_train, y_train, batch_size=100), steps_per_epoch=len(X_train)/100, \n                    epochs=30, validation_data=(X_val, y_val), callbacks=[rp])","metadata":{"execution":{"iopub.status.busy":"2023-02-27T16:01:31.752083Z","iopub.execute_input":"2023-02-27T16:01:31.752502Z","iopub.status.idle":"2023-02-27T16:08:38.801838Z","shell.execute_reply.started":"2023-02-27T16:01:31.752465Z","shell.execute_reply":"2023-02-27T16:08:38.800786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = np.array(test)\nX_test = X_test.reshape((X_test.shape[0], 28, 28, 1))\nY_test = model.predict(X_test)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T16:09:35.838800Z","iopub.execute_input":"2023-02-27T16:09:35.839540Z","iopub.status.idle":"2023-02-27T16:09:38.544466Z","shell.execute_reply.started":"2023-02-27T16:09:35.839501Z","shell.execute_reply":"2023-02-27T16:09:38.543435Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_test = np.argmax(Y_test, axis=1)\nsub['Label']=Y_test\nsub.head(10)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T16:09:40.377900Z","iopub.execute_input":"2023-02-27T16:09:40.378264Z","iopub.status.idle":"2023-02-27T16:09:40.391292Z","shell.execute_reply.started":"2023-02-27T16:09:40.378232Z","shell.execute_reply":"2023-02-27T16:09:40.389958Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-02-27T16:09:46.506988Z","iopub.execute_input":"2023-02-27T16:09:46.508030Z","iopub.status.idle":"2023-02-27T16:09:46.541844Z","shell.execute_reply.started":"2023-02-27T16:09:46.507978Z","shell.execute_reply":"2023-02-27T16:09:46.540867Z"},"trusted":true},"execution_count":null,"outputs":[]}]}