{"cells":[{"metadata":{"_uuid":"d46ed23ce25e3f663858e5fc38b6fa9970a03fa8","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport os","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e3e33ce183cb9700e787c2c9deebf79a912a92b8"},"cell_type":"code","source":"os.listdir('../input')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e0d7c8020fd99ef5db922211649e3fd9aa5a0fda","trusted":true},"cell_type":"code","source":"data = pd.read_csv('../input/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"706fbd148bc0430ac6d296b3591cf6239d8d9d23","trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import normalize","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6882e034b36df6d80cc64713eb04396096cafac7","trusted":true},"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(normalize(data.values[:, 1:]), data.values[:, 0],\n                                                   test_size=0.33, shuffle=True, random_state=42)\nX_test, X_valid, y_test, y_valid = train_test_split(X_test, y_test, test_size=0.5, shuffle=True, random_state=137)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9134423a02339efa0819d4bfe39066a3393a71d7","trusted":true},"cell_type":"code","source":"X_train.shape, y_train.shape, X_test.shape, y_test.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ee7da47ce6899cd44200fb836594361a22f017ab","trusted":true},"cell_type":"code","source":"test = pd.read_csv('../input/test.csv')\ntest.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b31b0a3dd5be45c0d0de6fa19d2954a43a3f2e66","trusted":true},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Dense, Activation, Conv2D, MaxPool2D, Dropout, Flatten, BatchNormalization, AvgPool2D\nfrom keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cd2323da6a7dadb85092ce5ba000f23de82aae79"},"cell_type":"code","source":"datagen = ImageDataGenerator(height_shift_range=5, rotation_range=10, width_shift_range=5, zoom_range=0.1)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f877153f44d6400d6bca971156e78a9ca494878","trusted":true},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(32, kernel_size=(2, 2), activation='relu', input_shape=(28, 28, 1)))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(64, kernel_size=(2, 2), padding='same', activation='relu'))\nmodel.add(AvgPool2D())\nmodel.add(Dropout(0.5))\n\n\nmodel.add(Conv2D(64, kernel_size=(3, 3), activation='relu', padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))\nmodel.add(AvgPool2D())\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(0.33))\nmodel.add(Dense(10, activation='softmax'))\n\nmodel.compile(optimizer='adam',\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"fd7122e18ae3edc9264c2488178588c0250e59d0","trusted":true},"cell_type":"code","source":"from keras.utils import to_categorical\nfrom keras.callbacks import EarlyStopping, LearningRateScheduler\nfrom sklearn.preprocessing import normalize\n\nX_train_ = X_train.reshape(X_train.shape[0], 28, 28, 1)\nX_test_ = X_test.reshape(X_test.shape[0], 28, 28, 1)\nX_valid_ = X_valid.reshape(X_valid.shape[0], 28, 28, 1)\n\ny_train_cat = to_categorical(y_train)\ny_test_cat = to_categorical(y_test)\ny_valid_cat = to_categorical(y_valid)\n\nhist = model.fit_generator(datagen.flow(X_train_, y_train_cat, batch_size=64),\n                  epochs=15, verbose=1, validation_data=(X_valid_, y_valid_cat),\n                callbacks=[EarlyStopping(patience=3, restore_best_weights=True, monitor='val_acc', baseline=0.95)])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"08e3e97a511a96d6ce1d39c682cbc24676e06916"},"cell_type":"code","source":"score = model.evaluate(X_test_, y_test_cat, batch_size=32)\nscore","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"018e24931462ff81695fa1863b26875099a42d88","trusted":true,"scrolled":true},"cell_type":"code","source":"test_normed = normalize(test)\ntest_normed = test_normed.reshape(test_normed.shape[0], 28, 28, 1)\n\ny_pred = model.predict(test_normed)\nsubmission = pd.DataFrame(np.argmax(y_pred, axis=1), columns=['Label'])\nsubmission.index += 1\nsubmission.tail()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"60d9e9c61758db81a412121b6a017a967cf2550a","trusted":true},"cell_type":"code","source":"submission.to_csv('./submission.csv', index_label='ImageId', columns=['Label'])","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}