{"cells":[{"metadata":{},"cell_type":"markdown","source":"# **DigitRecognizer using CNN**"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom keras.models import Sequential\nfrom keras.optimizers import RMSprop\nfrom keras.utils.np_utils import to_categorical\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Read dataset**"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.read_csv('../input/digit-recognizer/train.csv')\ntrain_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = train_df.drop(labels = ['label'], axis = 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = train_df['label']\nsns.countplot(y_train)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Preprocess data**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = x_train.values.reshape(-1, 28, 28, 1)\nx_train = x_train / 255.0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = to_categorical(y_train, num_classes = 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(x_train[0][:,:,0])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Build a model**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu', input_shape = (28,28,1)))\nmodel.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.5))\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.5))\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation = \"softmax\"))\n\noptimizer = RMSprop(lr=0.01)\n\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics = [\"accuracy\"])\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Learn in a CNN**"},{"metadata":{"trusted":true},"cell_type":"code","source":"EPOCHS = 5\nBATCH_SIZE = 64\nmodel.fit(x_train, y_train, epochs = EPOCHS, batch_size = BATCH_SIZE)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Read dataset**"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = pd.read_csv('../input/digit-recognizer/test.csv')\ntest_df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Preprocess data**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test = test_df.values.reshape(-1, 28, 28, 1)\nx_test = x_test / 255.0","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Predict the answer**"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test = model.predict(x_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test = [np.argmax(y_test_) for y_test_ in y_test]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub = pd.DataFrame({'ImageId':[i + 1 for i in range(len(y_test))], 'Label':y_test})\nsub.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub.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":4}