{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Kannada MNIST using CNN Tensorflow 2.0\n\n### A simple CNN implementation for Kannada MNIST dataset classification\n\nauthor : anand_s_m"},{"metadata":{"trusted":true},"cell_type":"code","source":"#Imports\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom tensorflow.keras.utils import to_categorical\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Lets load the data\ndf_train = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ndf_test = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')\n#Info on dataframe\ndf_train.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Lets visualize the class and checking for class imbalance\nnum = df_train.label.value_counts()\nsns.barplot(num.index,num)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Seperating all the features and target for training data\ntrain_data = df_train.iloc[:,1:]\ntrain_label = df_train.iloc[:,0]\nprint(f\"train_data shape :{train_data.shape}\")\nprint(f\"train_label shape :{train_label.shape}\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Normalize\nX = train_data.values / 255.0\nX_test = df_test.iloc[:,1:].values / 255.0\ny = train_label","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Lets take a look at few samples\nplt.imshow(X[2].reshape(28,28))\nplt.show()   \nprint(f\"label : {y[2]}\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#data splitting with 90% on the train set and 10% on validation set\nX_train,X_val,y_train,y_val = train_test_split(X,y,test_size = 0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#input reshape\ninput_shape = (-1,28,28,1)\nX_train = X_train.reshape(input_shape)\nX_val = X_val.reshape(input_shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Now let us encode our labels\ny_train = to_categorical(y_train)\ny_val = to_categorical(y_val)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Now we have categoricaly encoded our labels\nprint(y_train.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Building the CNN model\nmodel = tf.keras.models.Sequential()\nmodel.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',\n                                input_shape = (28,28,1)))\nmodel.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu'))\nmodel.add(tf.keras.layers.Dropout(0.2))\nmodel.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))\nmodel.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu'))\nmodel.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu'))\nmodel.add(tf.keras.layers.Dropout(0.25))\nmodel.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))\nmodel.add(tf.keras.layers.Flatten())\nmodel.add(tf.keras.layers.Dense(128,activation='relu'))\nmodel.add(tf.keras.layers.Dropout(0.25))\nmodel.add(tf.keras.layers.Dense(256,activation='relu'))\nmodel.add(tf.keras.layers.Dropout(0.25))\nmodel.add(tf.keras.layers.Dense(10,activation='softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"optimzer = tf.keras.optimizers.Adam(learning_rate=0.01)\nmodel.compile(optimizer='Adam',\n             loss='categorical_crossentropy',\n             metrics=['acc'])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"epochs = 10\nbatch_size = 128\nhist = model.fit(X_train,y_train,\n                validation_data=(X_val,y_val),\n                epochs=epochs,\n                batch_size=batch_size).history","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#lets just evaluate the model\nmodel.evaluate(X_val,y_val)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = X_test.reshape(-1,28,28,1)\nresult = model.predict_classes(X_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"_id = [i for i in range(0,X_test.shape[0])]\nsub_df = pd.DataFrame({'id':_id,'label':result})\nsub_df.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":1}