{"cells":[{"metadata":{"_uuid":"d9a9283b-a5f4-4dc8-b8f1-7ca959797b3b","_cell_guid":"03cf9644-df9e-42f2-95ac-c20d133bdaa7","trusted":true},"cell_type":"code","source":"import os\nimport numpy as np\nfrom keras.utils import np_utils\nimport pandas as pd\nfrom keras import Sequential\nfrom keras.preprocessing import image\nfrom keras.layers import Conv2D, Dense, MaxPooling2D, Flatten, Dropout, Activation, BatchNormalization\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\n\ntrain_data = pd.read_csv(\"../input/train.csv\")\ntest_data = pd.read_csv(\"../input/test.csv\")\n\nX_train = train_data.drop(labels = ['label'],axis = 1).values.reshape(len(train_data),28,28,1)\ny_train = np_utils.to_categorical(train_data['label'])\nX_test = test_data.values.reshape(len(test_data),28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(128, kernel_size=(3, 3),input_shape=(28,28,1),activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(128, kernel_size=(3, 3),activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(128, kernel_size=(3, 3),activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(128, kernel_size=(3, 3),input_shape=(28,28,1),activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(128, kernel_size=(3, 3),activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Conv2D(128, kernel_size=(3, 3),activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.2))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(512,activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Dense(256,activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Dense(128,activation=\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.2))\n\nmodel.add(Dense(10,activation=\"softmax\"))\nmodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) #compile model\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"BATCH_SIZE = 128\nimg_gen = image.ImageDataGenerator(\n    data_format=\"channels_last\",\n    rescale=1/255,\n    validation_split=0.10,\n    rotation_range=10,\n    zoom_range = 0.1,\n    width_shift_range=0.1,\n    height_shift_range=0.1,\n    shear_range=0.10\n)\n\nimg_gen.fit(X_train)\n\ntrain_generator = img_gen.flow(\n    x = X_train, \n    y= y_train,\n    subset=\"training\",\n    batch_size=BATCH_SIZE,\n    shuffle=True\n)\n\nvalidation_generator = img_gen.flow(\n    x = X_train, \n    y= y_train,\n    subset=\"validation\",\n    batch_size=BATCH_SIZE,\n    shuffle=True\n)\n\nimg_gen2 = image.ImageDataGenerator(\n    data_format=\"channels_last\",\n    rescale=1/255\n)\n\ntest_generator = img_gen2.flow(\n    x = X_test,\n    y= None,\n    batch_size=1,\n    shuffle=False\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"filepath = 'ModelCheckpoint.h5'\n\ncallbacks = [\n    ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, save_weights_only=True, mode='auto', period=1),\n    EarlyStopping(monitor='val_acc', min_delta=0, patience=5, verbose=1, mode='auto', baseline=None, restore_best_weights=True)\n    ]\n\nhistory = model.fit_generator(\n    train_generator,\n    steps_per_epoch=len(train_generator),\n    epochs=50,validation_data=validation_generator,\n    validation_steps=len(validation_generator),\n    verbose=2,\n    callbacks=callbacks\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.load_weights('ModelCheckpoint.h5')\n\ny_pred = model.predict_generator(\n    test_generator,\n    steps=len(test_data)\n)\n\nsubmission = pd.DataFrame()\nsubmission['ImageId'] = test_data.index.values + 1\nsubmission['Label'] = y_pred.argmax(axis=-1)\nsubmission.to_csv('submission.csv', header=True, index=False)","execution_count":null,"outputs":[]}],"metadata":{"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"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}