{"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 seaborn as sns\nimport matplotlib.pyplot as plt\nimport tensorflow as tf","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:20:48.56713Z","iopub.execute_input":"2021-07-25T10:20:48.567597Z","iopub.status.idle":"2021-07-25T10:20:55.921184Z","shell.execute_reply.started":"2021-07-25T10:20:48.56756Z","shell.execute_reply":"2021-07-25T10:20:55.920045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.read_csv('../input/digit-recognizer/train.csv')\ntest_data = pd.read_csv('../input/digit-recognizer/test.csv')","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:20:57.083319Z","iopub.execute_input":"2021-07-25T10:20:57.083709Z","iopub.status.idle":"2021-07-25T10:21:03.547735Z","shell.execute_reply.started":"2021-07-25T10:20:57.083674Z","shell.execute_reply":"2021-07-25T10:21:03.546601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:04.174121Z","iopub.execute_input":"2021-07-25T10:21:04.174543Z","iopub.status.idle":"2021-07-25T10:21:04.218067Z","shell.execute_reply.started":"2021-07-25T10:21:04.174505Z","shell.execute_reply":"2021-07-25T10:21:04.216849Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = train_data.drop('label',axis=1)\ndisplay(X_train.head())\nY_train = train_data['label']\ndisplay(Y_train.head())\nX_test = test_data","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:05.340436Z","iopub.execute_input":"2021-07-25T10:21:05.340833Z","iopub.status.idle":"2021-07-25T10:21:05.517227Z","shell.execute_reply.started":"2021-07-25T10:21:05.340776Z","shell.execute_reply":"2021-07-25T10:21:05.516438Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.shape,Y_train.shape, X_test.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:06.499895Z","iopub.execute_input":"2021-07-25T10:21:06.500387Z","iopub.status.idle":"2021-07-25T10:21:06.506193Z","shell.execute_reply.started":"2021-07-25T10:21:06.500348Z","shell.execute_reply":"2021-07-25T10:21:06.505121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(x='label',data=train_data)","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:07.81724Z","iopub.execute_input":"2021-07-25T10:21:07.817648Z","iopub.status.idle":"2021-07-25T10:21:08.052289Z","shell.execute_reply.started":"2021-07-25T10:21:07.817615Z","shell.execute_reply":"2021-07-25T10:21:08.051165Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train/255\nX_test = X_test/255","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:11.242715Z","iopub.execute_input":"2021-07-25T10:21:11.243336Z","iopub.status.idle":"2021-07-25T10:21:11.39974Z","shell.execute_reply.started":"2021-07-25T10:21:11.243295Z","shell.execute_reply":"2021-07-25T10:21:11.398537Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train.values.reshape(-1,28,28,1)\nX_test = X_test.values.reshape(-1,28,28,1)\nX_train.shape,X_test.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:13.431107Z","iopub.execute_input":"2021-07-25T10:21:13.431534Z","iopub.status.idle":"2021-07-25T10:21:13.439051Z","shell.execute_reply.started":"2021-07-25T10:21:13.431492Z","shell.execute_reply":"2021-07-25T10:21:13.438019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.utils.np_utils import to_categorical\nY_train = to_categorical(Y_train,num_classes=10)\nY_train.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:14.438449Z","iopub.execute_input":"2021-07-25T10:21:14.439041Z","iopub.status.idle":"2021-07-25T10:21:14.513853Z","shell.execute_reply.started":"2021-07-25T10:21:14.439003Z","shell.execute_reply":"2021-07-25T10:21:14.512758Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:15.525775Z","iopub.execute_input":"2021-07-25T10:21:15.526188Z","iopub.status.idle":"2021-07-25T10:21:15.5334Z","shell.execute_reply.started":"2021-07-25T10:21:15.526154Z","shell.execute_reply":"2021-07-25T10:21:15.532198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfrom sklearn.model_selection import train_test_split\nX_train, X_train_test, Y_train, Y_train_test = train_test_split(X_train, Y_train, test_size = 0.1, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:17.639179Z","iopub.execute_input":"2021-07-25T10:21:17.639563Z","iopub.status.idle":"2021-07-25T10:21:18.477674Z","shell.execute_reply.started":"2021-07-25T10:21:17.63953Z","shell.execute_reply":"2021-07-25T10:21:18.476454Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.imshow(X_train[3][:,:,0])\nplt.title(Y_train[3].argmax())","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:18.98461Z","iopub.execute_input":"2021-07-25T10:21:18.985044Z","iopub.status.idle":"2021-07-25T10:21:19.158422Z","shell.execute_reply.started":"2021-07-25T10:21:18.985008Z","shell.execute_reply":"2021-07-25T10:21:19.157197Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.layers import Input,InputLayer, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D\nfrom keras.layers import AveragePooling2D, MaxPooling2D, Dropout\nfrom keras.models import Sequential, Model\nfrom keras.optimizers import SGD\nfrom keras.callbacks import ModelCheckpoint, LearningRateScheduler\nimport keras\nfrom keras import backend as K","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:21.73929Z","iopub.execute_input":"2021-07-25T10:21:21.739739Z","iopub.status.idle":"2021-07-25T10:21:21.746708Z","shell.execute_reply.started":"2021-07-25T10:21:21.739697Z","shell.execute_reply":"2021-07-25T10:21:21.745259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"input_shape = (28,28,1)\nX_input = Input(input_shape)","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:23.660134Z","iopub.execute_input":"2021-07-25T10:21:23.660542Z","iopub.status.idle":"2021-07-25T10:21:23.917925Z","shell.execute_reply.started":"2021-07-25T10:21:23.660509Z","shell.execute_reply":"2021-07-25T10:21:23.916839Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = Conv2D(128,(3,3),strides=(1,1),name='layer_conv1',padding='same')(X_input)\nx = BatchNormalization()(x)\nx = Activation('relu')(x)\nx = MaxPooling2D((2,2),name='maxPool1')(x)\n\nx = Conv2D(64,(3,3),strides=(1,1),name='layer_conv2',padding='same')(x)\nx = BatchNormalization()(x)\nx = Activation('relu')(x)\nx = MaxPooling2D((2,2),name='maxPool2')(x)\n\nx = Conv2D(32,(3,3),strides=(1,1),name='layer_conv3',padding='same')(x)\nx = BatchNormalization()(x)\nx = Activation('relu')(x)\nx = MaxPooling2D((2,2),name='maxPool3')(x)\n\nx = Conv2D(32,(3,3),strides=(1,1),name='layer_conv4',padding='same')(x)\nx = BatchNormalization()(x)\nx = Activation('relu')(x)\nx = MaxPooling2D((2,2), name='maxPool4')(x)\n\nx = Flatten()(x)\nx = Dense(64,activation ='relu',name='fc0')(x)\nx = Dropout(0.25)(x)\nx = Dense(32,activation ='relu',name='fc1')(x)\nx = Dropout(0.25)(x)\nx = Dense(10,activation ='softmax',name='fc2')(x)\n\nconv_model = Model(inputs=X_input, outputs=x, name='Predict')\nconv_model.summary()","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:27.233026Z","iopub.execute_input":"2021-07-25T10:21:27.23344Z","iopub.status.idle":"2021-07-25T10:21:27.469725Z","shell.execute_reply.started":"2021-07-25T10:21:27.233404Z","shell.execute_reply":"2021-07-25T10:21:27.468376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# Adam optimizer\nconv_model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])\nconv_model.fit(X_train, Y_train, epochs=10, batch_size=100, validation_data=(X_train_test,Y_train_test))","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:21:31.565049Z","iopub.execute_input":"2021-07-25T10:21:31.565406Z","iopub.status.idle":"2021-07-25T10:43:30.725179Z","shell.execute_reply.started":"2021-07-25T10:21:31.565375Z","shell.execute_reply":"2021-07-25T10:43:30.724198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_pred = conv_model.predict(X_test)\nY_pred = np.argmax(Y_pred,axis=1)\nsubmission = pd.DataFrame({'ImageId': list(range(1, len(Y_pred)+1)), 'Label': Y_pred})\nsubmission.to_csv('solutions.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-07-25T10:45:54.736994Z","iopub.execute_input":"2021-07-25T10:45:54.737476Z","iopub.status.idle":"2021-07-25T10:46:13.539091Z","shell.execute_reply.started":"2021-07-25T10:45:54.73742Z","shell.execute_reply":"2021-07-25T10:46:13.537938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}