{"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":"### Imports","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # Supress tensorflow log outputs","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-12-31T16:29:03.305999Z","iopub.execute_input":"2021-12-31T16:29:03.306819Z","iopub.status.idle":"2021-12-31T16:29:03.311963Z","shell.execute_reply.started":"2021-12-31T16:29:03.306759Z","shell.execute_reply":"2021-12-31T16:29:03.311001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Load in Data","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")","metadata":{"execution":{"iopub.status.busy":"2021-12-31T15:54:52.544747Z","iopub.execute_input":"2021-12-31T15:54:52.545667Z","iopub.status.idle":"2021-12-31T15:54:56.166282Z","shell.execute_reply.started":"2021-12-31T15:54:52.545605Z","shell.execute_reply":"2021-12-31T15:54:56.165358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Extract x_train and y_train","metadata":{}},{"cell_type":"code","source":"x_train = train.drop(\"label\", axis=1).astype(\"float32\") / 255.0\ny_train = train[\"label\"]","metadata":{"execution":{"iopub.status.busy":"2021-12-31T15:54:56.167850Z","iopub.execute_input":"2021-12-31T15:54:56.168069Z","iopub.status.idle":"2021-12-31T15:54:56.271190Z","shell.execute_reply.started":"2021-12-31T15:54:56.168029Z","shell.execute_reply":"2021-12-31T15:54:56.270303Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Simple Model with Regularization","metadata":{}},{"cell_type":"code","source":"model = keras.Sequential([\n    layers.Dense(256, activation=\"relu\"),\n    layers.BatchNormalization(),\n    layers.Dropout(0.2),\n    \n    layers.Dense(128, activation=\"relu\"),\n    layers.BatchNormalization(),\n    layers.Dropout(0.2),\n    \n    layers.Dense(64, activation=\"relu\"),\n    layers.BatchNormalization(),\n    layers.Dropout(0.2),\n    \n    layers.Dense(10, activation=\"softmax\")\n])","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:16:19.712836Z","iopub.execute_input":"2021-12-31T16:16:19.713493Z","iopub.status.idle":"2021-12-31T16:16:19.732179Z","shell.execute_reply.started":"2021-12-31T16:16:19.713451Z","shell.execute_reply":"2021-12-31T16:16:19.731494Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(\n    optimizer = keras.optimizers.Adam(),\n    loss = keras.losses.SparseCategoricalCrossentropy(),\n    metrics=[\"accuracy\"]\n)","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:16:27.120183Z","iopub.execute_input":"2021-12-31T16:16:27.121158Z","iopub.status.idle":"2021-12-31T16:16:27.132422Z","shell.execute_reply.started":"2021-12-31T16:16:27.121110Z","shell.execute_reply":"2021-12-31T16:16:27.131621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Callbacks to minimize loss","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.callbacks import EarlyStopping\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau\nfrom tensorflow.keras.callbacks import ModelCheckpoint\n\ncallbacks = [\n    EarlyStopping(patience=15, monitor='val_loss'),\n\n\tReduceLROnPlateau(monitor='val_loss', min_lr=0.001, patience=5, mode='min',verbose=1),\n\n\tModelCheckpoint(monitor='val_loss', filepath='./best_model.h5', save_best_only=True)\n]","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:16:28.604003Z","iopub.execute_input":"2021-12-31T16:16:28.604764Z","iopub.status.idle":"2021-12-31T16:16:28.611563Z","shell.execute_reply.started":"2021-12-31T16:16:28.604718Z","shell.execute_reply":"2021-12-31T16:16:28.610523Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(x_train, y_train, epochs=100, batch_size=64, validation_split=0.2, verbose=2, callbacks=callbacks)","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:16:32.462853Z","iopub.execute_input":"2021-12-31T16:16:32.463169Z","iopub.status.idle":"2021-12-31T16:17:55.221472Z","shell.execute_reply.started":"2021-12-31T16:16:32.463140Z","shell.execute_reply":"2021-12-31T16:17:55.220624Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.models.load_model(\"best_model.h5\") # load in best model","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:24:52.512051Z","iopub.execute_input":"2021-12-31T16:24:52.513094Z","iopub.status.idle":"2021-12-31T16:24:52.661858Z","shell.execute_reply.started":"2021-12-31T16:24:52.513021Z","shell.execute_reply":"2021-12-31T16:24:52.661147Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Submission","metadata":{}},{"cell_type":"code","source":"x_test = test / 255.0\nsubmission = pd.read_csv(\"/kaggle/input/digit-recognizer/sample_submission.csv\")\nsubmission[\"Label\"] = np.argmax(model.predict(x_test), axis=-1)\nsubmission.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:34:42.618671Z","iopub.execute_input":"2021-12-31T16:34:42.619604Z","iopub.status.idle":"2021-12-31T16:34:44.115128Z","shell.execute_reply.started":"2021-12-31T16:34:42.619557Z","shell.execute_reply":"2021-12-31T16:34:44.114367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2021-12-31T16:34:33.312333Z","iopub.execute_input":"2021-12-31T16:34:33.313129Z","iopub.status.idle":"2021-12-31T16:34:33.325146Z","shell.execute_reply.started":"2021-12-31T16:34:33.313086Z","shell.execute_reply":"2021-12-31T16:34:33.323669Z"},"trusted":true},"execution_count":null,"outputs":[]}]}