{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd\nimport keras\nimport matplotlib.pyplot as plt\nfrom sklearn.preprocessing import MinMaxScaler\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D\nfrom keras.models import Sequential\nfrom keras import optimizers","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\ntest = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')\n\nvalid_part = 10\ntest_id = test.id\ntest = test.drop('id', axis=1)\ny_train = train.label\nx_train = train.drop('label', axis=1)\n\ntrain_size = int(x_train.shape[0] / valid_part * (valid_part - 1))\nx_valid, y_valid = x_train[train_size:], y_train[train_size:]\nx_train, y_train = x_train[:train_size], y_train[:train_size]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"scaler = MinMaxScaler(feature_range=(-1, 1))\n\nrows, cols = 28, 28\nx_train = x_train.astype('float32')\ntest = test.astype('float32')\n\nscaler.fit(x_train)\nx_train = scaler.transform(x_train)\nx_valid = scaler.transform(x_valid)\ntest = scaler.transform(test)\nprint(x_train.min(), x_train.max())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = x_train.reshape(x_train.shape[0], rows, cols)\nfor i in range(10):\n    plt.subplot(1, 10, i+1)\n    plt.title(y_train[i])\n    plt.imshow(x_train[i], cmap='gray')\n    plt.axis('Off')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = x_train.reshape(x_train.shape[0], rows, cols, 1)\ntest = test.reshape(test.shape[0], rows, cols, 1)\nx_valid = x_valid.reshape(x_valid.shape[0], rows, cols, 1)\n\ny_train = keras.utils.to_categorical(y_train, 10)\ny_valid = keras.utils.to_categorical(y_valid, 10)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"epochs = 12\nbatch_size = 64\n\nmodel = Sequential()\nmodel.add(Conv2D(32, kernel_size=(3, 3),\n                 activation='relu',\n                 input_shape=(rows, cols, 1)))\nmodel.add(Conv2D(32, (3, 3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation='softmax'))\n\nmodel.compile(loss='categorical_crossentropy',\n              optimizer='sgd',\n              metrics=['accuracy'])\n\nhistory_callback = model.fit(x_train, y_train,\n          batch_size=batch_size,\n          epochs=epochs,\n          verbose=0,\n          validation_data=(x_valid, y_valid))\nloss_history = history_callback.history[\"loss\"]\nnp_loss_history = np.array(loss_history)\nnp.savetxt(\"loss_history.csv\", np_loss_history, delimiter=\",\")\nlabel = model.predict(test)\nlabel = np.argmax(label, axis=1)\ndf = pd.DataFrame({'id': test_id, 'label': label})\ndf.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.8"}},"nbformat":4,"nbformat_minor":1}