{"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\n\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, Activation, MaxPooling2D\nfrom keras.optimizers import RMSprop\nfrom keras.callbacks import ReduceLROnPlateau\nfrom keras.utils import to_categorical\n\nfrom sklearn.model_selection import train_test_split\n\nfrom matplotlib import pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data = pd.read_csv(\"../input/train.csv\")\ny_data = data.pop('label')\ndata = data / 255.0\n\nx_test = pd.read_csv(\"../input/test.csv\")\nx_test = x_test / 255.0\n\n\ndata = data.values.reshape(-1,28,28)\nx_test = x_test.values.reshape(-1,28,28, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(15,10))\nfor i in range(9):\n    plt.subplot(3,3,i+1)\n    plt.xticks([])\n    plt.grid(False)\n    plt.imshow(data[i], cmap='binary')\n    plt.xlabel(y_data[i])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data = data.reshape(-1,28,28, 1)\ny_data = to_categorical(y_data, num_classes=None, dtype='float32')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train, X_test, Y_train, Y_test = train_test_split(data, y_data, test_size = 0.10, random_state = 37)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def BuildModel(Shape):\n    model = Sequential()\n\n    model.add(Conv2D(64, (5,5), padding='same', input_shape = Shape))\n    model.add(Activation('relu'))\n    model.add(Conv2D(64, (5,5), padding='same'))\n    model.add(Activation('relu'))\n    model.add(MaxPooling2D(2,2))\n    model.add(Dropout(0.2))\n    \n\n    model.add(Conv2D(128, (3,3), padding='same'))\n    model.add(Activation('relu'))    \n    model.add(Conv2D(128, (3,3), padding='same'))\n    model.add(Activation('relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))\n    model.add(Dropout(0.2))\n\n    \n    model.add(Flatten())\n    model.add(Dense(512))\n    model.add(Activation('relu'))\n    model.add(Dropout(0.5))\n\n    model.add(Dense(10, activation = 'softmax'))\n    \n    return model\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = BuildModel(X_train.shape[1:])\nmodel.summary()\noptimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)\nmodel.compile(loss='categorical_crossentropy',\n                optimizer=optimizer,\n                metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', patience=3, verbose=1,\n                                            factor=0.5, \n                                            min_lr=0.00001)\nhistory = model.fit(X_train, Y_train, epochs=40, validation_data=(X_test, Y_test),\n                    batch_size = 128, verbose=1, callbacks=[learning_rate_reduction])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Accuracy = {}%'.format((history.history['val_acc'][-1])*100))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, ax = plt.subplots()\nax.plot(history.history['acc'][1:], label=\"Training accuracy\")\nax.plot(history.history['val_acc'][1:], label=\"Validation accuracy\")\nax.legend()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test = model.predict(x_test)\n\n# select the indix with the maximum probability\ny_test = np.argmax(y_test,axis = 1)\n\ny_test = pd.Series(y_test,name=\"Label\")\n\nsubmission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),y_test],axis = 1)\n\nsubmission.to_csv(\"cnn_mnist.csv\",index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}