{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"execution":{"iopub.status.busy":"2023-01-05T09:55:41.855517Z","iopub.execute_input":"2023-01-05T09:55:41.856183Z","iopub.status.idle":"2023-01-05T09:55:41.887363Z","shell.execute_reply.started":"2023-01-05T09:55:41.855902Z","shell.execute_reply":"2023-01-05T09:55:41.886339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nfrom tensorflow import keras","metadata":{"execution":{"iopub.status.busy":"2023-01-05T09:55:43.404908Z","iopub.execute_input":"2023-01-05T09:55:43.405899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/Kannada-MNIST/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/Kannada-MNIST/Dig-MNIST.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train_set = train.iloc[:, 1:].to_numpy()\ny_train_set = train.iloc[:, 0].to_numpy()\n\nx_test = test.iloc[:, 1:].to_numpy()\ny_test = test.iloc[:, 0].to_numpy()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train_set.shape, y_train_set.shape, x_test.shape, y_test.shape ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"i = 0\nprint(y_train_set[i])\nplt.imshow(x_train_set[i].reshape(28, 28), cmap = 'gray')\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nx_train, x_valid, y_train, y_valid = train_test_split(\n x_train_set, y_train_set, random_state = 1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train = x_train/255\nx_train = x_train.astype(\"float32\")\n\nx_test = x_test/255\nx_test = x_test.astype(\"float32\")\n\nx_train = x_train.reshape(-1, 28, 28, 1)\nx_valid = x_valid.reshape(-1, 28, 28, 1)\nx_test = x_test.reshape(-1, 28, 28, 1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Dropout, Flatten\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n\ntf.keras.backend.clear_session()\nnp.random.seed(1)\ntf.random.set_seed(1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau\nfrom tensorflow.keras.layers import Dropout\n\n# instantiate ImageDataGenerator object\ntrain_datagen = ImageDataGenerator(rotation_range = 20, width_shift_range = 0.2, height_shift_range = 0.2,\n                                shear_range = 0.2, fill_mode = \"nearest\", zoom_range = 0.2,)\n\n# instantiate checkpoint objects\nes = EarlyStopping(monitor = 'val_loss', patience = 5, restore_best_weights = True, verbose = 0)\n\nreduce_lr = ReduceLROnPlateau(patience = 2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential([\n    Conv2D(filters = 30, kernel_size = (4,4), strides = (1,1), padding = 'valid',\n          activation = 'relu', input_shape = (28, 28, 1)),\n    Dropout(rate = 0.25),\n    MaxPooling2D(pool_size = (2,2), padding = 'valid'),\n    Conv2D(filters = 60, kernel_size = 3, strides = 2, padding = 'same',\n          activation = 'relu'),\n    Dropout(rate = 0.25),\n    AveragePooling2D(pool_size = 2, padding = 'same'),\n    Flatten(),\n    Dropout(rate = 0.25),\n    Dense(1024, activation = 'relu'),\n    Dropout(rate = 0.25),\n    Dense(10, activation = 'softmax')\n])    ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss = 'sparse_categorical_crossentropy', \n              optimizer = 'adam',\n              metrics = ['accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = model.fit(train_datagen.flow(x_train, y_train), epochs = 1000, \n                  batch_size = 32, validation_data = (x_valid, y_valid), \n                  callbacks = [es, reduce_lr])","metadata":{"execution":{"iopub.status.busy":"2023-01-05T09:34:23.685885Z","iopub.execute_input":"2023-01-05T09:34:23.686299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(x_test, y_test)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submit = pd.read_csv(\"/kaggle/input/Kannada-MNIST/sample_submission.csv\")\nreal_test = pd.read_csv(\"/kaggle/input/Kannada-MNIST/test.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"real_test = real_test.iloc[:, 1:].to_numpy()\nreal_test = real_test/255\nreal_test = real_test.astype(\"float32\")\nreal_test = real_test.reshape(-1, 28, 28, 1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = model.predict(real_test)\n\npredictions = predictions.argmax(axis = 1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submit[\"label\"] = predictions\nsample_submit.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submit.to_csv(\"submission.csv\", index = False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}