{"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":"# Setup","metadata":{"id":"DAY5rHgTm7e8","papermill":{"duration":0.023302,"end_time":"2021-05-26T20:27:18.303907","exception":false,"start_time":"2021-05-26T20:27:18.280605","status":"completed"},"tags":[]}},{"cell_type":"code","source":"!pip install --no-index --no-deps --find-links /kaggle/input/requirements timm tf_slim\n!pip install --no-index /kaggle/input/requirements/neuralgym-0.0.1.zip\n!cp -r /kaggle/input/requirements/generative_inpainting /kaggle/generative_inpainting","metadata":{"_kg_hide-output":true,"scrolled":true,"execution":{"iopub.status.busy":"2022-06-06T19:31:03.445559Z","iopub.execute_input":"2022-06-06T19:31:03.446335Z","iopub.status.idle":"2022-06-06T19:31:20.843688Z","shell.execute_reply.started":"2022-06-06T19:31:03.446197Z","shell.execute_reply":"2022-06-06T19:31:20.842524Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Imports","metadata":{"id":"cZoSOL9Qm-Yr","papermill":{"duration":0.022448,"end_time":"2021-05-26T20:27:18.405632","exception":false,"start_time":"2021-05-26T20:27:18.383184","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport random","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.028508,"end_time":"2021-05-26T20:27:18.456521","exception":false,"start_time":"2021-05-26T20:27:18.428013","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:20.848452Z","iopub.execute_input":"2022-06-06T19:31:20.848746Z","iopub.status.idle":"2022-06-06T19:31:20.855987Z","shell.execute_reply.started":"2022-06-06T19:31:20.848713Z","shell.execute_reply":"2022-06-06T19:31:20.855091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm import tqdm\n\nimport cv2\nimport timm\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import DataLoader","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.382048,"end_time":"2021-05-26T20:27:21.861728","exception":false,"start_time":"2021-05-26T20:27:18.47968","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:20.858219Z","iopub.execute_input":"2022-06-06T19:31:20.858885Z","iopub.status.idle":"2022-06-06T19:31:23.942774Z","shell.execute_reply.started":"2022-06-06T19:31:20.858835Z","shell.execute_reply":"2022-06-06T19:31:23.941691Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import inpaint","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:31:23.945765Z","iopub.execute_input":"2022-06-06T19:31:23.946105Z","iopub.status.idle":"2022-06-06T19:31:30.496690Z","shell.execute_reply.started":"2022-06-06T19:31:23.946045Z","shell.execute_reply":"2022-06-06T19:31:30.495820Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Global","metadata":{"id":"0B00pe7mnBTj","papermill":{"duration":0.022047,"end_time":"2021-05-26T20:27:24.772727","exception":false,"start_time":"2021-05-26T20:27:24.75068","status":"completed"},"tags":[]}},{"cell_type":"code","source":"IMG_SIZE = 512\nPROJECT_FOLDER    = '/kaggle/input/creation-dataset-512x512/'\nTRAIN_DATA_FOLDER = '/kaggle/input/creation-dataset-512x512/train_images/'\nTEST_DATA_FOLDER  = '/kaggle/input/hotel-id-to-combat-human-trafficking-2022-fgvc9/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.029506,"end_time":"2021-05-26T20:27:24.886192","exception":false,"start_time":"2021-05-26T20:27:24.856686","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:30.498163Z","iopub.execute_input":"2022-06-06T19:31:30.498446Z","iopub.status.idle":"2022-06-06T19:31:30.503153Z","shell.execute_reply.started":"2022-06-06T19:31:30.498415Z","shell.execute_reply":"2022-06-06T19:31:30.502359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"random.seed(0)\nnp.random.seed(0)\ntorch.manual_seed(0)\ntorch.cuda.manual_seed(0)\nos.environ['PYTHONHASHSEED'] = str(0)\ntorch.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.030273,"end_time":"2021-05-26T20:27:25.039688","exception":false,"start_time":"2021-05-26T20:27:25.009415","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:30.504650Z","iopub.execute_input":"2022-06-06T19:31:30.504951Z","iopub.status.idle":"2022-06-06T19:31:30.524263Z","shell.execute_reply.started":"2022-06-06T19:31:30.504913Z","shell.execute_reply":"2022-06-06T19:31:30.523274Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Transformations","metadata":{"id":"xaJKvvuKnW4k","papermill":{"duration":0.022677,"end_time":"2021-05-26T20:27:25.084766","exception":false,"start_time":"2021-05-26T20:27:25.062089","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import albumentations as A\nimport albumentations.pytorch as APT","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.887575,"end_time":"2021-05-26T20:27:25.996509","exception":false,"start_time":"2021-05-26T20:27:25.108934","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:30.526183Z","iopub.execute_input":"2022-06-06T19:31:30.526697Z","iopub.status.idle":"2022-06-06T19:31:31.501935Z","shell.execute_reply.started":"2022-06-06T19:31:30.526651Z","shell.execute_reply":"2022-06-06T19:31:31.501114Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class RedSquare(A.DualTransform):\n    def apply(self, img, **params):\n        h, w, _ = img.shape\n        width  = random.randint(int(w / 6), int(w / 4))\n        height = random.randint(int(h / 6), int(h / 4))\n        left   = random.randint(0, w - width)\n        bot    = random.randint(0, h - height)\n        img[bot:bot+height, left:left+width] = [0, 0, 255]\n        return img\n\n    def apply_to_bbox(self, bbox, **params):\n        raise NotImplementedError()\n\n    def apply_to_keypoint(self, keypoint, **params):\n        raise NotImplementedError()\n\n    def get_transform_init_args_names(self):\n        return ()","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:31:31.503557Z","iopub.execute_input":"2022-06-06T19:31:31.503866Z","iopub.status.idle":"2022-06-06T19:31:31.513668Z","shell.execute_reply.started":"2022-06-06T19:31:31.503825Z","shell.execute_reply":"2022-06-06T19:31:31.512850Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_transform = A.Compose([\n    A.ToFloat(),\n    A.HorizontalFlip(p=0.5),\n    APT.transforms.ToTensorV2(),\n])\n\ntest_transform = A.Compose([\n    A.ToFloat(),\n    #RedSquare(p=1.0),\n    APT.transforms.ToTensorV2(),\n])","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:31:31.515324Z","iopub.execute_input":"2022-06-06T19:31:31.515998Z","iopub.status.idle":"2022-06-06T19:31:31.524958Z","shell.execute_reply.started":"2022-06-06T19:31:31.515952Z","shell.execute_reply":"2022-06-06T19:31:31.523958Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Test Inpaint","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nimage_id = random.choice(os.listdir(TRAIN_DATA_FOLDER))\nimage    = cv2.imread(TRAIN_DATA_FOLDER + image_id)\nimage    = cv2.resize(image, (512, 512))\nsquare   = RedSquare().apply(image.copy())\ninp      = inpaint.inpaint(square.copy())\n\nf, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(20,8))\nax1.imshow(image[...,::-1])\nax2.imshow(square[...,::-1])\nax3.imshow(inp)","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:31:31.529392Z","iopub.execute_input":"2022-06-06T19:31:31.529685Z","iopub.status.idle":"2022-06-06T19:31:48.722482Z","shell.execute_reply.started":"2022-06-06T19:31:31.529648Z","shell.execute_reply":"2022-06-06T19:31:48.721290Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Dataset","metadata":{}},{"cell_type":"code","source":"def open_and_preprocess_image(image_path):\n    im = cv2.imread(image_path)\n    im = cv2.resize(im, (512, 512))\n    return im\n\nclass HotelImageDataset:\n    def __init__(self, data, transform, data_folder, is_test):\n        self.data = data\n        self.transform = transform\n        self.data_folder = data_folder\n        self.is_test = is_test\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 + str(record['image_id'])\n        \n        image = open_and_preprocess_image(image_path)\n        if self.is_test:\n            image = inpaint.inpaint(image)\n        \n        image = np.array(image).astype(np.uint8)\n        return self.transform(image=image)","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.035126,"end_time":"2021-05-26T20:27:26.054791","exception":false,"start_time":"2021-05-26T20:27:26.019665","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:48.723630Z","iopub.execute_input":"2022-06-06T19:31:48.723929Z","iopub.status.idle":"2022-06-06T19:31:48.735863Z","shell.execute_reply.started":"2022-06-06T19:31:48.723890Z","shell.execute_reply":"2022-06-06T19:31:48.734844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{"id":"NMDM4PwPnced","papermill":{"duration":0.022524,"end_time":"2021-05-26T20:27:26.100477","exception":false,"start_time":"2021-05-26T20:27:26.077953","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class EmbeddingNet(nn.Module):\n    def __init__(self, n_classes, embed_size, backbone_name):\n        super(EmbeddingNet, self).__init__()\n        \n        self.embed_size = embed_size\n        self.backbone = timm.create_model(backbone_name, pretrained=False)\n        in_features = self.backbone.get_classifier().in_features\n\n        fc_name, _ = list(self.backbone.named_modules())[-1]\n        if fc_name == 'classifier':\n            self.backbone.classifier = nn.Identity()\n        elif fc_name == 'head.fc':\n            self.backbone.head.fc = nn.Identity()\n        elif fc_name == 'fc':\n            self.backbone.fc = nn.Identity()\n        else:\n            raise Exception('Unknown classifier layer: ' + fc_name)\n        \n        self.post = nn.Sequential(\n            nn.utils.weight_norm(nn.Linear(in_features, self.embed_size*2), dim=None),\n            nn.BatchNorm1d(self.embed_size*2),\n            nn.Dropout(0.2),\n            nn.utils.weight_norm(nn.Linear(self.embed_size*2, self.embed_size)),\n        )\n\n        self.classifier = nn.Sequential(\n            nn.BatchNorm1d(self.embed_size),\n            nn.Dropout(0.2),\n            nn.Linear(self.embed_size, n_classes),\n        )\n        \n        print(f'Model {backbone_name} EmbeddingNet - Features: {in_features}, Embeds: {self.embed_size}')\n        \n    def embed_and_classify(self, x):\n        x = self.forward(x)\n        return x, self.classifier(x)\n\n    def forward(self, x):\n        x = self.backbone(x)\n        x = x.view(x.size(0), -1)\n        return self.post(x)","metadata":{"papermill":{"duration":0.036253,"end_time":"2021-05-26T20:27:26.226858","exception":false,"start_time":"2021-05-26T20:27:26.190605","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:48.738039Z","iopub.execute_input":"2022-06-06T19:31:48.738731Z","iopub.status.idle":"2022-06-06T19:31:48.754159Z","shell.execute_reply.started":"2022-06-06T19:31:48.738683Z","shell.execute_reply":"2022-06-06T19:31:48.753251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Models","metadata":{}},{"cell_type":"code","source":"def get_model(model_type, backbone_name, n_classes, embed_size, checkpoint_path):\n    model = EmbeddingNet(n_classes, embed_size, backbone_name)\n    checkpoint = torch.load(checkpoint_path)\n    model.load_state_dict(checkpoint['model'])\n    return model.to('cuda')","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:31:48.755482Z","iopub.execute_input":"2022-06-06T19:31:48.756280Z","iopub.status.idle":"2022-06-06T19:31:48.767187Z","shell.execute_reply.started":"2022-06-06T19:31:48.756235Z","shell.execute_reply":"2022-06-06T19:31:48.766283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_array = [\n    get_model('classification', 'efficientnet_b0', 3043, 4096,\n              '/kaggle/input/classification-training/classification-model-latest.pt'),\n]","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:31:48.770948Z","iopub.execute_input":"2022-06-06T19:31:48.771457Z","iopub.status.idle":"2022-06-06T19:31:57.694779Z","shell.execute_reply.started":"2022-06-06T19:31:48.771421Z","shell.execute_reply":"2022-06-06T19:31:57.693945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model helper functions","metadata":{"id":"YMZYKhUSneMY","papermill":{"duration":0.022705,"end_time":"2021-05-26T20:27:26.272269","exception":false,"start_time":"2021-05-26T20:27:26.249564","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def get_embeds(loader, model, bar_desc):\n    outputs_all = []\n    model.eval()\n    with torch.no_grad():\n        t = tqdm(loader, desc=bar_desc)\n        for i, sample in enumerate(t):\n            input = sample['image'].to('cuda')\n            output = model(input)\n            outputs_all.extend(output.detach().cpu().numpy())            \n            \n    return outputs_all","metadata":{"papermill":{"duration":0.03194,"end_time":"2021-05-26T20:27:26.326785","exception":false,"start_time":"2021-05-26T20:27:26.294845","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:57.696559Z","iopub.execute_input":"2022-06-06T19:31:57.696840Z","iopub.status.idle":"2022-06-06T19:31:57.704906Z","shell.execute_reply.started":"2022-06-06T19:31:57.696798Z","shell.execute_reply":"2022-06-06T19:31:57.702574Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train and evaluate","metadata":{"id":"5JPdD2bpnniP","papermill":{"duration":0.02292,"end_time":"2021-05-26T20:27:26.956966","exception":false,"start_time":"2021-05-26T20:27:26.934046","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from sklearn.metrics.pairwise import cosine_similarity\n\ndef get_distances(input, base_embeds):\n    distances = 1\n    for i, model in enumerate(model_array):\n        output = model(input)\n        output = output.detach().cpu().numpy()\n        model_base_embeds = base_embeds[i]\n        output_distances = cosine_similarity(output, model_base_embeds)\n        distances *= output_distances\n    \n    return distances\n\ndef predict(loader, base_df, base_embeds, bar_desc):\n    with torch.no_grad():\n        t = tqdm(loader, desc=bar_desc)\n        for i, sample in enumerate(t):\n            input = sample['image'].to('cuda')\n            distances = get_distances(input, base_embeds)\n            \n            for dist in distances:\n                df = base_df.copy()\n                df['distance'] = dist\n                df = df.sort_values(by=['distance', 'hotel_id'], ascending=False).reset_index(drop=True)\n                yield df['hotel_id'].unique()[:5]\n\ndef find_closest_match(test_loader, base_loader):\n    base_embeds = {}\n    for i, model in enumerate(model_array):\n        base_embeds[i] = get_embeds(base_loader, model, 'Generating embeds for train')\n    return predict(test_loader, base_loader.dataset.data, base_embeds, 'Generating predictions')","metadata":{"papermill":{"duration":0.03471,"end_time":"2021-05-26T20:27:26.43577","exception":false,"start_time":"2021-05-26T20:27:26.40106","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:31:57.706258Z","iopub.execute_input":"2022-06-06T19:31:57.706701Z","iopub.status.idle":"2022-06-06T19:31:57.720994Z","shell.execute_reply.started":"2022-06-06T19:31:57.706658Z","shell.execute_reply":"2022-06-06T19:31:57.720091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Prepare Data","metadata":{}},{"cell_type":"code","source":"data_df = pd.read_csv(PROJECT_FOLDER + 'train_df.csv').drop(['Unnamed: 0'], axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:35:34.327163Z","iopub.execute_input":"2022-06-06T19:35:34.327434Z","iopub.status.idle":"2022-06-06T19:35:34.345055Z","shell.execute_reply.started":"2022-06-06T19:35:34.327405Z","shell.execute_reply":"2022-06-06T19:35:34.344216Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Validate\ntmp = data_df.copy()\ndata_df = data_df.sample(frac=0.9, random_state=0)\ntest_df = tmp[~tmp['image_id'].isin(data_df['image_id'])]\nTEST_DATA_FOLDER = TRAIN_DATA_FOLDER","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:35:34.466785Z","iopub.execute_input":"2022-06-06T19:35:34.467078Z","iopub.status.idle":"2022-06-06T19:35:34.479056Z","shell.execute_reply.started":"2022-06-06T19:35:34.467032Z","shell.execute_reply":"2022-06-06T19:35:34.478240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Submission\n#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.264905,"end_time":"2021-05-26T20:27:26.90949","exception":false,"start_time":"2021-05-26T20:27:26.644585","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:35:34.606892Z","iopub.execute_input":"2022-06-06T19:35:34.607194Z","iopub.status.idle":"2022-06-06T19:35:34.611311Z","shell.execute_reply.started":"2022-06-06T19:35:34.607162Z","shell.execute_reply":"2022-06-06T19:35:34.609972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f'Base: {len(data_df)}, test: {len(test_df)}')\ndata_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:35:34.740847Z","iopub.execute_input":"2022-06-06T19:35:34.741446Z","iopub.status.idle":"2022-06-06T19:35:34.752480Z","shell.execute_reply.started":"2022-06-06T19:35:34.741406Z","shell.execute_reply":"2022-06-06T19:35:34.751431Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_dataset = HotelImageDataset(data_df, base_transform, TRAIN_DATA_FOLDER, False)\nbase_loader  = DataLoader(base_dataset, num_workers=0, batch_size=8, shuffle=False)\n\ntest_dataset = HotelImageDataset(test_df, test_transform, TEST_DATA_FOLDER, False)\ntest_loader  = DataLoader(test_dataset, num_workers=0, batch_size=8, shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:35:35.209336Z","iopub.execute_input":"2022-06-06T19:35:35.210230Z","iopub.status.idle":"2022-06-06T19:35:35.216855Z","shell.execute_reply.started":"2022-06-06T19:35:35.210171Z","shell.execute_reply":"2022-06-06T19:35:35.215949Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Inference","metadata":{}},{"cell_type":"code","source":"# Validate\npreds = np.array(list(find_closest_match(test_loader, base_loader)))\ntest_df['hotel_id_pred'] = [str(list(l)).strip('[]').replace(',', '') for l in preds]","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:35:36.987537Z","iopub.execute_input":"2022-06-06T19:35:36.988198Z","iopub.status.idle":"2022-06-06T19:37:59.742329Z","shell.execute_reply.started":"2022-06-06T19:35:36.988159Z","shell.execute_reply":"2022-06-06T19:37:59.739022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc_pos_1 = (preds[:, 0] == test_df['hotel_id']).mean()\nacc_pos_2 = (preds[:, 1] == test_df['hotel_id']).mean()\nacc_pos_3 = (preds[:, 2] == test_df['hotel_id']).mean()\nacc_pos_4 = (preds[:, 3] == test_df['hotel_id']).mean()\nacc_pos_5 = (preds[:, 4] == test_df['hotel_id']).mean()\nscore = acc_pos_1 + (1 / 2) * acc_pos_2 + (1 / 3) * acc_pos_3 + (1 / 4) * acc_pos_4 + (1 / 5) * acc_pos_5\nprint(f'Score: {score:0.4f}')","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:37:59.744723Z","iopub.execute_input":"2022-06-06T19:37:59.745082Z","iopub.status.idle":"2022-06-06T19:37:59.763023Z","shell.execute_reply.started":"2022-06-06T19:37:59.745018Z","shell.execute_reply":"2022-06-06T19:37:59.762134Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Submission\n#preds = find_closest_match(test_loader, base_loader)\n#test_df['hotel_id'] = [str(list(l)).strip('[]').replace(',', '') for l in preds]\n#test_df.to_csv('submission.csv', index=False)","metadata":{"papermill":{"duration":0.050129,"end_time":"2021-05-26T20:28:36.896132","exception":false,"start_time":"2021-05-26T20:28:36.846003","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-06-06T19:35:20.161793Z","iopub.status.idle":"2022-06-06T19:35:20.162423Z","shell.execute_reply.started":"2022-06-06T19:35:20.162157Z","shell.execute_reply":"2022-06-06T19:35:20.162185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-06-06T19:37:59.764337Z","iopub.execute_input":"2022-06-06T19:37:59.764589Z","iopub.status.idle":"2022-06-06T19:37:59.777665Z","shell.execute_reply.started":"2022-06-06T19:37:59.764558Z","shell.execute_reply":"2022-06-06T19:37:59.776309Z"},"trusted":true},"execution_count":null,"outputs":[]}]}