{"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":"This is an inference kernel - the training one is here https://www.kaggle.com/konradb/umnist-model-train","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport datetime\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\nimport tensorflow as tf\nfrom tensorflow.keras import models, layers\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\nfrom tensorflow.keras.applications import ResNet50, EfficientNetB0\nfrom tensorflow.keras.optimizers import Adam\n\n# ignoring warnings\nimport warnings\nwarnings.simplefilter(\"ignore\")\n\nimport os, cv2, json\nfrom PIL import Image\n\nimport random","metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_kg_hide-input":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","papermill":{"duration":5.732608,"end_time":"2021-12-20T22:53:39.01515","exception":false,"start_time":"2021-12-20T22:53:33.282542","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-15T21:46:00.181586Z","iopub.execute_input":"2022-03-15T21:46:00.181862Z","iopub.status.idle":"2022-03-15T21:46:00.189820Z","shell.execute_reply.started":"2022-03-15T21:46:00.181832Z","shell.execute_reply":"2022-03-15T21:46:00.188191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class CFG:    \n    # config\n    WORK_DIR = '../input/ultra-mnist/'\n    data_dir = '../input/fast-image-resizing/'\n    BATCH_SIZE = 64\n    EPOCHS = 50\n    img_size = 512\n    seed = 42","metadata":{"papermill":{"duration":0.026232,"end_time":"2021-12-20T22:53:39.0593","exception":false,"start_time":"2021-12-20T22:53:39.033068","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-15T21:47:20.413349Z","iopub.execute_input":"2022-03-15T21:47:20.413815Z","iopub.status.idle":"2022-03-15T21:47:20.417988Z","shell.execute_reply.started":"2022-03-15T21:47:20.413772Z","shell.execute_reply":"2022-03-15T21:47:20.417260Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def seed_everything(seed: int = 42) -> None:\n    random.seed(seed)\n    np.random.seed(seed)\n    os.environ[\"PYTHONHASHSEED\"] = str(seed)\n    tf.random.set_seed(seed)\n    \n    \nseed_everything(CFG.seed)","metadata":{"execution":{"iopub.status.busy":"2022-03-15T21:47:32.957127Z","iopub.execute_input":"2022-03-15T21:47:32.957785Z","iopub.status.idle":"2022-03-15T21:47:32.965173Z","shell.execute_reply.started":"2022-03-15T21:47:32.957743Z","shell.execute_reply":"2022-03-15T21:47:32.964348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Functions","metadata":{"papermill":{"duration":0.016944,"end_time":"2021-12-20T22:53:39.093163","exception":false,"start_time":"2021-12-20T22:53:39.076219","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def get_model():\n    conv_base = ResNet50(include_top=False,\n                     input_shape=(CFG.img_size, CFG.img_size,3))\n    \n    model = conv_base.output\n    model = layers.GlobalAveragePooling2D()(model)\n    \n    model = layers.Dropout(.9)(model)\n    \n    model = layers.Dense(28, activation = \"softmax\")(model)\n    model = models.Model(conv_base.input, model)\n\n    model.compile(optimizer = Adam(lr = 0.001),\n                  loss = \"sparse_categorical_crossentropy\",\n                  metrics = [\"acc\"])\n    \n    return model","metadata":{"execution":{"iopub.status.busy":"2022-03-15T21:47:35.037088Z","iopub.execute_input":"2022-03-15T21:47:35.037406Z","iopub.status.idle":"2022-03-15T21:47:35.050433Z","shell.execute_reply.started":"2022-03-15T21:47:35.037372Z","shell.execute_reply":"2022-03-15T21:47:35.049570Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model\n\nFit a simple model with early stopping:","metadata":{"papermill":{"duration":0.019698,"end_time":"2021-12-20T22:53:59.151036","exception":false,"start_time":"2021-12-20T22:53:59.131338","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model = get_model()\nmodel.load_weights('../input/umnist-model-train/model_weights.h5')","metadata":{"_kg_hide-output":true,"papermill":{"duration":1569.607042,"end_time":"2021-12-20T23:20:14.294919","exception":false,"start_time":"2021-12-20T22:54:04.687877","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-15T21:47:45.900151Z","iopub.execute_input":"2022-03-15T21:47:45.900641Z","iopub.status.idle":"2022-03-15T21:47:51.724266Z","shell.execute_reply.started":"2022-03-15T21:47:45.900602Z","shell.execute_reply":"2022-03-15T21:47:51.723521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submission","metadata":{}},{"cell_type":"code","source":"ss = pd.read_csv(os.path.join(CFG.WORK_DIR, \"sample_submission.csv\"))","metadata":{"execution":{"iopub.status.busy":"2022-03-15T21:49:59.313487Z","iopub.execute_input":"2022-03-15T21:49:59.313795Z","iopub.status.idle":"2022-03-15T21:49:59.342937Z","shell.execute_reply.started":"2022-03-15T21:49:59.313758Z","shell.execute_reply":"2022-03-15T21:49:59.342226Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = []\n\nfor image_id in ss.id:\n    image = Image.open(CFG.data_dir + \"test_img/\" +  image_id +  \".jpeg\" )\n    image = image.resize((CFG.img_size, CFG.img_size))\n    image = np.expand_dims(image, axis = 0)\n    preds.append(np.argmax(model.predict(image / 255.0)))\n","metadata":{"execution":{"iopub.status.busy":"2022-03-15T21:52:27.612081Z","iopub.execute_input":"2022-03-15T21:52:27.612658Z","iopub.status.idle":"2022-03-15T21:53:42.509744Z","shell.execute_reply.started":"2022-03-15T21:52:27.612619Z","shell.execute_reply":"2022-03-15T21:53:42.508705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nss['digit_sum'] = preds\n\nss.to_csv('submission.csv', index = False)","metadata":{},"execution_count":null,"outputs":[]}]}