{"metadata":{"language_info":{"file_extension":".py","mimetype":"text/x-python","pygments_lexer":"ipython3","version":"3.6.4","name":"python","codemirror_mode":{"version":3,"name":"ipython"},"nbconvert_exporter":"python"},"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"}},"cells":[{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"_uuid":"ad75bb885a771adc971128a205c772aafa2a4e74","_cell_guid":"f7dd4e27-719d-4dff-9d96-776fa79e1517"},"source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\nfrom keras.models import Sequential, load_model\nfrom keras.layers import Dense, Flatten, Activation, Dropout\nfrom keras.layers.convolutional import Conv2D, MaxPooling2D\nfrom keras.utils import np_utils\nfrom keras.optimizers import SGD"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{},"source":"train_df = pd.read_csv('../input/train.csv')"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{},"source":"y_train = np_utils.to_categorical(train_df['label'], 10)\nX_train = train_df.drop('label', axis=1).values.reshape(-1, 28, 28)"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{},"source":"plt.figure(2, figsize = (14, 5))\nplt.set_cmap('binary')\nfor i in range(75):\n    plt.subplot(5, 15, i + 1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(X_train[i])\nplt.show()"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{},"source":"model = Sequential()\n\nmodel.add(Conv2D(64, (5, 5), padding='same', input_shape=(28, 28, 1), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2))) #14x14\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(128, (5, 5), padding='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2))) #7x7\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(0.5))\n\nmodel.add(Dense(10, activation='softmax'))"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"# optimization setup\nmodel.compile(\n    loss='categorical_crossentropy',\n    optimizer='adam',\n    metrics=['accuracy'])"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{},"source":"# training\nhistory = model.fit(\n    X_train.reshape(-1,28,28,1),\n    y_train,\n    batch_size=32,\n    epochs=30,\n    validation_split=0.2,\n    shuffle=True,\n    verbose=1)"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"plt.plot(history.history['acc'])\nplt.plot(history.history['val_acc'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper left')\nplt.show()"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"test_df = pd.read_csv('../input/test.csv')"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"X_test = test_df.values.reshape(-1, 28, 28, 1)\nX_test.shape"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"predicts = pd.DataFrame(model.predict(X_test)).idxmax(axis=1)"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"plt.figure(2, figsize = (14, 12))\nplt.set_cmap('binary')\nfor i in range(150):\n    ax = plt.subplot(10, 15, i + 1)\n    ax.title.set_text(predicts.values[i])\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(X_train[i])\nplt.show()"},{"execution_count":null,"outputs":[],"cell_type":"code","metadata":{"collapsed":true},"source":"submission = pd.DataFrame({\n    'ImageId': np.arange(1, X_test.shape[0]+1), \n    'Label': predicts.idxmax(axis=1)})\nsubmission.to_csv('submission.csv', index=False)"}],"nbformat":4,"nbformat_minor":1}