{"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-09-25T13:52:37.147046Z","iopub.execute_input":"2022-09-25T13:52:37.147608Z","iopub.status.idle":"2022-09-25T13:52:41.548683Z","shell.execute_reply.started":"2022-09-25T13:52:37.147483Z","shell.execute_reply":"2022-09-25T13:52:41.547414Z"},"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-09-25T13:52:41.550845Z","iopub.execute_input":"2022-09-25T13:52:41.559481Z","iopub.status.idle":"2022-09-25T13:52:46.483025Z","shell.execute_reply.started":"2022-09-25T13:52:41.559428Z","shell.execute_reply":"2022-09-25T13:52:46.482035Z"},"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-09-25T13:52:46.484394Z","iopub.execute_input":"2022-09-25T13:52:46.484870Z","iopub.status.idle":"2022-09-25T13:52:46.573261Z","shell.execute_reply.started":"2022-09-25T13:52:46.484830Z","shell.execute_reply":"2022-09-25T13:52:46.572256Z"},"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-09-25T13:52:46.574702Z","iopub.execute_input":"2022-09-25T13:52:46.575192Z","iopub.status.idle":"2022-09-25T13:52:46.766126Z","shell.execute_reply.started":"2022-09-25T13:52:46.575151Z","shell.execute_reply":"2022-09-25T13:52:46.764779Z"},"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-09-25T13:52:46.768777Z","iopub.execute_input":"2022-09-25T13:52:46.769158Z","iopub.status.idle":"2022-09-25T13:52:46.775227Z","shell.execute_reply.started":"2022-09-25T13:52:46.769120Z","shell.execute_reply":"2022-09-25T13:52:46.774125Z"},"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-09-25T13:52:46.776738Z","iopub.execute_input":"2022-09-25T13:52:46.777275Z","iopub.status.idle":"2022-09-25T13:52:47.148782Z","shell.execute_reply.started":"2022-09-25T13:52:46.777240Z","shell.execute_reply":"2022-09-25T13:52:47.147844Z"},"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 = 300\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":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(X_val, Y_val)","metadata":{"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)\nsubmission.to_csv(\"cnn_mnist_datagen.csv\",index=False)\nsubmission","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}