{"cells":[{"metadata":{"id":"S4YUKh6JGeVm","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"from __future__ import absolute_import, division, print_function, unicode_literals\n\n# TensorFlow and tf.keras\nimport tensorflow as tf\nfrom tensorflow import keras\n\n# Helper libraries\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nget_ipython().run_line_magic('matplotlib', 'inline')\nsns.set_style(\"whitegrid\")\n\nimport pandas as pd\n\nfrom datetime import datetime\n\nfrom sklearn import metrics\nfrom sklearn.metrics import accuracy_score \nfrom sklearn.metrics import classification_report\nfrom sklearn.metrics import confusion_matrix\n\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import cross_val_predict\nfrom sklearn.model_selection import GridSearchCV, RandomizedSearchCV\n\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, MaxPool2D, Conv2D, Flatten, Dropout, BatchNormalization\nfrom keras.losses import categorical_crossentropy\nfrom keras.utils import to_categorical\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau","execution_count":null,"outputs":[]},{"metadata":{"id":"Zm9QaN18OFHy","colab_type":"code","outputId":"79c9da9c-1c24-4dc7-bd4e-9d442f232168","colab":{"resources":{"http://localhost:8080/nbextensions/google.colab/files.js":{"data":"Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=","ok":true,"headers":[["content-type","application/javascript"]],"status":200,"status_text":""}},"base_uri":"https://localhost:8080/","height":298},"trusted":true},"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ntest = pd.read_csv(\"/kaggle/input/Kannada-MNIST/test.csv\")\nvalidation = pd.read_csv(\"/kaggle/input/Kannada-MNIST/Dig-MNIST.csv\")\nsample = pd.read_csv(\"/kaggle/input/Kannada-MNIST/sample_submission.csv\")","execution_count":null,"outputs":[]},{"metadata":{"id":"WnTaLIqWwhds","colab_type":"code","colab":{}},"cell_type":"markdown","source":"!ls"},{"metadata":{"id":"mDu4K5E2NDc6","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":253},"outputId":"7f164c4e-91a6-4efa-a3cd-902d62b6e740","trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"oQecQys8GeVs","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"5a66d385-57fb-462f-fb3e-bb68fbf7c86c","trusted":true},"cell_type":"code","source":"print('train:{}'.format(train.shape))\nprint('test:{}'.format(test.shape))\nprint('Dig_MNIST:{}'.format(validation.shape))\n\n","execution_count":null,"outputs":[]},{"metadata":{"id":"lwg-V4-KGeVz","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":312},"outputId":"77d2cac0-a7a2-4c25-b5bc-0cb9f63a8c1d","trusted":true},"cell_type":"code","source":"sns.countplot(train[\"label\"])\nplt.title(\"Distribution of Digit Samples in the Training Set\")","execution_count":null,"outputs":[]},{"metadata":{"id":"rQlzSPQeispW","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":253},"outputId":"cec3af44-9cc3-44a2-f7c8-2c17f243e4b8","trusted":true},"cell_type":"code","source":"validation.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"Ugu_vt47iwWk","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":312},"outputId":"168a0604-7d89-441e-ed2f-d6b7aeb5474c","trusted":true},"cell_type":"code","source":"sns.countplot(validation[\"label\"])\nplt.title(\"Distribution of Digit Samples in Validation Set\")","execution_count":null,"outputs":[]},{"metadata":{"id":"KOULVWFBj8yF","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":253},"outputId":"79b31f6c-9d00-442b-f71e-15ec7977e3b1","trusted":true},"cell_type":"code","source":"test.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"Ve-c012JPuyW","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#Spliting off labels/Ids\nY_train = to_categorical(train.iloc[:,0])\nX_train = train.iloc[:, 1:].values\n\nX_valid = validation.iloc[:, 1:].values\ny_valid = to_categorical(validation.iloc[:,0])\n\nY_test = to_categorical(test.iloc[:, 0])\nX_test = test.iloc[:, 1:].values\n","execution_count":null,"outputs":[]},{"metadata":{"id":"xHSsGuJtP-AA","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#Normalizing the data\nX_train = X_train/255\nX_valid = X_valid/255\n\nX_test = X_test/255","execution_count":null,"outputs":[]},{"metadata":{"id":"zR84fDN1QHOd","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#Reshaping data\nX_train = X_train.reshape(X_train.shape[0], 28, 28, 1)\n\nX_valid = X_valid.reshape(X_valid.shape[0], 28, 28, 1)\n\nX_test = X_test.reshape(test.shape[0], 28, 28, 1)","execution_count":null,"outputs":[]},{"metadata":{"id":"Uv3RgiIYQPhn","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":51},"outputId":"eb6b33e2-bd44-404d-f44b-5a86ce25c064","trusted":true},"cell_type":"code","source":"print(X_train.shape)\nprint(Y_train.shape)","execution_count":null,"outputs":[]},{"metadata":{"id":"goKzZC_jkmN8","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":411},"outputId":"78d2d2dc-ab8e-44b9-ce41-9b899d7ca224","trusted":true},"cell_type":"code","source":"#Visualizing The training data\nfig, ax = plt.subplots(5, 10)\nfor i in range(5):\n    for j in range(10):\n        ax[i][j].imshow(X_train[np.random.randint(0, X_train.shape[0]), :, :, 0], cmap = plt.cm.binary)\n        ax[i][j].axis(\"off\")\nplt.subplots_adjust(wspace=0, hspace=0)\nfig.set_figwidth(15)\nfig.set_figheight(7)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"id":"vbCaMjedQ9Jf","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#Augmenting data\ntrain_datagen = ImageDataGenerator(\n    rotation_range=12,\n    width_shift_range=0.25,\n    height_shift_range=0.25,\n    shear_range=12,\n    zoom_range=0.25\n)\n\nvalid_datagen = ImageDataGenerator(    \n    rotation_range=12,\n    width_shift_range=0.25,\n    height_shift_range=0.25,\n    shear_range=12,\n    zoom_range=0.25)\n\nvalid_datagen_simple = ImageDataGenerator()","execution_count":null,"outputs":[]},{"metadata":{"id":"Os6o_0FjRLCw","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"id":"pV7_yU61RSUB","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"id":"N3l90lW9azm0","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#X_train, x_valid_new, Y_train, y_valid_new = train_test_split(X_train, Y_train, test_size = 0.20, random_state=84)","execution_count":null,"outputs":[]},{"metadata":{"id":"ZUwvwGSOGeWL","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":527},"outputId":"bd6c671c-74ec-4090-c875-13a18ad09e50","trusted":true},"cell_type":"code","source":"#Build The Model\nmodel = keras.Sequential([\n    keras.layers.Conv2D(64, kernel_size=3, activation='relu', input_shape=(28,28,1)),\n    keras.layers.BatchNormalization(),\n    keras.layers.Conv2D(32, kernel_size=5, activation='relu'),\n    keras.layers.MaxPooling2D(pool_size=(2, 2)),\n    keras.layers.Dropout(0.25),\n    \n  \n    \n    keras.layers.Conv2D(128, kernel_size=3, activation='relu'),\n    keras.layers.BatchNormalization(),\n    keras.layers.Conv2D(128, kernel_size=3, activation='relu'),\n    keras.layers.BatchNormalization(),\n   # keras.layers.MaxPooling2D(pool_size=(3, 3)),\n    #keras.layers.BatchNormalization(),\n    keras.layers.Dropout(0.5),\n    \n    keras.layers.Conv2D(256, kernel_size=3, activation='relu'),\n    keras.layers.BatchNormalization(),\n    keras.layers.Conv2D(512, kernel_size=3, activation='relu'),\n    keras.layers.BatchNormalization(),\n    #keras.layers.MaxPooling2D(pool_size=(2, 2)),\n   \n    keras.layers.BatchNormalization(),\n    keras.layers.Dropout(0.5),\n    \n       \n    keras.layers.Conv2D(1024, kernel_size = 3, strides=2, padding='same', activation='relu'),\n    keras.layers.BatchNormalization(),\n    keras.layers.MaxPooling2D(pool_size=(2, 2)),\n    keras.layers.Dropout(0.5),\n    keras.layers.Flatten(),\n    keras.layers.Dense(128, activation='relu'),\n    keras.layers.Dense(256, activation='relu'),\n    keras.layers.BatchNormalization(),\n   \n    keras.layers.Dense(1024,activation='relu'),\n    keras.layers.BatchNormalization(),\n    keras.layers.Dropout(0.2),\n    \n    keras.layers.Dense(10, activation='softmax')\n])\n# Take a look at the model summary\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"id":"rrTsoWaIGeWP","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#Compile The Model\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"id":"rfqLx93TGeWS","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":717},"outputId":"1a3aa63d-720e-4ca6-cde0-5b09286f8a35","trusted":true},"cell_type":"code","source":"#Train the Model\nhistory = model.fit_generator(train_datagen.flow(X_train, Y_train, batch_size = 1800),\n                   epochs=70,validation_data = (valid_datagen.flow(X_valid, y_valid, batch_size = 30)),\n                   verbose=1\n                    )","execution_count":null,"outputs":[]},{"metadata":{"id":"Roa7vCKaRjBZ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":136},"outputId":"a46a0722-d060-496f-97b4-9656c316617c","trusted":true},"cell_type":"code","source":"#test_loss,\nvalid_loss,valid_acc = model.evaluate(X_valid,  y_valid, verbose=0)\nprint('Validation Accuracy: %.2f' %(valid_acc*100))\nprint('\\n Validation Loss: %.2f' % (valid_loss))\ntrain_loss, train_acc = model.evaluate(X_train,  Y_train, verbose = 1)\nprint('\\nTraining accuracy: %.2f\\n ' %(train_acc*100))","execution_count":null,"outputs":[]},{"metadata":{"id":"f77ZsUevR3nX","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":573},"outputId":"dabbe146-fcae-4cf8-cc65-05212721e5bd","trusted":true},"cell_type":"code","source":"plt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper right')\nplt.axis([0.0,70,0.60,1.00])\nplt.show()\n# summarize history for loss\nplt.plot(history.history['loss'])\nplt.plot(history.history['val_loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper right')\nplt.axis([0.0,70,0.0,2.0])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# obtain one batch of test images\ndataiter = iter(validation)\nimages, labels = dataiter.next()\n\n# get sample outputs\noutput = model(images)\n# convert output probabilities to predicted class\n_, preds = torch.max(output, 1)\n# prep images for display\nimages = images.numpy()\n\n# plot the images in the batch, along with predicted and true labels\nfig = plt.figure(figsize=(25, 4))\nfor idx in np.arange(20):\n    ax = fig.add_subplot(2, 20/2, idx+1, xticks=[], yticks=[])\n    ax.imshow(np.squeeze(images[idx]), cmap='gray')\n    ax.set_title(\"{} ({})\".format(str(preds[idx].item()), str(labels[idx].item())),\n                 color=(\"green\" if preds[idx]==labels[idx] else \"red\"))"},{"metadata":{"id":"K5u6ZfxFv8Gv","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"label_hot = model.predict(X_test)\nlabel = np.argmax(label_hot,1)\nid_ = np.arange(0,label.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"id":"0-O8reLXxRfV","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"sample = pd.read_csv('../input/Kannada-MNIST/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"id":"YRTYK8cGxaUq","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":204},"outputId":"7126b95a-2d86-4b7a-fed6-74000d0f7f0a","trusted":true},"cell_type":"code","source":"sample.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"veiYlHTTxcA9","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":204},"outputId":"2a04a374-ad34-4d60-c170-88b03a8c87a0","trusted":true},"cell_type":"code","source":"submit = pd.DataFrame({'id':id_,'label':label})\nprint(submit.head(10))\nsubmit.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"id":"rNKNjDb0xy-H","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.3"},"colab":{"name":"KannadaMNIST_v1.ipynb","provenance":[],"collapsed_sections":[]},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":1}