{"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 \n\nimport matplotlib.pyplot as plt\nfrom sklearn.utils import shuffle\nfrom sklearn.model_selection import train_test_split\n\nfrom tensorflow.keras.layers import Conv2D,MaxPooling2D,BatchNormalization,Flatten,Dense\nfrom tensorflow.keras.models import Sequential,Model\nfrom tensorflow.keras.callbacks import EarlyStopping , ReduceLROnPlateau\n\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-12T05:43:44.505722Z","iopub.execute_input":"2022-03-12T05:43:44.50669Z","iopub.status.idle":"2022-03-12T05:43:50.132568Z","shell.execute_reply.started":"2022-03-12T05:43:44.506576Z","shell.execute_reply":"2022-03-12T05:43:50.131799Z"},"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":"2022-03-12T05:43:50.134139Z","iopub.execute_input":"2022-03-12T05:43:50.134461Z","iopub.status.idle":"2022-03-12T05:43:55.003865Z","shell.execute_reply.started":"2022-03-12T05:43:50.134422Z","shell.execute_reply":"2022-03-12T05:43:55.002751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:55.005295Z","iopub.execute_input":"2022-03-12T05:43:55.00611Z","iopub.status.idle":"2022-03-12T05:43:55.032367Z","shell.execute_reply.started":"2022-03-12T05:43:55.006067Z","shell.execute_reply":"2022-03-12T05:43:55.031474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:55.034844Z","iopub.execute_input":"2022-03-12T05:43:55.035148Z","iopub.status.idle":"2022-03-12T05:43:55.051666Z","shell.execute_reply.started":"2022-03-12T05:43:55.035109Z","shell.execute_reply":"2022-03-12T05:43:55.05066Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y = train_data.pop('label').to_numpy()\ny = y.reshape((y.shape[0],1))\n\nX = train_data.to_numpy()\nX =  X.reshape((X.shape[0],28,28,1))\n\nX = X.astype(\"float32\")\nX = X/255.0\ny = y.astype(\"float32\")\n\nX_test = test_data.to_numpy()\nX_test =  X_test.reshape((X_test.shape[0],28,28,1))\n\nX_test = X_test.astype(\"float32\")\nX_test = X_test/255.0\n\nprint(f\"train data and label have shape = {X.shape} , {y.shape} respectively.\")\nprint(f\"test data have shape = {X_test.shape}.\")","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:55.053854Z","iopub.execute_input":"2022-03-12T05:43:55.054163Z","iopub.status.idle":"2022-03-12T05:43:55.396478Z","shell.execute_reply.started":"2022-03-12T05:43:55.054125Z","shell.execute_reply":"2022-03-12T05:43:55.395679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = plt.figure(figsize=(10,10))\ncount=0\nfor i in range(4):\n    for j in range(4):\n        plt.subplot(4,4,count+1);\n        plt.imshow(X[count]);\n        count+=1;","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:55.397816Z","iopub.execute_input":"2022-03-12T05:43:55.398083Z","iopub.status.idle":"2022-03-12T05:43:56.928759Z","shell.execute_reply.started":"2022-03-12T05:43:55.398047Z","shell.execute_reply":"2022-03-12T05:43:56.928108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=Sequential()\n\n#model.add(Lambda(standardize,input_shape=(28,28,1)))    \nmodel.add(Conv2D(filters=64, kernel_size = (3,3), activation=\"relu\", input_shape=(28,28,1)))\nmodel.add(Conv2D(filters=64, kernel_size = (3,3), activation=\"relu\",padding=\"same\"))\n\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(filters=128, kernel_size = (3,3), activation=\"relu\"))\nmodel.add(Conv2D(filters=128, kernel_size = (3,3), activation=\"relu\",padding=\"same\"))\nmodel.add(Conv2D(filters=256, kernel_size = (3,3), activation=\"relu\"))\n\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())    \nmodel.add(Conv2D(filters=512, kernel_size = (3,3), activation=\"relu\"))\n    \nmodel.add(MaxPooling2D(pool_size=(2,2)))\n    \nmodel.add(Flatten())\nmodel.add(Dense(512,activation=\"relu\"))\n    \nmodel.add(Dense(10,activation=\"softmax\"))\nmodel.summary()\n    \nmodel.compile(loss=\"sparse_categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:56.930018Z","iopub.execute_input":"2022-03-12T05:43:56.930324Z","iopub.status.idle":"2022-03-12T05:43:59.205122Z","shell.execute_reply.started":"2022-03-12T05:43:56.930288Z","shell.execute_reply":"2022-03-12T05:43:59.203394Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reduce_learing_rate = ReduceLROnPlateau(patience=1)\ncallback_list = [reduce_learing_rate]","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:59.206371Z","iopub.execute_input":"2022-03-12T05:43:59.206604Z","iopub.status.idle":"2022-03-12T05:43:59.212582Z","shell.execute_reply.started":"2022-03-12T05:43:59.206572Z","shell.execute_reply":"2022-03-12T05:43:59.211902Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(X,y,validation_split=0.2 ,epochs=10,callbacks=callback_list,batch_size=128)","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:43:59.213494Z","iopub.execute_input":"2022-03-12T05:43:59.213761Z","iopub.status.idle":"2022-03-12T05:45:22.189683Z","shell.execute_reply.started":"2022-03-12T05:43:59.213721Z","shell.execute_reply":"2022-03-12T05:45:22.189016Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = model.predict(X_test)\npredictions = np.argmax(predictions,axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:45:22.192191Z","iopub.execute_input":"2022-03-12T05:45:22.192452Z","iopub.status.idle":"2022-03-12T05:45:25.06293Z","shell.execute_reply.started":"2022-03-12T05:45:22.192417Z","shell.execute_reply":"2022-03-12T05:45:25.062138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = plt.figure(figsize=(10,10))\ncount=0\nfor i in range(4):\n    for j in range(4):\n        plt.subplot(4,4,count+1);\n        plt.imshow(X_test[count]);\n        plt.title(f\"predicted digit : {predictions[count]}\")\n        plt.tight_layout()\n        count+=1;","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:45:25.064126Z","iopub.execute_input":"2022-03-12T05:45:25.064365Z","iopub.status.idle":"2022-03-12T05:45:27.749878Z","shell.execute_reply.started":"2022-03-12T05:45:25.064333Z","shell.execute_reply":"2022-03-12T05:45:27.749186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ImageId = list(range(1,X_test.shape[0]+1))\n\nsubmission = pd.DataFrame()\n\nsubmission[\"ImageId\"] = ImageId\n\nsubmission[\"label\"] = list(predictions)\n\nsubmission.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-03-12T05:45:27.751307Z","iopub.execute_input":"2022-03-12T05:45:27.751683Z","iopub.status.idle":"2022-03-12T05:45:27.841696Z","shell.execute_reply.started":"2022-03-12T05:45:27.751645Z","shell.execute_reply":"2022-03-12T05:45:27.841077Z"},"trusted":true},"execution_count":null,"outputs":[]}]}