{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport random\n\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimage\nimport seaborn as sns\n%matplotlib inline\n\nfrom sklearn.model_selection import train_test_split\n\nimport tensorflow as tf\nimport keras\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.layers import Conv2D, Dropout, Flatten, MaxPool2D, Dense\nfrom keras.utils.np_utils import to_categorical\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import RMSprop","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"markdown","source":"# Data Preperation"},{"metadata":{"trusted":true,"_uuid":"07c5896859f2681737b44b4a6a2d2e00f96dd104"},"cell_type":"code","source":"train = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bdc6b5a2e20507db8744ea93f5cd769da2e80157"},"cell_type":"code","source":"print(train.shape)\ntrain.dropna(inplace = True)\nprint(train.shape)\n\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"607ef82e446998282df7813f278c59c68f3e6d44"},"cell_type":"code","source":"print(test.shape)\ntest.dropna(inplace = True)\nprint(test.shape)\n\ntest.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"326127996e394949d92bac83ebff293f43801fb0"},"cell_type":"code","source":"X_train = train.drop('label', axis = 1)\ny_train = train.label\n\n_ = sns.countplot(y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0dda86d695c928e068f922baa784c871f2765d91"},"cell_type":"code","source":"X_train = X_train / 255.0\ntest = test / 255.0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2cac5d376040022be91af72cd17313dc130de9a5"},"cell_type":"code","source":"if (str(type(X_train))[8:21] != 'numpy.ndarray'):\n    X_train = X_train.values\nif (str(type(test))[8:21] != 'numpy.ndarray'):    \n    test = test.values\n\n\nX_train = X_train.reshape(-1,28,28,1)\ntest = test.reshape(-1,28,28,1)\n\nprint('Convert Completed')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"257a990fa5f736684fe1911ada40ed4e95699f0b"},"cell_type":"code","source":"y_train = to_categorical(y_train, num_classes = 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"19011db5f83c44d4c262c4bc5a0c5ffc54849cf1"},"cell_type":"code","source":"train_X , val_X, train_y, val_y = train_test_split(\n                                        X_train, y_train, \n                                        random_state = 2, \n                                        test_size = 0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d94f1ebfc4ee348f8613902fdcf3f6a4ac50d131"},"cell_type":"code","source":"ixx = random.randint(0, len(train_X))\n_ = plt.imshow(train_X[ixx][:, :, 0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d75bcb34f258eb75f88afe51832a4773120909ae"},"cell_type":"code","source":"model = Sequential([\n    \n    Conv2D(filters=32, kernel_size=(5,5), padding='same', activation='relu', input_shape=(28,28,1)),\n    Conv2D(filters=32, kernel_size=(5,5), padding='same', activation='relu'),\n    MaxPool2D(pool_size=(2,2)),\n    Dropout(0.25),\n    \n    Conv2D(filters=64, kernel_size=(5,5), padding='same', activation='relu'),\n    Conv2D(filters=64, kernel_size=(5,5), padding='same', activation='relu'),\n    MaxPool2D(pool_size=(2,2), strides=(2,2)),\n    Dropout(0.25),\n    \n    Flatten(),\n    Dense(256, activation='relu'),\n    Dropout(0.5),\n    Dense(10, activation='softmax')\n    \n])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"466b6cc6d9b2d64a7f95d25647666c450d4c5e5d"},"cell_type":"code","source":"optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"30e405b048038289e017ab5c15cba6c248b8beef"},"cell_type":"code","source":"model.compile(optimizer=optimizer, \n              loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4f9e6ad7b61d40d99015716b6809a74ce4859ebf"},"cell_type":"code","source":"learning_rate_reduction = ReduceLROnPlateau(\n                                monitor='val_acc',\n                                period=3,\n                                fator=0.5,\n                                min_lr = 0.00001\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b81ab6957ee9c56952051c6c8d15111f90f57ce5"},"cell_type":"code","source":"data_aug = ImageDataGenerator(\n    rotation_range = 10,\n    zoom_range=0.1,\n    width_shift_range=0.1,\n    height_shift_range=0.1\n)\n\ndata_aug.fit(train_X)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"679b82164bd1fbf2a72be063bc0c3979a12a1494","trusted":true},"cell_type":"code","source":"batch_size = 86\nepochs = 30\n\nhistory = model.fit_generator(data_aug.flow(train_X,train_y, batch_size=batch_size),\n                              epochs = epochs, validation_data = (val_X,val_y),\n                              verbose = 2, steps_per_epoch=X_train.shape[0] // batch_size,\n                              callbacks=[learning_rate_reduction]\n                              )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"173da72b9b670599679c1919bdd2f131f522b106"},"cell_type":"code","source":"results = model.predict(test)\nresults = np.argmax(results, axis=1)\n\nsubmission = pd.DataFrame({'ImageId': range(1,len(test)+1), 'Label': results})\nsubmission.to_csv('image_submission.csv', index=False)\nsubmission.head()","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}