{"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)\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":{"trusted":true},"cell_type":"code","source":"from IPython.display import display, Image\nimport os\nimport PIL.Image\nimport cv2\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"dig_mnist = pd.read_csv(\"/kaggle/input/Kannada-MNIST/Dig-MNIST.csv\")\nprint(dig_mnist.shape)\ndig_mnist.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test = pd.read_csv(\"/kaggle/input/Kannada-MNIST/test.csv\")\nprint(test.shape)\ntest.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/Kannada-MNIST/train.csv\")\nprint(train.shape)\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss = pd.read_csv(\"/kaggle/input/Kannada-MNIST/sample_submission.csv\")\nprint(ss.shape)\nss.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Starting Plotting Loop"},{"metadata":{"trusted":true},"cell_type":"code","source":"lbl = train['label'].tolist()\nprint(lbl[:15])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.drop(['label'],axis=1,inplace=True)\ntr = train.as_matrix(columns=None)\nprint(tr.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(tr, lbl, test_size=0.20, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier \nfrom sklearn.metrics import accuracy_score\nclf = DecisionTreeClassifier()\nclf = clf.fit(X_train,y_train)\nprediction = clf.predict(X_test)\naccscore = accuracy_score(y_test,prediction)\nprint(accscore)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tr = tr.reshape((tr.shape[0],28,28))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%matplotlib inline\nn = np.random.randint(0,tr.shape[0])\nimage = tr[n]\nimgplot = plt.imshow(image,cmap=plt.get_cmap('gray'))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Image Augmentation Using Keras **"},{"metadata":{"trusted":true},"cell_type":"code","source":"from __future__ import print_function\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.utils import np_utils\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D\nfrom keras.optimizers import RMSprop\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"nb_classes=10\ny = np_utils.to_categorical(lbl, nb_classes).astype(np.float32)\nclass_totals = y.sum(axis=0)\nclass_weight = class_totals.max() / class_totals\ny.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X=tr.reshape(tr.shape[0],28,28,1)\nX.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# An observation code for our dataset\ndatagen_try = ImageDataGenerator(rotation_range=15,\n                             width_shift_range = 0.25,\n                             height_shift_range = 0.25,\n                             shear_range = 25,\n                             zoom_range = 0.4,)\n# fit parameters from data\ndatagen_try.fit(X)\n# configure batch size and retrieve one batch of images\nfor x_batch, y_batch in datagen_try.flow(X, y, batch_size=9):\n    # create a grid of 3x3 images\n    for i in range(0, 9):\n        plt.subplot(330 + 1 + i)\n        plt.imshow(x_batch[i].reshape(28, 28), cmap=plt.get_cmap('gray'))\n    # show the plot\n    plt.show()\n    break","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# construct the actual Python generator\nprint(\"[INFO] generating images...\")\ntotal = X.shape[0]\nprint(total,\"is total\")\nfinalX,finalY = [],[]\ni = 0\nfor x_batch, y_batch in datagen_try.flow(X, y, batch_size=1):\n    finalX.append(x_batch)\n    finalY.append(y_batch)\n    i+=1\n    if i==total:\n        break\n    if i%10000==0 and i>999:\n        print(i,\"/60000 done\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"finalX = np.array(finalX)\nfinalY = np.array(finalY)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"finalX = finalX.reshape((60000, 28, 28, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"finalY = finalY.reshape((60000, 10))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Deep Learning Part**"},{"metadata":{"trusted":true},"cell_type":"code","source":"# from __future__ import print_function\n# from keras.utils import np_utils\n# import keras\n# from keras.models import Sequential\n# from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D\n# from keras.optimizers import RMSprop\n# from keras.preprocessing.image import ImageDataGenerator\n# from keras.callbacks import ReduceLROnPlateau","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# nb_classes=10\n# y = np_utils.to_categorical(lbl, nb_classes).astype(np.float32)\n# class_totals = y.sum(axis=0)\n# class_weight = class_totals.max() / class_totals\n# y.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# X=tr.reshape(tr.shape[0],28,28,1)\n# X.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu', input_shape = X.shape[1:]))\nmodel.add(Conv2D(filters = 32, kernel_size = (4,4),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.3))\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(Dropout(0.3))\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(Dropout(0.3))\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation = \"softmax\"))\noptimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics=[\"accuracy\"])\nlearning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', \n                                            patience=3, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# validation_split = 0.01\n# model.fit(X, y, batch_size=1000, class_weight=class_weight, epochs=30, verbose=1, validation_split=validation_split)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"validation_split = 0.01\nmodel.fit(finalX, finalY, batch_size=1000, class_weight=class_weight, epochs=80, verbose=1, validation_split=validation_split)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"open('model.json', 'w').write(model.to_json())\nmodel.save_weights('weights.h5')\nprint(\"Model Saved\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%matplotlib inline\nfrom matplotlib import pyplot as plt\nplt.plot(model.model.history.history['loss'],'red')\nplt.plot(model.model.history.history['accuracy'],'blue')\nplt.plot(model.model.history.history['val_loss'],'yellow')\nplt.plot(model.model.history.history['val_accuracy'],'black')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(model.model.history.history)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.drop(['id'],axis=1,inplace=True)\nY = test.as_matrix(columns=None)\nY.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y=Y.reshape(test.shape[0],28,28,1)\nY.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predict = model.predict(Y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predict.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"results = np.argmax(predict,axis = 1)\nresults","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y=Y.reshape(test.shape[0],28,28)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, axs = plt.subplots(4, 4,figsize=(15,15))\n\nnum_ims = 4\na,b = 4,4\nfor j in range(a):\n    for k in range(b):\n        ids  = np.random.randint(0,5000)\n        prob = results[ids]\n        image = Y[ids] \n        axs[j,k].imshow(image)\n        axs[j,k].set_title(\"Predicted label :\"+str(prob))\n\n    \nplt.axis('off')\n\n\n# Hide x labels and tick labels for top plots and y ticks for right plots.\nfor ax in axs.flat:\n    ax.label_outer()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"n = ss.columns[1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss.drop(n,axis=1,inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss[n] = results","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ss.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}