{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":83,"outputs":[{"output_type":"stream","text":"['train.csv', 'sample_submission.csv', 'test.csv']\n","name":"stdout"}]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/train.csv\", dtype=int)\nX_test = pd.read_csv(\"../input/test.csv\", dtype=int)","execution_count":84,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = train.drop('label', axis=1)\ny_train = train['label']","execution_count":85,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')","execution_count":86,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nplot0 = X_train.iloc[717].values.reshape(28,28)\nplt.imshow(plot0)","execution_count":87,"outputs":[{"output_type":"execute_result","execution_count":87,"data":{"text/plain":"<matplotlib.image.AxesImage at 0x7fe6a96fbe48>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train/255.0\nX_test = X_test/255.0","execution_count":88,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train.values.reshape(-1,28,28,1)\nX_test = X_test.values.reshape(-1,28,28,1)\nfrom keras.preprocessing.image import ImageDataGenerator\nX_train2 = np.array(X_train, copy=True) \ny_train2 = np.array(y_train, copy=True) \nX_train3 = np.array(X_train, copy=True) \ny_train3 = np.array(y_train, copy=True) \nX_train4 = np.array(X_train, copy=True) \ny_train4 = np.array(y_train, copy=True) \nX_train5 = np.array(X_train, copy=True) \ny_train5 = np.array(y_train, copy=True) \ndata = ImageDataGenerator(\n    featurewise_center=True,\n    zoom_range = 0.15, \n    featurewise_std_normalization=True,\n    rotation_range=45,\n    height_shift_range=0.15,\n    width_shift_range=0.15\n    )\n\ndata.fit(X_train, augment=True, rounds=1, seed=5)\n\nresult_x  = np.concatenate((X_train3, X_train2, X_train), axis=0)\nresult_y  = np.concatenate((y_train3, y_train2, y_train), axis=0)\nresult_x2 = np.array(result_x, copy=True) \nresult_y2 = np.array(result_y, copy=True)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.utils.np_utils import to_categorical\ny_train = to_categorical(y_train, num_classes = 10)\nresult_y = to_categorical(result_y, num_classes = 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.callbacks import ReduceLROnPlateau\nlearning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', patience=4, verbose=1, factor=0.5, min_lr=0.00001)\n                                                                                      \nfrom keras.callbacks import EarlyStopping\nearly_stop = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=0, mode='auto', baseline=None, restore_best_weights=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras\nfrom keras import Sequential\nfrom functools import partial\n\nDefaultConv2D = partial(keras.layers.Conv2D,\n                        kernel_size=3, activation='relu', padding =\"SAME\")\nmodel1=Sequential([\n    DefaultConv2D(filters=64, kernel_size=3, input_shape=[28, 28, 1]),\n    keras.layers.MaxPooling2D(pool_size=2),\n    DefaultConv2D(filters=128),\n    DefaultConv2D(filters=128),\n    keras.layers.MaxPooling2D(pool_size=2),\n    DefaultConv2D(filters=256),\n    DefaultConv2D(filters=256),\n    keras.layers.MaxPooling2D(pool_size=2),\n    keras.layers.Flatten(),\n    keras.layers.Dense(units=128, activation='relu'),\n    keras.layers.Dropout(0.6),\n    keras.layers.Dense(units=64, activation='relu'),\n    keras.layers.Dropout(0.6),\n    keras.layers.Dense(units=10, activation='softmax')\n    ])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras import optimizers\noptimizer= optimizers.SGD(lr=0.1)\nmodel1.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model1.fit_generator(data.flow(result_x, result_y, batch_size=35),\n                    steps_per_epoch=len(result_x) / 32, epochs = 12)\nhistory1 = model1.fit(X_train, y_train, epochs=30, validation_split=0.15, callbacks=[learning_rate_reduction])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred1 = model1.predict(X_test)\nvoting = np.sum([pred1], axis=0)\npred_all = []\nfor i in range(0, len(voting)):\n    pred_all.append(np.argmax(voting[i]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"result = pd.DataFrame(columns= ['ImageID', 'Label'])\nfor i in range(1, 28001):\n    result.loc[i-1] = [i, pred_all[i-1]]\n    print(i, pred_all[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"my_submission = result\nmy_submission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}