{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.preprocessing import MinMaxScaler\nfrom keras.layers import Conv2D, BatchNormalization, Activation, Dense, Flatten\nfrom keras.models import Sequential","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_df = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ntest_df = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')\nsample_df = pd.read_csv('/kaggle/input/Kannada-MNIST/sample_submission.csv')\nn_classes = train_df['label'].max()\nsample_df.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def one_hot_encode(array):\n    output_array = []\n    n_labels = max(array)\n    for value in array:\n        output_array.append(np.zeros(n_labels))\n        output_array[-1][value-1] = 1\n    return np.array(output_array)\n\ndef one_hot_decode(array):\n    return [np.argmax(one_hot_val) + 1 for one_hot_val in array]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = np.array(train_df['label'])\ny_train = one_hot_encode(y_train)\ntrain_df = train_df.drop(columns=['label'])\nids = test_df['id']\ntest_df = test_df.drop(columns=['id'])\nprint(train_df.shape)\nprint(test_df.shape)\n\nscaler = MinMaxScaler()\ntrain_df = scaler.fit_transform(train_df)\ntest_df = scaler.transform(test_df)\n\ntest_input = np.array(test_df).reshape((-1, 28, 28, 1))\ntrain_input = np.array(train_df).reshape((-1, 28, 28, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(64, (4,4), input_shape=train_input.shape[1:]))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\n\nmodel.add(Conv2D(128, (4,4), input_shape=train_input.shape[1:]))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\n\nmodel.add(Flatten())\nmodel.add(Dense(n_classes, activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit(x=train_input, y=y_train, epochs=50, batch_size=60, verbose=2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions = model.predict(test_input)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.DataFrame()\nsubmission['id'] = pd.Series(ids, name='id')\nsubmission['label'] = pd.Series(one_hot_decode(predictions), name='label')\ndisplay(submission)\nsubmission.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}