{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":35150,"databundleVersionId":4957097,"sourceType":"competition"},{"sourceId":3951115,"sourceType":"datasetVersion","datasetId":1027206},{"sourceId":96549317,"sourceType":"kernelVersion"}],"dockerImageVersionId":30192,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Intro\nInference notebook for [Hotel-ID starter - classification - traning](https://www.kaggle.com/code/michaln/hotel-id-starter-classification-traning)\n\n","metadata":{"id":"DAY5rHgTm7e8","papermill":{"duration":0.024896,"end_time":"2022-03-24T14:00:54.588459","exception":false,"start_time":"2022-03-24T14:00:54.563563","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# Setup","metadata":{}},{"cell_type":"code","source":"import sys\nsys.path.append('../input/timm-pytorch-image-models/pytorch-image-models-master')\nimport timm","metadata":{"executionInfo":{"elapsed":16271,"status":"ok","timestamp":1619310548121,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"alleged-legislation","outputId":"c6541e5f-ffb4-4609-d6c6-39784e6a07b1","papermill":{"duration":0.036572,"end_time":"2022-03-24T14:00:54.649254","exception":false,"start_time":"2022-03-24T14:00:54.612682","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:05.535232Z","iopub.execute_input":"2025-02-17T20:53:05.535975Z","iopub.status.idle":"2025-02-17T20:53:14.319371Z","shell.execute_reply.started":"2025-02-17T20:53:05.535865Z","shell.execute_reply":"2025-02-17T20:53:14.318419Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Imports","metadata":{"id":"cZoSOL9Qm-Yr","papermill":{"duration":0.023644,"end_time":"2022-03-24T14:00:54.696898","exception":false,"start_time":"2022-03-24T14:00:54.673254","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport random\nimport os\nimport math","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","executionInfo":{"elapsed":14459,"status":"ok","timestamp":1619310548121,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"expired-matter","papermill":{"duration":0.030271,"end_time":"2022-03-24T14:00:54.751131","exception":false,"start_time":"2022-03-24T14:00:54.72086","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.322195Z","iopub.execute_input":"2025-02-17T20:53:14.322409Z","iopub.status.idle":"2025-02-17T20:53:14.326346Z","shell.execute_reply.started":"2025-02-17T20:53:14.322381Z","shell.execute_reply":"2025-02-17T20:53:14.325635Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from PIL import Image as pil_image\nfrom tqdm import tqdm","metadata":{"executionInfo":{"elapsed":16003,"status":"ok","timestamp":1619310550014,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"extreme-problem","papermill":{"duration":3.220402,"end_time":"2022-03-24T14:00:57.995239","exception":false,"start_time":"2022-03-24T14:00:54.774837","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.327222Z","iopub.execute_input":"2025-02-17T20:53:14.327376Z","iopub.status.idle":"2025-02-17T20:53:14.343656Z","shell.execute_reply.started":"2025-02-17T20:53:14.327357Z","shell.execute_reply":"2025-02-17T20:53:14.342986Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nfrom torch.utils.data import DataLoader","metadata":{"executionInfo":{"elapsed":19672,"status":"ok","timestamp":1619310554099,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"angry-domain","papermill":{"duration":2.727834,"end_time":"2022-03-24T14:01:00.766951","exception":false,"start_time":"2022-03-24T14:00:58.039117","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.344651Z","iopub.execute_input":"2025-02-17T20:53:14.344911Z","iopub.status.idle":"2025-02-17T20:53:14.357441Z","shell.execute_reply.started":"2025-02-17T20:53:14.344873Z","shell.execute_reply":"2025-02-17T20:53:14.356883Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Global","metadata":{"id":"0B00pe7mnBTj","papermill":{"duration":0.023573,"end_time":"2022-03-24T14:01:00.814976","exception":false,"start_time":"2022-03-24T14:01:00.791403","status":"completed"},"tags":[]}},{"cell_type":"code","source":"SEED = 42\nIMG_SIZE = 256\n\nPROJECT_FOLDER = \"../input/hotel-id-to-combat-human-trafficking-2022-fgvc9/\"\nTEST_DATA_FOLDER = PROJECT_FOLDER + \"test_images/\"","metadata":{"executionInfo":{"elapsed":589,"status":"ok","timestamp":1619310979015,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"contained-brief","papermill":{"duration":0.03175,"end_time":"2022-03-24T14:01:00.871686","exception":false,"start_time":"2022-03-24T14:01:00.839936","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.359016Z","iopub.execute_input":"2025-02-17T20:53:14.359239Z","iopub.status.idle":"2025-02-17T20:53:14.371912Z","shell.execute_reply.started":"2025-02-17T20:53:14.359213Z","shell.execute_reply":"2025-02-17T20:53:14.371366Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(os.listdir(PROJECT_FOLDER))","metadata":{"executionInfo":{"elapsed":879,"status":"ok","timestamp":1619310979515,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"PZvmFng7ctO3","outputId":"dce0cc91-8e70-4acc-a0b8-6763ffffd5ca","papermill":{"duration":0.031651,"end_time":"2022-03-24T14:01:00.927239","exception":false,"start_time":"2022-03-24T14:01:00.895588","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.372767Z","iopub.execute_input":"2025-02-17T20:53:14.372921Z","iopub.status.idle":"2025-02-17T20:53:14.384159Z","shell.execute_reply.started":"2025-02-17T20:53:14.372902Z","shell.execute_reply":"2025-02-17T20:53:14.383458Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def seed_everything(seed):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True","metadata":{"executionInfo":{"elapsed":600,"status":"ok","timestamp":1619310981653,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"eastern-content","papermill":{"duration":0.032105,"end_time":"2022-03-24T14:01:01.031949","exception":false,"start_time":"2022-03-24T14:01:00.999844","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.385280Z","iopub.execute_input":"2025-02-17T20:53:14.385759Z","iopub.status.idle":"2025-02-17T20:53:14.393636Z","shell.execute_reply.started":"2025-02-17T20:53:14.385724Z","shell.execute_reply":"2025-02-17T20:53:14.392964Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Dataset and transformations","metadata":{"id":"xaJKvvuKnW4k","papermill":{"duration":0.023988,"end_time":"2022-03-24T14:01:01.080488","exception":false,"start_time":"2022-03-24T14:01:01.0565","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import albumentations as A\nimport albumentations.pytorch as APT\nimport cv2 \n\n# used for training dataset - augmentations and occlusions\ntrain_transform = A.Compose([\n    A.HorizontalFlip(p=0.75),\n    A.VerticalFlip(p=0.25),\n    A.ShiftScaleRotate(p=0.5, border_mode=cv2.BORDER_CONSTANT),\n    A.OpticalDistortion(p=0.25),\n    A.Perspective(p=0.25),\n    A.CoarseDropout(p=0.5, min_holes=1, max_holes=6, \n                    min_height=IMG_SIZE//16, max_height=IMG_SIZE//4,\n                    min_width=IMG_SIZE//16,  max_width=IMG_SIZE//4), # normal coarse dropout\n    \n    A.CoarseDropout(p=0.75, max_holes=1, \n                    min_height=IMG_SIZE//4, max_height=IMG_SIZE//2,\n                    min_width=IMG_SIZE//4,  max_width=IMG_SIZE//2, \n                    fill_value=(255,0,0)),# simulating occlusions in test data\n\n    A.RandomBrightnessContrast(p=0.75),\n    A.ToFloat(),\n    APT.transforms.ToTensorV2(),\n])\n\n# used for validation dataset - only occlusions\nval_transform = A.Compose([\n    A.CoarseDropout(p=0.75, max_holes=1, \n                    min_height=IMG_SIZE//4, max_height=IMG_SIZE//2,\n                    min_width=IMG_SIZE//4,  max_width=IMG_SIZE//2, \n                    fill_value=(255,0,0)),# simulating occlusions\n    A.ToFloat(),\n    APT.transforms.ToTensorV2(),\n])","metadata":{"executionInfo":{"elapsed":1519,"status":"ok","timestamp":1619310984075,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"revolutionary-membership","papermill":{"duration":0.747421,"end_time":"2022-03-24T14:01:01.852072","exception":false,"start_time":"2022-03-24T14:01:01.104651","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:14.394523Z","iopub.execute_input":"2025-02-17T20:53:14.394710Z","iopub.status.idle":"2025-02-17T20:53:16.045537Z","shell.execute_reply.started":"2025-02-17T20:53:14.394688Z","shell.execute_reply":"2025-02-17T20:53:16.045000Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def pad_image(img):\n    w, h, c = np.shape(img)\n    if w > h:\n        pad = int((w - h) / 2)\n        img = cv2.copyMakeBorder(img, 0, 0, pad, pad, cv2.BORDER_CONSTANT, value=0)\n    else:\n        pad = int((h - w) / 2)\n        img = cv2.copyMakeBorder(img, pad, pad, 0, 0, cv2.BORDER_CONSTANT, value=0)\n        \n    return img\n\n\ndef open_and_preprocess_image(image_path):\n    img = cv2.imread(image_path)\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    img = pad_image(img)\n    return cv2.resize(img, (IMG_SIZE, IMG_SIZE))","metadata":{"execution":{"iopub.status.busy":"2025-02-17T20:53:16.046416Z","iopub.execute_input":"2025-02-17T20:53:16.046604Z","iopub.status.idle":"2025-02-17T20:53:16.052179Z","shell.execute_reply.started":"2025-02-17T20:53:16.046574Z","shell.execute_reply":"2025-02-17T20:53:16.051487Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class HotelImageDataset:\n    def __init__(self, data, transform=None, data_folder=\"train_images/\"):\n        self.data = data\n        self.data_folder = data_folder\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.data)\n    \n    def __getitem__(self, idx):\n        record = self.data.iloc[idx]\n        image_path = self.data_folder + record[\"image_id\"]\n        \n        image = np.array(open_and_preprocess_image(image_path)).astype(np.uint8)\n\n        if self.transform:\n            transformed = self.transform(image=image)\n            image = transformed[\"image\"]\n        \n        return {\n            \"image\" : image,\n        }","metadata":{"executionInfo":{"elapsed":1058,"status":"ok","timestamp":1619310984077,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"found-mouth","papermill":{"duration":0.037507,"end_time":"2022-03-24T14:01:01.914352","exception":false,"start_time":"2022-03-24T14:01:01.876845","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.053327Z","iopub.execute_input":"2025-02-17T20:53:16.053873Z","iopub.status.idle":"2025-02-17T20:53:16.064127Z","shell.execute_reply.started":"2025-02-17T20:53:16.053835Z","shell.execute_reply":"2025-02-17T20:53:16.063375Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model","metadata":{"id":"NMDM4PwPnced","papermill":{"duration":0.023902,"end_time":"2022-03-24T14:01:01.962307","exception":false,"start_time":"2022-03-24T14:01:01.938405","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class HotelIdModel(nn.Module):\n    def __init__(self, n_classes=100, backbone_name=\"resnet34\"):\n        super(HotelIdModel, self).__init__()\n        \n        self.backbone = timm.create_model(backbone_name, num_classes=n_classes, pretrained=False)\n\n    def forward(self, x):\n        return self.backbone(x)","metadata":{"papermill":{"duration":0.032166,"end_time":"2022-03-24T14:01:02.018479","exception":false,"start_time":"2022-03-24T14:01:01.986313","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.065036Z","iopub.execute_input":"2025-02-17T20:53:16.065266Z","iopub.status.idle":"2025-02-17T20:53:16.078304Z","shell.execute_reply.started":"2025-02-17T20:53:16.065237Z","shell.execute_reply":"2025-02-17T20:53:16.077578Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model helper functions","metadata":{"id":"YMZYKhUSneMY","papermill":{"duration":0.024153,"end_time":"2022-03-24T14:01:02.067537","exception":false,"start_time":"2022-03-24T14:01:02.043384","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def predict(loader, model, n_matches=5):\n    preds = []\n    with torch.no_grad():\n        t = tqdm(loader)\n        for i, sample in enumerate(t):\n            input = sample['image'].to(args.device)\n            outputs = model(input)\n            outputs = torch.sigmoid(outputs).detach().cpu().numpy()\n            preds.extend(outputs)\n    \n    # get 5 top predictions\n    preds = np.argsort(-np.array(preds), axis=1)[:, :5]\n    return preds","metadata":{"papermill":{"duration":0.034692,"end_time":"2022-03-24T14:01:02.127372","exception":false,"start_time":"2022-03-24T14:01:02.09268","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.079295Z","iopub.execute_input":"2025-02-17T20:53:16.079764Z","iopub.status.idle":"2025-02-17T20:53:16.091154Z","shell.execute_reply.started":"2025-02-17T20:53:16.079730Z","shell.execute_reply":"2025-02-17T20:53:16.090498Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import albumentations as A\nimport albumentations.pytorch as APT\nimport cv2 \n\n# used for training dataset - augmentations and occlusions\ntrain_transform = A.Compose([\n    A.RandomCrop(width=64, height=64),\n    A.HorizontalFlip(p=0.75),\n    #A.VerticalFlip(p=0.0),\n    A.ShiftScaleRotate(p=0.5, shift_limit=0.0625, scale_limit=0.1, rotate_limit=10, interpolation=cv2.INTER_NEAREST, border_mode=cv2.BORDER_CONSTANT),\n    A.OpticalDistortion(p=0.25, distort_limit=0.05, shift_limit=0.01),\n    A.Perspective(p=0.25, scale=(0.05, 0.1)),\n    A.ColorJitter(p=0.75, brightness=0.2, contrast=0.2, saturation=0.1, hue=0.05),\n    A.CoarseDropout(p=0.5, min_holes=1, max_holes=5, \n                    min_height=IMG_SIZE//16, max_height=IMG_SIZE//8,\n                    min_width=IMG_SIZE//16,  max_width=IMG_SIZE//8), # normal coarse dropout\n    \n    A.CoarseDropout(p=0.75, max_holes=1, \n                    min_height=IMG_SIZE//4, max_height=IMG_SIZE//2,\n                    min_width=IMG_SIZE//4,  max_width=IMG_SIZE//2, \n                    fill_value=(255,0,0)),# simulating occlusions in test data\n    #A.RandomBrightnessContrast(p=0.75),\n    A.ToFloat(),\n    APT.transforms.ToTensorV2(),\n])\n\n# used for validation dataset - only occlusions\nval_transform = A.Compose([\n    A.CoarseDropout(p=0.75, max_holes=1, \n                    min_height=IMG_SIZE//4, max_height=IMG_SIZE//2,\n                    min_width=IMG_SIZE//4,  max_width=IMG_SIZE//2, \n                    fill_value=(255,0,0)),# simulating occlusions\n    A.ToFloat(),\n    APT.transforms.ToTensorV2(),\n])\n\n# no augmentations\nbase_transform = A.Compose([\n    A.ToFloat(),\n    APT.transforms.ToTensorV2(),\n])","metadata":{"execution":{"iopub.status.busy":"2025-02-17T20:53:16.092122Z","iopub.execute_input":"2025-02-17T20:53:16.092712Z","iopub.status.idle":"2025-02-17T20:53:16.106347Z","shell.execute_reply.started":"2025-02-17T20:53:16.092676Z","shell.execute_reply":"2025-02-17T20:53:16.105779Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Prepare data","metadata":{"id":"AwShW1wXniD6","papermill":{"duration":0.023807,"end_time":"2022-03-24T14:01:02.175822","exception":false,"start_time":"2022-03-24T14:01:02.152015","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_df = pd.DataFrame(data={\"image_id\": os.listdir(TEST_DATA_FOLDER), \"hotel_id\": \"\"}).sort_values(by=\"image_id\")","metadata":{"executionInfo":{"elapsed":3742,"status":"ok","timestamp":1619311036476,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"discrete-right","outputId":"c21ed589-3139-4919-b5d5-07bcf6f1df15","papermill":{"duration":0.103381,"end_time":"2022-03-24T14:01:02.453866","exception":false,"start_time":"2022-03-24T14:01:02.350485","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.108843Z","iopub.execute_input":"2025-02-17T20:53:16.109350Z","iopub.status.idle":"2025-02-17T20:53:16.132779Z","shell.execute_reply.started":"2025-02-17T20:53:16.109323Z","shell.execute_reply":"2025-02-17T20:53:16.132315Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# code hotel_id mapping created in training notebook by encoding hotel_ids\nhotel_id_code_df = pd.read_csv('../input/resnet-training/hotel_id_code_mapping.csv')\nhotel_id_code_map = hotel_id_code_df.set_index('hotel_id_code').to_dict()[\"hotel_id\"]","metadata":{"execution":{"iopub.status.busy":"2025-02-17T20:53:16.133486Z","iopub.execute_input":"2025-02-17T20:53:16.133634Z","iopub.status.idle":"2025-02-17T20:53:16.148909Z","shell.execute_reply.started":"2025-02-17T20:53:16.133616Z","shell.execute_reply":"2025-02-17T20:53:16.148455Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Prepare model","metadata":{"id":"5JPdD2bpnniP","papermill":{"duration":0.023835,"end_time":"2022-03-24T14:01:02.502786","exception":false,"start_time":"2022-03-24T14:01:02.478951","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def get_model(model_type, backbone_name, checkpoint_path, args):\n    model = HotelIdModel(args.n_classes, backbone_name)\n        \n    checkpoint = torch.load(checkpoint_path)\n    model.load_state_dict(checkpoint[\"model\"])\n    model = model.to(args.device)\n    \n    return model","metadata":{"papermill":{"duration":0.031082,"end_time":"2022-03-24T14:01:02.557921","exception":false,"start_time":"2022-03-24T14:01:02.526839","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.149876Z","iopub.execute_input":"2025-02-17T20:53:16.150356Z","iopub.status.idle":"2025-02-17T20:53:16.154655Z","shell.execute_reply.started":"2025-02-17T20:53:16.150322Z","shell.execute_reply":"2025-02-17T20:53:16.153889Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class args:\n    batch_size = 64\n    num_workers = 2\n    n_classes = hotel_id_code_df[\"hotel_id\"].nunique()\n    device = ('cuda' if torch.cuda.is_available() else 'cpu')\n    \n    \nseed_everything(seed=SEED)\n\ntest_dataset = HotelImageDataset(test_df, base_transform, data_folder=TEST_DATA_FOLDER)\ntest_loader = DataLoader(test_dataset, num_workers=args.num_workers, batch_size=args.batch_size, shuffle=False)","metadata":{"executionInfo":{"elapsed":450,"status":"ok","timestamp":1619311064188,"user":{"displayName":"Jeom Jin-Ho","photoUrl":"","userId":"00155613517919499503"},"user_tz":-120},"id":"appointed-machinery","papermill":{"duration":0.069839,"end_time":"2022-03-24T14:01:02.65177","exception":false,"start_time":"2022-03-24T14:01:02.581931","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.155607Z","iopub.execute_input":"2025-02-17T20:53:16.155793Z","iopub.status.idle":"2025-02-17T20:53:16.227218Z","shell.execute_reply.started":"2025-02-17T20:53:16.155772Z","shell.execute_reply":"2025-02-17T20:53:16.226480Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model = get_model(\"classification\", \"resnet34\",\n                  \"../input/resnet-training/checkpoint-classification-model-resnet34-256x256.pt\", \n                  args)","metadata":{"papermill":{"duration":5.553999,"end_time":"2022-03-24T14:01:08.229948","exception":false,"start_time":"2022-03-24T14:01:02.675949","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:16.228366Z","iopub.execute_input":"2025-02-17T20:53:16.228576Z","iopub.status.idle":"2025-02-17T20:53:24.299650Z","shell.execute_reply.started":"2025-02-17T20:53:16.228544Z","shell.execute_reply":"2025-02-17T20:53:24.299110Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Submission","metadata":{"papermill":{"duration":0.024227,"end_time":"2022-03-24T14:01:08.278753","exception":false,"start_time":"2022-03-24T14:01:08.254526","status":"completed"},"tags":[]}},{"cell_type":"code","source":"%%time\n\npreds = predict(test_loader, model)\n# replace classes with hotel_id using mapping created in trainig notebook\npreds = [[hotel_id_code_map[b] for b in a] for a in preds]\n# transform array of hotel_ids into string\ntest_df[\"hotel_id\"] = [str(list(l)).strip(\"[]\").replace(\",\", \"\") for l in preds]\n\ntest_df.to_csv(\"submission.csv\", index=False)\ntest_df.head()","metadata":{"papermill":{"duration":0.047156,"end_time":"2022-03-24T14:01:08.414557","exception":false,"start_time":"2022-03-24T14:01:08.367401","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-02-17T20:53:24.300596Z","iopub.execute_input":"2025-02-17T20:53:24.300797Z","iopub.status.idle":"2025-02-17T20:53:30.853563Z","shell.execute_reply.started":"2025-02-17T20:53:24.300771Z","shell.execute_reply":"2025-02-17T20:53:30.852822Z"},"trusted":true},"outputs":[],"execution_count":null}]}