{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPool2D, BatchNormalization\nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.keras.losses import categorical_crossentropy\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import EarlyStopping","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_path = '../input/digit-recognizer/train.csv'\ntest_path = '../input/digit-recognizer/test.csv'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_data = pd.read_csv(train_path)\ntest_data = pd.read_csv(test_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_rows, img_cols = 28, 28\nnum_classes = train_data.label.nunique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def data_prep(raw_data, img_row, img_col, num_classes):\n    # One hot encode the label data\n    out_y = to_categorical(raw_data.label, num_classes)\n    num_images = raw_data.shape[0]\n    x_as_array = raw_data.values[:, 1:]\n    x_as_matrix = x_as_array.reshape(num_images, img_row, img_col, 1)\n    \n    # Scale down the features between 0 and 1\n    out_x = x_as_matrix/255.0\n    \n    return out_x, out_y","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X, y = data_prep(train_data, img_rows, img_cols, num_classes)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Creating the model\nmodel = Sequential()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Adding layers to the model\n\nmodel.add(Conv2D(filters=40, kernel_size=(3,3), padding='Same', activation='relu', input_shape=(img_rows, img_cols, 1)))\nmodel.add(MaxPool2D(2,2))\nmodel.add(BatchNormalization(axis=1))\n\nmodel.add(Conv2D(filters=60, kernel_size=(3,3), padding='Same', activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(BatchNormalization(axis=1))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(filters=80, kernel_size=(3,3), padding='Same', activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(BatchNormalization(axis=1))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(BatchNormalization(axis=1))\n\nmodel.add(Dense(256, activation='relu'))\nmodel.add(BatchNormalization(axis=1))\n\nmodel.add(Dropout(0.50))\nmodel.add(BatchNormalization(axis=1))\nmodel.add(Dense(10, activation='softmax'))\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Specifying model compilation parameters\n\nmodel.compile(loss=categorical_crossentropy,\n              optimizer=Adam(0.001),\n              metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Create an EarlyStopping object to monitor the validation loss\n# Stops the training of model if the validation loss stopped decreasing\n\n#early_stopping = EarlyStopping(monitor='val_loss', patience=3, mode='auto')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Training the model\n\nhistory = model.fit(X, y, epochs=20, validation_split=0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Prepare test data\ntest_num_img = test_data.shape[0]\ntest_data_array = test_data.values\ntest_data_matrix = test_data_array.reshape(test_num_img, 28,28,1)\ntest_data_matrix = test_data_matrix/255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preds = model.predict_classes(test_data_matrix)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preds[0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(test_data_matrix[0].reshape(28,28))\nplt.title('Predicted value = {}'.format(preds[0]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"output = pd.DataFrame({'ImageId': list(range(1, len(preds)+1)),\n                       'Label':preds})\noutput.to_csv('output2.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}