{"cells":[{"metadata":{"trusted":false},"cell_type":"code","source":"import time\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn.metrics import accuracy_score\nimport tensorflow as tf\nfrom tensorflow.keras import datasets, layers, models\nfrom keras.utils.np_utils import to_categorical","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 1. Get Data"},{"metadata":{"trusted":false},"cell_type":"code","source":"def get_data(data_set, label_column='label'):\n    # data_set:   pd DataFrame\n    data_X = data_set.drop(columns=label_column)\n    data_y = data_set[label_column]\n    return data_X, data_y","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# read data\ntrain_set = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ntest_set = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')\ndig_set = pd.read_csv('/kaggle/input/Kannada-MNIST/Dig-MNIST.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X_train, y_train = get_data(train_set, label_column='label')\nX_dig, y_dig = get_data(dig_set, label_column='label')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X_train.shape, y_train.shape, X_dig.shape, y_dig.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X_train = X_train.to_numpy().reshape(60000, 28, 28, 1)\ny_train = y_train.to_numpy().reshape(60000, 1)\nX_dig = X_dig.to_numpy().reshape(10240, 28, 28, 1)\ny_dig = y_dig.to_numpy().reshape(10240, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"test_set = test_set.drop(columns='id').to_numpy().reshape(5000, 28, 28, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_train_cat = to_categorical(y_train)\ny_dig_cat = to_categorical(y_dig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"class_names = np.arange(10)\n\nplt.figure(figsize=(10,10))\nfor i in range(25):\n    plt.subplot(5,5,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.grid(False)\n    plt.imshow(X_train[i,:,:,0], cmap='gray')\n    # y_train is in one-hot format\n    plt.xlabel(np.where(y_train_cat[i]==1)[0][0])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 2. Build Model"},{"metadata":{"trusted":false},"cell_type":"code","source":"# conv layers\nmodel = models.Sequential()\nmodel.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))\nmodel.add(layers.MaxPooling2D((2, 2)))\nmodel.add(layers.Conv2D(64, (3, 3), activation='relu'))\nmodel.add(layers.MaxPooling2D((2, 2)))\n\n# Fully connected layers\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(64, activation='relu'))\nmodel.add(layers.Dense(64, activation='relu'))\nmodel.add(layers.Dense(10, activation='softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"model.compile(optimizer='adam',\n              loss=['categorical_crossentropy'],\n              metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"history = model.compile(optimizer='adam',\n                        loss=['categorical_crossentropy'],\n                        metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"history = model.fit(X_train, y_train_cat, epochs=10, \n                    validation_data=(X_dig, y_dig_cat))","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"history.history","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"model.save('ccyy')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"plt.plot(history.history['acc'], label='accuracy')\nplt.plot(history.history['val_acc'], label = 'val_accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.legend(loc='lower right')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred = model.predict_classes(test_set)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred_pd = pd.DataFrame({'id': np.arange(len(y_pred)),\n                          'label': y_pred})\ny_pred_pd.to_csv('./y_pred.csv', sep=',', 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":4}