{"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":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nimport pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nnp.random.seed(2)","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:44:58.078131Z","iopub.execute_input":"2022-10-03T08:44:58.078902Z","iopub.status.idle":"2022-10-03T08:45:03.066357Z","shell.execute_reply.started":"2022-10-03T08:44:58.078812Z","shell.execute_reply":"2022-10-03T08:45:03.065352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"../input/digit-recognizer/train.csv\")\nX_test = pd.read_csv(\"../input/digit-recognizer/test.csv\")","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:45:32.533945Z","iopub.execute_input":"2022-10-03T08:45:32.534321Z","iopub.status.idle":"2022-10-03T08:45:39.160345Z","shell.execute_reply.started":"2022-10-03T08:45:32.534290Z","shell.execute_reply":"2022-10-03T08:45:39.159206Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_train = train[\"label\"]\nX_train = train.drop(labels = [\"label\"],axis = 1) ","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:45:39.162378Z","iopub.execute_input":"2022-10-03T08:45:39.162952Z","iopub.status.idle":"2022-10-03T08:45:39.267598Z","shell.execute_reply.started":"2022-10-03T08:45:39.162907Z","shell.execute_reply":"2022-10-03T08:45:39.266369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train / 255\nX_test = X_test / 255","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:45:39.273473Z","iopub.execute_input":"2022-10-03T08:45:39.273933Z","iopub.status.idle":"2022-10-03T08:45:39.562297Z","shell.execute_reply.started":"2022-10-03T08:45:39.273896Z","shell.execute_reply":"2022-10-03T08:45:39.561186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Reshape image in 3 dimensions (height = 28px, width = 28px , canal = 1)\nX_train = X_train.values.reshape(-1,28,28,1)\nX_test = X_test.values.reshape(-1,28,28,1)","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:45:39.569019Z","iopub.execute_input":"2022-10-03T08:45:39.572214Z","iopub.status.idle":"2022-10-03T08:45:39.580398Z","shell.execute_reply.started":"2022-10-03T08:45:39.572156Z","shell.execute_reply":"2022-10-03T08:45:39.579202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"random_seed = 2\nX_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed)","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:45:39.949593Z","iopub.execute_input":"2022-10-03T08:45:39.950079Z","iopub.status.idle":"2022-10-03T08:45:40.396675Z","shell.execute_reply.started":"2022-10-03T08:45:39.950036Z","shell.execute_reply":"2022-10-03T08:45:40.395513Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.Sequential()\nmodel.add(keras.layers.Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu', input_shape = (28,28,1)))\nmodel.add(keras.layers.Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n                 activation ='relu'))\nmodel.add(keras.layers.MaxPool2D(pool_size=(2,2)))\nmodel.add(keras.layers.Dropout(0.25))\n\n\nmodel.add(keras.layers.Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(keras.layers.Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(keras.layers.Dropout(0.25))\n\n\nmodel.add(keras.layers.Flatten())\nmodel.add(keras.layers.Dense(256, activation = \"relu\"))\nmodel.add(keras.layers.Dropout(0.5))\nmodel.add(keras.layers.Dense(10, activation = \"softmax\"))\n\noptimizer = tf.keras.optimizers.Adam(learning_rate=0.001, epsilon=1e-08, decay=0.0)\nlearning_rate_reduction = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', \n                                            patience=3, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.00001)\n\nmodel.compile(optimizer=optimizer,\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])\n\ndatagen = keras.preprocessing.image.ImageDataGenerator(\n        featurewise_center=False,  # set input mean to 0 over the dataset\n        samplewise_center=False,  # set each sample mean to 0\n        featurewise_std_normalization=False,  # divide inputs by std of the dataset\n        samplewise_std_normalization=False,  # divide each input by its std\n        zca_whitening=False,  # apply ZCA whitening\n        rotation_range=10,  # randomly rotate images in the range (degrees, 0 to 180)\n        zoom_range = 0.1, # Randomly zoom image \n        width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)\n        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)\n        horizontal_flip=False,  # randomly flip images\n        vertical_flip=False)  # randomly flip images\n\ndatagen.fit(X_train)\n\nbatch_size = 86\nepochs = 50\nhistory = model.fit(datagen.flow(X_train,Y_train, batch_size=batch_size),\n                              epochs = epochs, validation_data = (X_val,Y_val),\n                              verbose = 2, steps_per_epoch=X_train.shape[0] // batch_size\n                              , callbacks=[learning_rate_reduction])","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:47:52.795991Z","iopub.execute_input":"2022-10-03T08:47:52.796388Z","iopub.status.idle":"2022-10-03T08:56:18.373376Z","shell.execute_reply.started":"2022-10-03T08:47:52.796352Z","shell.execute_reply":"2022-10-03T08:56:18.372320Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(X_val, Y_val)","metadata":{"execution":{"iopub.status.busy":"2022-10-03T08:56:18.376846Z","iopub.execute_input":"2022-10-03T08:56:18.377693Z","iopub.status.idle":"2022-10-03T08:56:19.067532Z","shell.execute_reply.started":"2022-10-03T08:56:18.377654Z","shell.execute_reply":"2022-10-03T08:56:19.066465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results = model.predict(X_test)\nresults = np.argmax(results,axis = 1)\nresults = pd.Series(results,name=\"Label\")\nsubmission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),results],axis = 1)\n#submission.to_csv(\"submission.csv\",index=False)\n#submission","metadata":{"execution":{"iopub.status.busy":"2022-10-03T09:07:24.149968Z","iopub.execute_input":"2022-10-03T09:07:24.150704Z","iopub.status.idle":"2022-10-03T09:07:25.712229Z","shell.execute_reply.started":"2022-10-03T09:07:24.150668Z","shell.execute_reply":"2022-10-03T09:07:25.711210Z"},"trusted":true},"execution_count":null,"outputs":[]}]}