{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"#                                                             DIGIT RECOGNIZER ","metadata":{}},{"cell_type":"markdown","source":"By Adhishwar Narayan Tiwari","metadata":{}},{"cell_type":"code","source":"# Importing Libraries\n\n\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport os\nfrom sklearn.model_selection import train_test_split\nfrom keras.utils import to_categorical\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Conv2D, Flatten, MaxPooling2D\nfrom keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau\n\n# Disable warning, its better off\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Importing Data \n\ntrain_data = pd.read_csv(\"../input/train.csv\")\ntest_data = pd.read_csv(\"../input/test.csv\")","metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.status.busy":"2021-09-18T04:48:27.793925Z","iopub.execute_input":"2021-09-18T04:48:27.794229Z","iopub.status.idle":"2021-09-18T04:48:33.773251Z","shell.execute_reply.started":"2021-09-18T04:48:27.794164Z","shell.execute_reply":"2021-09-18T04:48:33.772535Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data exploration\n\nprint(train_data.columns)\nprint('------------------------------------------------')\nprint(test_data.columns)","metadata":{"_uuid":"8cf0ddb91ea1800044aef4755f26401711d0fc5f","execution":{"iopub.status.busy":"2021-09-18T04:48:36.452613Z","iopub.execute_input":"2021-09-18T04:48:36.452890Z","iopub.status.idle":"2021-09-18T04:48:36.460905Z","shell.execute_reply.started":"2021-09-18T04:48:36.452841Z","shell.execute_reply":"2021-09-18T04:48:36.459775Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train_data.shape)\nprint('-----------')\nprint(test_data.shape)","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:48:40.364602Z","iopub.execute_input":"2021-09-18T04:48:40.364877Z","iopub.status.idle":"2021-09-18T04:48:40.370224Z","shell.execute_reply.started":"2021-09-18T04:48:40.364829Z","shell.execute_reply":"2021-09-18T04:48:40.369249Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data.head(10)","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:48:44.109645Z","iopub.execute_input":"2021-09-18T04:48:44.109925Z","iopub.status.idle":"2021-09-18T04:48:44.240595Z","shell.execute_reply.started":"2021-09-18T04:48:44.109877Z","shell.execute_reply":"2021-09-18T04:48:44.239805Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data.head(10)","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:48:47.725637Z","iopub.execute_input":"2021-09-18T04:48:47.726198Z","iopub.status.idle":"2021-09-18T04:48:47.926391Z","shell.execute_reply.started":"2021-09-18T04:48:47.725957Z","shell.execute_reply":"2021-09-18T04:48:47.925718Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Showing images for example\n\ndef show_image(train_image, label, index):\n    image_shaped = train_image.values.reshape(28,28)\n    plt.subplot(3, 6, index+1)\n    plt.imshow(image_shaped, cmap=plt.cm.gray)\n    plt.title(label)\n\n\nplt.figure(figsize=(18, 8))\nsample_image = train_data.sample(18).reset_index(drop=True)\nfor index, row in sample_image.iterrows():\n    label = row['label']\n    image_pixels = row.drop('label')\n    show_image(image_pixels, label, index)\nplt.tight_layout()","metadata":{"_uuid":"7bb023b61768378f76e5519d6b637b064d18d272","execution":{"iopub.status.busy":"2021-09-18T04:48:59.173988Z","iopub.execute_input":"2021-09-18T04:48:59.174269Z","iopub.status.idle":"2021-09-18T04:49:02.188141Z","shell.execute_reply.started":"2021-09-18T04:48:59.174219Z","shell.execute_reply":"2021-09-18T04:49:02.187285Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Reshaping the data\n\nx = train_data.drop(columns=['label']).values.reshape(train_data.shape[0],28,28,1)\ny = to_categorical(train_data['label']) \nx_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=2)","metadata":{"_uuid":"8a41153b5cd7f8cb666ef6a6d706da7e394cc5ba","execution":{"iopub.status.busy":"2021-09-18T04:51:46.462265Z","iopub.execute_input":"2021-09-18T04:51:46.462590Z","iopub.status.idle":"2021-09-18T04:51:47.200765Z","shell.execute_reply.started":"2021-09-18T04:51:46.462513Z","shell.execute_reply":"2021-09-18T04:51:47.199842Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Setting epochs and batch_Size\n\n\nfast_run=False\nbatch_size=32\nepochs=32\nif fast_run:\n    epochs=1","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:53:02.633701Z","iopub.execute_input":"2021-09-18T04:53:02.634030Z","iopub.status.idle":"2021-09-18T04:53:02.640117Z","shell.execute_reply.started":"2021-09-18T04:53:02.633988Z","shell.execute_reply":"2021-09-18T04:53:02.639192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Image Data Generator\n\ntrain_datagen = ImageDataGenerator(rotation_range=10,rescale=1./255,shear_range=0.1,zoom_range=0.1,width_shift_range=0.1,\n    height_shift_range=0.1)\ntrain_datagen.fit(x_train)\ntrain_generator = train_datagen.flow(x_train,y_train,batch_size=batch_size)\n\nvalidation_datagen = ImageDataGenerator(rescale=1./255) # Normalization\ntrain_datagen.fit(x_test)\nvalidation_generator = validation_datagen.flow(x_test,y_test)","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:53:06.746389Z","iopub.execute_input":"2021-09-18T04:53:06.746736Z","iopub.status.idle":"2021-09-18T04:53:07.011490Z","shell.execute_reply.started":"2021-09-18T04:53:06.746662Z","shell.execute_reply":"2021-09-18T04:53:07.010648Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model building\n\nmodel = Sequential()\nmodel.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=(28,28,1)))\nmodel.add(Conv2D(32, kernel_size=3, activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Flatten())\nmodel.add(Dense(10, activation='softmax'))","metadata":{"_uuid":"c19b7a6003a4c599ead616015ed7441b9d02b773","execution":{"iopub.status.busy":"2021-09-18T04:53:10.466380Z","iopub.execute_input":"2021-09-18T04:53:10.466679Z","iopub.status.idle":"2021-09-18T04:53:10.548455Z","shell.execute_reply.started":"2021-09-18T04:53:10.466615Z","shell.execute_reply":"2021-09-18T04:53:10.547765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# compiling The Model\n\nmodel.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:53:13.335217Z","iopub.execute_input":"2021-09-18T04:53:13.335491Z","iopub.status.idle":"2021-09-18T04:53:13.372826Z","shell.execute_reply.started":"2021-09-18T04:53:13.335440Z","shell.execute_reply":"2021-09-18T04:53:13.372084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Callbacks\n\ncallbacks = [\n    EarlyStopping(patience=10, verbose=1),\n    ReduceLROnPlateau(factor=0.1, patience=3, min_lr=0.00001, verbose=1),\n    ModelCheckpoint('model.h5', verbose=1, save_best_only=True, save_weights_only=True)\n]","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:53:16.797129Z","iopub.execute_input":"2021-09-18T04:53:16.797409Z","iopub.status.idle":"2021-09-18T04:53:16.802503Z","shell.execute_reply.started":"2021-09-18T04:53:16.797361Z","shell.execute_reply":"2021-09-18T04:53:16.801563Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit_generator(\n    train_generator, \n    steps_per_epoch=len(x_train) // batch_size, \n    validation_data=validation_generator,\n    validation_steps=len(x_test) // batch_size,\n    epochs=epochs,\n    callbacks=callbacks\n)","metadata":{"execution":{"iopub.status.busy":"2021-09-18T04:53:20.295034Z","iopub.execute_input":"2021-09-18T04:53:20.295322Z","iopub.status.idle":"2021-09-18T05:00:24.897962Z","shell.execute_reply.started":"2021-09-18T04:53:20.295273Z","shell.execute_reply":"2021-09-18T05:00:24.897171Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# evaluating the model\n\nx_test_recaled = (x_test.astype(\"float32\") / 255)\nscores = model.evaluate(x_test_recaled, y_test, verbose=0)\nprint(\"%s: %.2f%%\" % (model.metrics_names[1], scores[1]*100))\nprint(\"%s: %.2f%%\" % (model.metrics_names[0], scores[0]*100))","metadata":{"execution":{"iopub.status.busy":"2021-09-18T05:02:00.828086Z","iopub.execute_input":"2021-09-18T05:02:00.828373Z","iopub.status.idle":"2021-09-18T05:02:01.027328Z","shell.execute_reply.started":"2021-09-18T05:02:00.828323Z","shell.execute_reply":"2021-09-18T05:02:01.026499Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# testing on test_data\n\ntest_digit_data = test_data.values.reshape(test_data.shape[0],28,28,1).astype(\"float32\") / 255\npredictions = model.predict(test_digit_data)\nresults = np.argmax(predictions, axis = 1) ","metadata":{"_uuid":"3154531f9be3cdd74d8ec02509616c491dc27bbc","execution":{"iopub.status.busy":"2021-09-18T05:02:44.604388Z","iopub.execute_input":"2021-09-18T05:02:44.604693Z","iopub.status.idle":"2021-09-18T05:02:45.697080Z","shell.execute_reply.started":"2021-09-18T05:02:44.604633Z","shell.execute_reply":"2021-09-18T05:02:45.696199Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# checking how accurate my result is\n\nplt.figure(figsize=(18, 8))\nsample_test = test_data.head(18)\nfor index, image_pixels in sample_test.iterrows():\n    label = results[index]\n    show_image(image_pixels, label, index)\n    plt.tight_layout()","metadata":{"execution":{"iopub.status.busy":"2021-09-18T05:03:27.043076Z","iopub.execute_input":"2021-09-18T05:03:27.043350Z","iopub.status.idle":"2021-09-18T05:03:29.950237Z","shell.execute_reply.started":"2021-09-18T05:03:27.043298Z","shell.execute_reply":"2021-09-18T05:03:29.949627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Creating Submission File\n\nsubmissions = pd.read_csv(\"../input/sample_submission.csv\")\nsubmissions['Label'] = results\nsubmissions.to_csv('submission.csv', index = False)","metadata":{"execution":{"iopub.status.busy":"2021-09-18T05:04:16.418787Z","iopub.execute_input":"2021-09-18T05:04:16.419063Z","iopub.status.idle":"2021-09-18T05:04:16.547500Z","shell.execute_reply.started":"2021-09-18T05:04:16.419013Z","shell.execute_reply":"2021-09-18T05:04:16.546805Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Next step check [Dog And Cat Image Classification](https://www.kaggle.com/uysimty/keras-cnn-dog-or-cat-classification)","metadata":{}}]}