{"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 seaborn as sb\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport io\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense,Dropout,InputLayer,Conv2D,AveragePooling2D,Flatten, Add, GlobalAveragePooling2D,Input, BatchNormalization, Activation\nfrom keras.utils import to_categorical\nfrom tensorflow.keras import regularizers\nimport os\nfrom tensorflow.keras import Model\n","metadata":{"id":"6yBpkEYl_R4B","execution":{"iopub.status.busy":"2023-09-16T23:15:52.708476Z","iopub.execute_input":"2023-09-16T23:15:52.708846Z","iopub.status.idle":"2023-09-16T23:15:52.716496Z","shell.execute_reply.started":"2023-09-16T23:15:52.708817Z","shell.execute_reply":"2023-09-16T23:15:52.714828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Loding mnist DataSet","metadata":{}},{"cell_type":"code","source":"data = tf.keras.datasets.mnist.load_data(path=\"mnist.npz\")\n(X_train, y_train), (X_test, y_test) = data\nprint(X_train.shape)","metadata":{"id":"pbWBHSHh_mYv","outputId":"4f21e695-51d2-4789-eb76-0da6c7b5a318","execution":{"iopub.status.busy":"2023-09-17T00:00:20.518013Z","iopub.execute_input":"2023-09-17T00:00:20.518375Z","iopub.status.idle":"2023-09-17T00:00:20.820999Z","shell.execute_reply.started":"2023-09-17T00:00:20.518347Z","shell.execute_reply":"2023-09-17T00:00:20.820097Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"preproccesing data for fullconnected model","metadata":{}},{"cell_type":"code","source":"X_train = X_train.reshape((X_train.shape[0], 28*28)).astype('float32')\nX_test = X_test.reshape((X_test.shape[0], 28*28)).astype('float32')\nX_train = X_train.astype('float32') / 255\nX_test = X_test.astype('float32') / 255\ny_train = to_categorical(y_train, num_classes=10)\ny_test = to_categorical(y_test, num_classes=10)\nX_train ,x_val,y_train,y_val = train_test_split(X_train,y_train,test_size=.1)\nprint(y_test.shape ,x_val.shape,y_train.shape,y_val.shape)","metadata":{"id":"TKtPe-GaAxKN","outputId":"a206051f-83ed-4d7a-9300-f7e818b8a305","execution":{"iopub.status.busy":"2023-09-17T00:00:23.298085Z","iopub.execute_input":"2023-09-17T00:00:23.298464Z","iopub.status.idle":"2023-09-17T00:00:23.514108Z","shell.execute_reply.started":"2023-09-17T00:00:23.298433Z","shell.execute_reply":"2023-09-17T00:00:23.512952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"training dataset on fully connected model","metadata":{}},{"cell_type":"code","source":"\nnn_model = Sequential()\nnn_model.add(InputLayer(input_shape=(28*28,)))\nnn_model.add(Dense(100, activation='relu',kernel_initializer=tf.keras.initializers.GlorotNormal()))\nnn_model.add(Dense(100, activation='relu',kernel_initializer=tf.keras.initializers.GlorotNormal()))\n\nnn_model.add(Dense(10,activation='softmax'))\nnn_model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['categorical_accuracy'])\nm1=nn_model.fit(x=X_train,y=y_train,epochs=100,batch_size= 128,validation_data=(x_val,y_val))","metadata":{"id":"xSiseMeDA2pu","outputId":"361278a1-cd28-43da-94c7-791e5a7b1829","execution":{"iopub.status.busy":"2023-09-17T00:00:30.030757Z","iopub.execute_input":"2023-09-17T00:00:30.031166Z","iopub.status.idle":"2023-09-17T00:03:02.348042Z","shell.execute_reply.started":"2023-09-17T00:00:30.031119Z","shell.execute_reply":"2023-09-17T00:03:02.347076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nn_model.summary()\nplt.figure(figsize=(10,6))\nsb.set_style(\"whitegrid\")\nplt.plot(m1.history['categorical_accuracy'],color=\"Purple\",marker='o')\nplt.plot(m1.history['val_categorical_accuracy'],color='Orange',marker='h')\nplt.title('Loss comparison between Validation and Train Data set',fontsize=15)\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Test'], loc='best')\nplt.show()","metadata":{"id":"esFesP0DIL3J","outputId":"799f1942-514b-493f-d1da-a48d9342d1ba","execution":{"iopub.status.busy":"2023-09-17T00:03:07.924361Z","iopub.execute_input":"2023-09-17T00:03:07.924729Z","iopub.status.idle":"2023-09-17T00:03:08.353517Z","shell.execute_reply.started":"2023-09-17T00:03:07.924700Z","shell.execute_reply":"2023-09-17T00:03:08.352159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Preprocessing data for Lenet-5 and resnet-18","metadata":{}},{"cell_type":"code","source":"(X_train, y_train), (X_test, y_test) = data\nX_train = X_train.astype('float32') / 255\nX_test = X_test.astype('float32') / 255\ny_train = to_categorical(y_train, num_classes=10)\ny_test = to_categorical(y_test, num_classes=10)\nX_train ,x_val,y_train,y_val = train_test_split(X_train,y_train,test_size=.1)\nprint(y_test.shape)","metadata":{"id":"vSR1Zi5Mno_n","outputId":"cb566147-0818-4096-d739-35af26411e9b","execution":{"iopub.status.busy":"2023-09-17T00:03:23.874100Z","iopub.execute_input":"2023-09-17T00:03:23.874933Z","iopub.status.idle":"2023-09-17T00:03:24.018123Z","shell.execute_reply.started":"2023-09-17T00:03:23.874901Z","shell.execute_reply":"2023-09-17T00:03:24.017029Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"LEnet-5 model","metadata":{}},{"cell_type":"code","source":"lenet_model = Sequential()\nlenet_model.add(Conv2D(filters=6,kernel_size=(5,5),padding='same',activation = 'relu', input_shape = (28,28,1)))\nlenet_model.add(AveragePooling2D(pool_size=(2, 2), strides=2))\nlenet_model.add(Conv2D(filters=16,kernel_size=(5,5),activation = 'relu'))\nlenet_model.add(AveragePooling2D(pool_size=(2, 2), strides=2))\nlenet_model.add(Flatten())\nlenet_model.add(Dense(120, activation='relu'))\nlenet_model.add(Dense(10, activation='softmax'))\nlenet_model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['categorical_accuracy'])\nm2= lenet_model.fit(x=X_train,y=y_train,epochs=100,batch_size= 128,validation_data=(x_val,y_val))","metadata":{"id":"Yv62VPFvb2Fw","outputId":"280d0c24-9255-4e5b-8316-db88f457165b","execution":{"iopub.status.busy":"2023-09-17T00:03:27.303566Z","iopub.execute_input":"2023-09-17T00:03:27.303943Z","iopub.status.idle":"2023-09-17T00:06:30.173188Z","shell.execute_reply.started":"2023-09-17T00:03:27.303913Z","shell.execute_reply":"2023-09-17T00:06:30.172180Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lenet_model.summary()\nplt.figure(figsize=(10,6))\nsb.set_style(\"whitegrid\")\nplt.plot(m2.history['categorical_accuracy'],color=\"Purple\",marker='o')\nplt.plot(m2.history['val_categorical_accuracy'],color='Orange',marker='h')\nplt.title('Loss comparison between Validation and Train Data set',fontsize=15)\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Test'], loc='best')\nplt.show()\nprint(lenet_model.evaluate(X_test,y_test))","metadata":{"id":"-XWaRiwJpMha","outputId":"e08a7a39-52ed-4bb7-fde7-a7b146cacff5","execution":{"iopub.status.busy":"2023-09-17T00:11:47.322854Z","iopub.execute_input":"2023-09-17T00:11:47.323889Z","iopub.status.idle":"2023-09-17T00:11:49.089598Z","shell.execute_reply.started":"2023-09-17T00:11:47.323853Z","shell.execute_reply":"2023-09-17T00:11:49.088392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Creating definning model","metadata":{}},{"cell_type":"code","source":"def resblock(x,filters):\n  x_skip = x\n  x = Conv2D(filters,kernel_size=(3,3),padding='same',strides=2)(x)\n  x = BatchNormalization(axis=3)(x)\n  x = Activation('relu')(x)\n  x = Conv2D(filters,kernel_size=(3,3),padding='same',strides=1)(x)\n  x = BatchNormalization(axis=3)(x)\n  x_skip = Conv2D(filters,kernel_size=(3,3),padding='same',strides=2)(x_skip)\n  x = Add()([x,x_skip])\n  x = Activation('relu')(x)\n  return x\ndef identityblock(x,filters):\n  x_skip = x\n  x = Conv2D(filters,kernel_size=(3,3),padding='same',strides=1)(x)\n  x = BatchNormalization(axis=3)(x)\n  x = Activation('relu')(x)\n  x = Conv2D(filters,kernel_size=(3,3),padding='same',strides=1)(x)\n  x = BatchNormalization(axis=3)(x)\n  x = Add()([x,x_skip])\n  x = Activation('relu')(x)\n  return x\ndef res_net(shape_in):\n  input = Input(shape_in)\n  x = Conv2D(64,kernel_size=(3,3),padding='same')(input)\n  x = BatchNormalization(axis=3)(x)\n  x = Activation('relu')(x)\n  x = resblock(x,128)\n  x = identityblock(x,128)\n  x = resblock(x,256)\n  x = identityblock(x,256)\n  x = resblock(x,512)\n  x = identityblock(x,512)\n  x = Flatten()(x)\n  output = Dense(10, activation='softmax')(x)\n  return input,output\n\n\n","metadata":{"id":"8y3AvDKN1S6T","execution":{"iopub.status.busy":"2023-09-16T23:16:51.132274Z","iopub.execute_input":"2023-09-16T23:16:51.132629Z","iopub.status.idle":"2023-09-16T23:16:51.144340Z","shell.execute_reply.started":"2023-09-16T23:16:51.132595Z","shell.execute_reply":"2023-09-16T23:16:51.143370Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"training resnet model","metadata":{}},{"cell_type":"code","source":"\ninput , output =res_net((28,28,1))\nresnet = Model(input , output)\nresnet.summary()\nresnet.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['categorical_accuracy'])\nm3= resnet.fit(x=X_train,y=y_train,epochs=100,batch_size= 128,validation_data=(x_val,y_val))","metadata":{"id":"n7bQTBzHN3aM","outputId":"fc403466-4374-42e7-e7c9-3b3c76ad05f6","execution":{"iopub.status.busy":"2023-09-16T23:19:26.979272Z","iopub.execute_input":"2023-09-16T23:19:26.979622Z","iopub.status.idle":"2023-09-16T23:54:53.566401Z","shell.execute_reply.started":"2023-09-16T23:19:26.979594Z","shell.execute_reply":"2023-09-16T23:54:53.565346Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(10,6))\nsb.set_style(\"whitegrid\")\nplt.plot(m3.history['categorical_accuracy'],color=\"Purple\",marker='o')\nplt.plot(m3.history['val_categorical_accuracy'],color='Orange',marker='h')\nplt.title('Loss comparison between Validation and Train Data set',fontsize=15)\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'val'], loc='best')\nplt.show()\nprint(resnet.evaluate(X_test,y_test))","metadata":{"id":"FAn2sWZcduDb","outputId":"95d8fb08-0ab2-426b-dcc4-73e668f5eeb8","execution":{"iopub.status.busy":"2023-09-16T23:59:50.932599Z","iopub.execute_input":"2023-09-16T23:59:50.932974Z","iopub.status.idle":"2023-09-16T23:59:56.542696Z","shell.execute_reply.started":"2023-09-16T23:59:50.932928Z","shell.execute_reply":"2023-09-16T23:59:56.541578Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nlenet_model.evaluate(X_test,y_test)\nresnet.evaluate(X_test,y_test)\n","metadata":{"id":"0B5hEkcul-5o","outputId":"a43b0d8a-366a-48a2-f445-fff0337f3e4d","execution":{"iopub.status.busy":"2023-09-17T00:11:56.888085Z","iopub.execute_input":"2023-09-17T00:11:56.888471Z","iopub.status.idle":"2023-09-17T00:12:00.925885Z","shell.execute_reply.started":"2023-09-17T00:11:56.888442Z","shell.execute_reply":"2023-09-17T00:12:00.924865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tf.keras.saving.save_model(\n    resnet, '/kaggle/working/resnet.keras'\n)","metadata":{"execution":{"iopub.status.busy":"2023-09-16T23:59:38.202485Z","iopub.execute_input":"2023-09-16T23:59:38.202862Z","iopub.status.idle":"2023-09-16T23:59:38.609838Z","shell.execute_reply.started":"2023-09-16T23:59:38.202828Z","shell.execute_reply":"2023-09-16T23:59:38.608846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"f = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")\ncompetition = f.to_numpy()\ncompetition = competition.reshape((competition.shape[0], 28,28)).astype('float32')\ncompetition = competition.astype('float32') / 255","metadata":{"execution":{"iopub.status.busy":"2023-09-16T23:55:32.057282Z","iopub.execute_input":"2023-09-16T23:55:32.057642Z","iopub.status.idle":"2023-09-16T23:55:34.001708Z","shell.execute_reply.started":"2023-09-16T23:55:32.057612Z","shell.execute_reply":"2023-09-16T23:55:34.000469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results = resnet.predict(competition)\n\n# select the indix with the maximum probability\nresults = np.argmax(results,axis = 1)\nresults = pd.Series(results,name=\"Label\")\nsubmission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),results],axis = 1)\n\nsubmission.to_csv(\"cnn_mnist_datagen.csv\",index=False)","metadata":{"execution":{"iopub.status.busy":"2023-09-16T23:56:07.746402Z","iopub.execute_input":"2023-09-16T23:56:07.746771Z","iopub.status.idle":"2023-09-16T23:56:18.584525Z","shell.execute_reply.started":"2023-09-16T23:56:07.746742Z","shell.execute_reply":"2023-09-16T23:56:18.583506Z"},"trusted":true},"execution_count":null,"outputs":[]}]}