{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"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 in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.model_selection import train_test_split\n\n# Input data files are available in the \"../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# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_dataset=pd.read_csv('../input/Kannada-MNIST/train.csv')\ntest_dataset=pd.read_csv('../input/Kannada-MNIST/test.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Find out the dataset shape"},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"Train Dataset\",train_dataset.shape)\nprint(\"Test Dataset\", test_dataset.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dataset.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_dataset.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x = train_dataset.iloc[:, 1:].values.astype('float32') / 255\ny = train_dataset.iloc[:, 0] # labels","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train, X_test, Y_train, Y_test = \\\ntrain_test_split(x, y, test_size = 0.05, random_state=1234) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train=X_train.reshape(-1,28,28,1)\nX_test= X_test.reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"X_train_shape \", X_train.shape)\nprint(\"X_test_shape \", X_test.shape)\nprint(\"Y_train_shape \", Y_train.shape)\nprint(\"Y_test_shape \", Y_test.shape)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Visualization"},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(X_train[i][:,:,0])\nprint(\"Y_train \", Y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"w_grd = 15\nL_grd =15\n\nfig , axes = plt.subplots(L_grd, w_grd, figsize = (25, 25))\naxes = axes.ravel()\n\nn_train = len(X_train)\n\nfor i in np.arange(0, L_grd * w_grd):\n    index = np.random.randint(0, n_train)\n    axes[i].imshow(X_train[index][:,:,0])\n    axes[i].axis('off')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Data Preparation"},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train.astype('float32')\nX_test = X_test.astype('float32')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras\nY_train = keras.utils.to_categorical(Y_train)\nY_test = keras.utils.to_categorical(Y_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#X_train = X_train /255\n#X_test = X_test /255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Input_shape = X_train.shape[1:]\nInput_shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Train the model"},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, Dense, Flatten, Dropout\nfrom keras.optimizers import Adam\nfrom keras.callbacks import TensorBoard","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cnn_model = Sequential()\ncnn_model.add(Conv2D(filters = 32, kernel_size = (5,5),\n                     activation = 'relu', input_shape= Input_shape))\ncnn_model.add(Conv2D(filters = 32, kernel_size = (5,5),\n                     activation = 'relu'))\ncnn_model.add(MaxPooling2D(2, 2))\ncnn_model.add(Dropout(0.3))\n\n\n#Another CNN with 64 , 64\ncnn_model.add(Conv2D(filters = 64, kernel_size = (5,5),\n                     activation = 'relu'))\ncnn_model.add(Conv2D(filters = 64, kernel_size = (5,5),\n                     activation = 'relu'))\ncnn_model.add(MaxPooling2D(2, 2))\ncnn_model.add(Dropout(0.2))\n\n#Flatten\ncnn_model.add(Flatten())\n\n#Dense\ncnn_model.add(Dense(units = 256, activation = 'relu'))\ncnn_model.add(Dense(units = 256, activation = 'relu'))\n\ncnn_model.add(Dense(units = 10, activation = 'softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cnn_model.compile(loss = 'categorical_crossentropy', optimizer= keras.optimizers.rmsprop(lr = 0.001), metrics = ['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = cnn_model.fit(X_train, Y_train, batch_size= 64, epochs= 2, shuffle=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"evalution = cnn_model.evaluate(X_test, Y_test)\nprint(\"Accuracy \", evalution[1])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predicted_classes = cnn_model.predict_classes(X_test)\npredicted_classes\n#Y_test = Y_test.argmax(1)\nY_test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_pre_test=cnn_model.predict(X_test)\ny_pre_test=np.argmax(y_pre_test,axis=1)\nY_test=np.argmax(Y_test,axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import confusion_matrix\n\ncm = confusion_matrix(Y_test, y_pre_test)\nplt.figure(figsize = (10, 10))\nsns.heatmap(cm, annot= True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"#test_id = test_dataset.id\n\n#test_dataset = test_dataset.drop('id',axis=1)\n#test_dataset = test_dataset/255\n#test_dataset = test_dataset.values.reshape(-1,28,28,1)\ntest_dataset=pd.read_csv('../input/Kannada-MNIST/test.csv')\nraw_test_id=test_dataset.id\ntest_dataset=test_dataset.drop(\"id\",axis=\"columns\")\ntest_dataset=test_dataset / 255\ntest=test_dataset.values.reshape(-1,28,28,1)\ntest.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_prediction = cnn_model.predict(test)    \nY_prediction = np.argmax(Y_prediction,axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ntest_dataset['label'] = Y_prediction\ntest_dataset.to_csv('submission.csv',index=False)","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}