{"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 tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras.callbacks import ModelCheckpoint\nimport numpy as np\n\ntrain_data = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest_data = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-14T02:53:44.459564Z","iopub.execute_input":"2022-07-14T02:53:44.459910Z","iopub.status.idle":"2022-07-14T02:53:49.361217Z","shell.execute_reply.started":"2022-07-14T02:53:44.459878Z","shell.execute_reply":"2022-07-14T02:53:49.360224Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Loader adopted from this notebook. \nThanks to @shalaby97\nhttps://www.kaggle.com/code/shalaby97/mnist-digits-classification-using-cnn-99","metadata":{}},{"cell_type":"code","source":"# split labels from training data\ntrain_label = train_data['label']\ntrain_data.drop('label', axis = 1, inplace = True)\ntrain_label = np.array(tf.keras.utils.to_categorical(train_label, 10))\ntrain_data = np.array(train_data).reshape(-1,28,28,1)\ntrain_data = train_data / 255","metadata":{"execution":{"iopub.status.busy":"2022-07-14T02:53:51.235154Z","iopub.execute_input":"2022-07-14T02:53:51.235743Z","iopub.status.idle":"2022-07-14T02:53:51.515753Z","shell.execute_reply.started":"2022-07-14T02:53:51.235706Z","shell.execute_reply":"2022-07-14T02:53:51.514781Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"g_inputs = keras.Input(shape = (28, 28, 1))\noutputs = keras.layers.Conv2D(filters = 256, kernel_size = 7, strides = 1, activation =\"relu\")(g_inputs)\noutputs = keras.layers.LayerNormalization()(outputs)\noutputs = keras.layers.Conv2D(filters = 32, kernel_size = 1, activation = 'relu')(outputs)\noutputs = keras.layers.LayerNormalization()(outputs)\noutputs = keras.layers.Conv2D(filters = 64, kernel_size = 3, activation = 'relu')(outputs)\noutputs = keras.layers.Conv2D(filters = 16, kernel_size = 1, activation = 'relu')(outputs)\noutputs = keras.layers.Conv2D(filters = 64, kernel_size = 3, activation = 'relu')(outputs)\noutputs = keras.layers.BatchNormalization()(outputs)\noutputs = keras.layers.MaxPooling2D()(outputs)\noutputs = keras.layers.Conv2D(filters = 128, kernel_size = 3, activation = 'relu')(outputs)\noutputs = keras.layers.Conv2D(filters = 32, kernel_size = 1, activation = 'relu')(outputs)\noutputs = keras.layers.Conv2D(filters = 128, kernel_size = 3, activation = 'relu')(outputs)\noutputs = keras.layers.BatchNormalization()(outputs)\noutputs = keras.layers.GlobalAveragePooling2D()(outputs)\noutputs = keras.layers.Dense(10, activation = 'softmax')(outputs)\n\nmodel = keras.Model(inputs=g_inputs, outputs=outputs)\n\nmodel.summary()\n\nmodel.compile(\n    optimizer=tf.keras.optimizers.SGD(9e-2, momentum=.9, nesterov= True),\n    loss=tf.keras.losses.CategoricalCrossentropy(),\n    metrics=['accuracy']\n)\n","metadata":{"execution":{"iopub.status.busy":"2022-07-14T02:54:48.890018Z","iopub.execute_input":"2022-07-14T02:54:48.890704Z","iopub.status.idle":"2022-07-14T02:54:49.034115Z","shell.execute_reply.started":"2022-07-14T02:54:48.890664Z","shell.execute_reply":"2022-07-14T02:54:49.033174Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(train_data, train_label, epochs=60,\n          batch_size = 2048, shuffle =True\n)","metadata":{"execution":{"iopub.status.busy":"2022-07-14T02:56:29.067589Z","iopub.execute_input":"2022-07-14T02:56:29.068176Z","iopub.status.idle":"2022-07-14T02:56:56.898208Z","shell.execute_reply.started":"2022-07-14T02:56:29.068138Z","shell.execute_reply":"2022-07-14T02:56:56.896792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = np.array(test_data).reshape(-1,28,28,1)\nres = model.predict(test_data/255)\npredicted = res.argmax(axis=1)\noutput = pd.DataFrame({'ImageId':range(1,test_data.shape[0]+1),'Label': predicted})\noutput.to_csv('my_submission.csv',index = False)\nprint(\"Your submission was successfully saved!\")","metadata":{},"execution_count":null,"outputs":[]}]}