{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom keras.utils import to_categorical\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout\nfrom keras.optimizers import Adam","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"class_names = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\"]\nbatch_size = 32\nnum_epochs = 30\n\n# Import data\ndata_train_file = \"../input/Kannada-MNIST/train.csv\"\ndata_test_file = \"../input/Kannada-MNIST/test.csv\"\ndf_train = pd.read_csv(data_train_file)\ndf_test = pd.read_csv(data_test_file)\n\n# Prep data\nX_train = df_train.drop(labels=[\"label\"], axis=1) / 255\nY_train = df_train[\"label\"]\nX_test = df_test.drop(labels=[\"id\"], axis=1) / 255\n\nY_train = to_categorical(Y_train)\n\nnum_classes = Y_train.shape[1]\n\nX_train = np.array(X_train).reshape(X_train.shape[0], 28, 28, 1)\nX_test = np.array(X_test).reshape(X_test.shape[0], 28, 28, 1)\nprint(X_train.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Show image of training data\nplt.figure(figsize=(10, 10))\nrand_indexes = np.random.randint(0, X_train.shape[0], 8) # select random indices\nfor index,im_index in enumerate(rand_indexes):\n    plt.subplot(4, 4, index + 1)\n    plt.imshow(X_train[im_index].reshape(28, 28), cmap='gray', interpolation='none')\n    plt.title('Class ' + str(int(class_names[np.argmax(Y_train[im_index])]) - 1))\nplt.tight_layout()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Build model\nmodel = Sequential()\nmodel.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', input_shape=(28, 28, 1)))\nmodel.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))\nmodel.add(MaxPooling2D((2, 2)))\nmodel.add(Dropout(.25))\nmodel.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))\nmodel.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))\nmodel.add(MaxPooling2D((2, 2)))\nmodel.add(Dropout(.25))\nmodel.add(Flatten())\nmodel.add(Dense(512, activation='relu', kernel_initializer='he_uniform'))\nmodel.add(Dropout(.5))\nmodel.add(Dense(num_classes, activation='softmax'))\n# Compile Model\nopt = Adam(lr=0.0001, beta_1=0.95, beta_2=0.99)\nmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Train Model\nmodel.fit(X_train, Y_train, epochs=num_epochs, batch_size=batch_size, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Save model predictions as submission\nsubmission = pd.DataFrame(range(0, df_test.shape[0]), columns=['id'])\nsubmission['label'] = model.predict_classes(X_test, batch_size=batch_size)\nsubmission.head(5000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"filename = 'submission.csv'\nsubmission.to_csv(filename, 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}