{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"lines=\"\"\"     \n        # v6\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-0.pth',  # cv 0.71911\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-1.pth',  # cv 0.71019\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-2.pth',  # cv 0.71818\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-3.pth',  # cv 0.70802\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-4.pth',  # cv 0.71676\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-5.pth',  # cv 0.70263\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-6.pth',  # cv 0.72409\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-7.pth',  # cv 0.71067\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-8.pth',  # cv 0.71555\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-9.pth',  # cv 0.71328\n        \n        # v7 (v6 w/ the secondary label)\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-0.pth',  # cv 0.70858\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-2.pth',  # cv 0.68995\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-4.pth',  # cv 0.71521\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-6.pth',  # cv 0.71755\n\n\"\"\".split('\\n')\nscores = ([int(l.split('# cv 0.')[-1])-68000 for l in lines if '# cv 0.' in l])\nscores","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# threshold by site_x\npower = 0.9\nthreshold1: float = 0.7\nthreshold2: float = 0.7\nthreshold3: float = 0.5\nthresholds = {1: threshold1, 2: threshold2, 3: threshold3}\n\n# max birds by site_x\nmax_birds = {1: 3, 2: 3, 3: 11}\nuse_models = list(range(10 + 4))\ndrop_models = []#[3, 5, 11]\n\nuse_models = list(set(use_models)-set(drop_models))\nprint('models used:',use_models)\n\n#model_weights_list = [1911, 1811, 1676, 2409, 1555] + [858, 1521]\n#model_weights_list = [1, 1, 0, 1, 0] # for test of compatibility with previous version\nmodel_weights_list = [scores[i] if i>9 else scores[i] for i in use_models]\n#model_weights_list = [1]*10+[1]*4\nprint('weights used :', model_weights_list)\n\nkm1: float = 0.45\nkm2: float = km1 ** 2\nkm3: float = km1 ** 3\n\nk_n,k_max, k_med, k_avg = 0.8, 0.2, 0.0, 0.0","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Install packages"},{"metadata":{"trusted":true,"_kg_hide-input":false,"_kg_hide-output":true},"cell_type":"code","source":"!pip install ../input/torchlibrosa/torchlibrosa-0.0.4-py3-none-any.whl","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":false,"_kg_hide-output":true},"cell_type":"code","source":"!pip install ../input/resnest/resnest-0.0.5-py3-none-any.whl","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"COMPARE: bool = True","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Import Libraries"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"_kg_hide-input":true,"scrolled":true},"cell_type":"code","source":"import os\nimport gc\nimport time\nimport math\nimport shutil\nimport random\nimport warnings\nimport typing as tp\nfrom pathlib import Path\n\nimport librosa\nimport numpy as np\nimport pandas as pd\n\nfrom torchlibrosa.stft import Spectrogram, LogmelFilterBank\n\nfrom resnest.torch import resnest50_fast_1s1x64d\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader\n\nwarnings.filterwarnings('ignore')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","collapsed":true,"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":false},"cell_type":"markdown","source":"# Define utilities"},{"metadata":{"trusted":true,"_kg_hide-input":true,"scrolled":true},"cell_type":"code","source":"def set_seed(seed: int = 42):\n    random.seed(seed)\n    np.random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"set_seed(42)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Read data"},{"metadata":{"trusted":true,"_kg_hide-input":true,"scrolled":true},"cell_type":"code","source":"ROOT = Path.cwd().parent\n\nINPUT_ROOT = ROOT / \"input\"\nRAW_DATA = INPUT_ROOT / \"birdsong-recognition\"\nTEST_AUDIO_DIR = RAW_DATA / \"test_audio\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"scrolled":true},"cell_type":"code","source":"if not TEST_AUDIO_DIR.exists():\n    TEST_AUDIO_DIR = INPUT_ROOT / \"birdcall-check\" / \"test_audio\"\n    test = pd.read_csv(INPUT_ROOT / \"birdcall-check\" / \"test.csv\")\nelse:\n    test = pd.read_csv(RAW_DATA / \"test.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"scrolled":true},"cell_type":"code","source":"sub = pd.read_csv(RAW_DATA / 'sample_submission.csv')\nsub.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Set parameters"},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"TARGET_SR = 32000\nmodel_config = {\n    \"base_model_name\": \"resnest50_fast_1s1x64d\",\n    \"pretrained\": False,\n    \"num_classes\": 264,\n    \"trained_weights\": [       \n        # v6\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-0.pth',  # cv 0.71911\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-1.pth',  # cv 0.71019\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-2.pth',  # cv 0.71818\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-3.pth',  # cv 0.70802\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-4.pth',  # cv 0.71676\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-5.pth',  # cv 0.70263\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-6.pth',  # cv 0.72409\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-7.pth',  # cv 0.71067\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-8.pth',  # cv 0.71555\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v6-fold-9.pth',  # cv 0.713284\n        \n        # v7 (v6 w/ the secondary label)\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-0.pth',  # cv 0.70858\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-2.pth',  # cv 0.68995\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-4.pth',  # cv 0.71521\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v7-fold-6.pth',  # cv 0.71755\n        '../input/birdcall-resnest/resnest50-fast-1s1x64d-gru-att-v4-fold-0.pth'\n    ]\n}","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Definition"},{"metadata":{"trusted":true,"_kg_hide-input":true,"scrolled":true},"cell_type":"code","source":"BIRD_CODE = {\n    'aldfly': 0, 'ameavo': 1, 'amebit': 2, 'amecro': 3, 'amegfi': 4,\n    'amekes': 5, 'amepip': 6, 'amered': 7, 'amerob': 8, 'amewig': 9,\n    'amewoo': 10, 'amtspa': 11, 'annhum': 12, 'astfly': 13, 'baisan': 14,\n    'baleag': 15, 'balori': 16, 'banswa': 17, 'barswa': 18, 'bawwar': 19,\n    'belkin1': 20, 'belspa2': 21, 'bewwre': 22, 'bkbcuc': 23, 'bkbmag1': 24,\n    'bkbwar': 25, 'bkcchi': 26, 'bkchum': 27, 'bkhgro': 28, 'bkpwar': 29,\n    'bktspa': 30, 'blkpho': 31, 'blugrb1': 32, 'blujay': 33, 'bnhcow': 34,\n    'boboli': 35, 'bongul': 36, 'brdowl': 37, 'brebla': 38, 'brespa': 39,\n    'brncre': 40, 'brnthr': 41, 'brthum': 42, 'brwhaw': 43, 'btbwar': 44,\n    'btnwar': 45, 'btywar': 46, 'buffle': 47, 'buggna': 48, 'buhvir': 49,\n    'bulori': 50, 'bushti': 51, 'buwtea': 52, 'buwwar': 53, 'cacwre': 54,\n    'calgul': 55, 'calqua': 56, 'camwar': 57, 'cangoo': 58, 'canwar': 59,\n    'canwre': 60, 'carwre': 61, 'casfin': 62, 'caster1': 63, 'casvir': 64,\n    'cedwax': 65, 'chispa': 66, 'chiswi': 67, 'chswar': 68, 'chukar': 69,\n    'clanut': 70, 'cliswa': 71, 'comgol': 72, 'comgra': 73, 'comloo': 74,\n    'commer': 75, 'comnig': 76, 'comrav': 77, 'comred': 78, 'comter': 79,\n    'comyel': 80, 'coohaw': 81, 'coshum': 82, 'cowscj1': 83, 'daejun': 84,\n    'doccor': 85, 'dowwoo': 86, 'dusfly': 87, 'eargre': 88, 'easblu': 89,\n    'easkin': 90, 'easmea': 91, 'easpho': 92, 'eastow': 93, 'eawpew': 94,\n    'eucdov': 95, 'eursta': 96, 'evegro': 97, 'fiespa': 98, 'fiscro': 99,\n    'foxspa': 100, 'gadwal': 101, 'gcrfin': 102, 'gnttow': 103, 'gnwtea': 104,\n    'gockin': 105, 'gocspa': 106, 'goleag': 107, 'grbher3': 108, 'grcfly': 109,\n    'greegr': 110, 'greroa': 111, 'greyel': 112, 'grhowl': 113, 'grnher': 114,\n    'grtgra': 115, 'grycat': 116, 'gryfly': 117, 'haiwoo': 118, 'hamfly': 119,\n    'hergul': 120, 'herthr': 121, 'hoomer': 122, 'hoowar': 123, 'horgre': 124,\n    'horlar': 125, 'houfin': 126, 'houspa': 127, 'houwre': 128, 'indbun': 129,\n    'juntit1': 130, 'killde': 131, 'labwoo': 132, 'larspa': 133, 'lazbun': 134,\n    'leabit': 135, 'leafly': 136, 'leasan': 137, 'lecthr': 138, 'lesgol': 139,\n    'lesnig': 140, 'lesyel': 141, 'lewwoo': 142, 'linspa': 143, 'lobcur': 144,\n    'lobdow': 145, 'logshr': 146, 'lotduc': 147, 'louwat': 148, 'macwar': 149,\n    'magwar': 150, 'mallar3': 151, 'marwre': 152, 'merlin': 153, 'moublu': 154,\n    'mouchi': 155, 'moudov': 156, 'norcar': 157, 'norfli': 158, 'norhar2': 159,\n    'normoc': 160, 'norpar': 161, 'norpin': 162, 'norsho': 163, 'norwat': 164,\n    'nrwswa': 165, 'nutwoo': 166, 'olsfly': 167, 'orcwar': 168, 'osprey': 169,\n    'ovenbi1': 170, 'palwar': 171, 'pasfly': 172, 'pecsan': 173, 'perfal': 174,\n    'phaino': 175, 'pibgre': 176, 'pilwoo': 177, 'pingro': 178, 'pinjay': 179,\n    'pinsis': 180, 'pinwar': 181, 'plsvir': 182, 'prawar': 183, 'purfin': 184,\n    'pygnut': 185, 'rebmer': 186, 'rebnut': 187, 'rebsap': 188, 'rebwoo': 189,\n    'redcro': 190, 'redhea': 191, 'reevir1': 192, 'renpha': 193, 'reshaw': 194,\n    'rethaw': 195, 'rewbla': 196, 'ribgul': 197, 'rinduc': 198, 'robgro': 199,\n    'rocpig': 200, 'rocwre': 201, 'rthhum': 202, 'ruckin': 203, 'rudduc': 204,\n    'rufgro': 205, 'rufhum': 206, 'rusbla': 207, 'sagspa1': 208, 'sagthr': 209,\n    'savspa': 210, 'saypho': 211, 'scatan': 212, 'scoori': 213, 'semplo': 214,\n    'semsan': 215, 'sheowl': 216, 'shshaw': 217, 'snobun': 218, 'snogoo': 219,\n    'solsan': 220, 'sonspa': 221, 'sora': 222, 'sposan': 223, 'spotow': 224,\n    'stejay': 225, 'swahaw': 226, 'swaspa': 227, 'swathr': 228, 'treswa': 229,\n    'truswa': 230, 'tuftit': 231, 'tunswa': 232, 'veery': 233, 'vesspa': 234,\n    'vigswa': 235, 'warvir': 236, 'wesblu': 237, 'wesgre': 238, 'weskin': 239,\n    'wesmea': 240, 'wessan': 241, 'westan': 242, 'wewpew': 243, 'whbnut': 244,\n    'whcspa': 245, 'whfibi': 246, 'whtspa': 247, 'whtswi': 248, 'wilfly': 249,\n    'wilsni1': 250, 'wiltur': 251, 'winwre3': 252, 'wlswar': 253, 'wooduc': 254,\n    'wooscj2': 255, 'woothr': 256, 'y00475': 257, 'yebfly': 258, 'yebsap': 259,\n    'yehbla': 260, 'yelwar': 261, 'yerwar': 262, 'yetvir': 263\n}\nBIRDS = list(BIRD_CODE.keys())\nINV_BIRD_CODE = {v: k for k, v in BIRD_CODE.items()}","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"from scipy.signal import butter, lfilter, freqz\n\n\ndef butter_bandpass(lowcut: int = 500, highcut: int = 15000, fs: int = 32000, order: int = 5):\n    nyq = 0.5 * fs\n    low = lowcut / nyq\n    high = highcut / nyq\n    b, a = butter(order, [low, high], btype='band')\n    return b, a\n\n\ndef butter_bandpass_filter(data: np.ndarray, lowcut: int = 500, highcut: int = 15000, fs: int = 32000, order: int = 5):\n    b, a = butter_bandpass(lowcut, highcut, fs, order=order)\n    y = lfilter(b, a, data)\n    return y","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# DataLoader"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"def pad_raw_waveform(y: np.ndarray, period: int = 5, sr: int = 32000):\n    total_length: int = period * sr\n    empty_length: int = total_length - y.shape[0]\n    if empty_length < 2:\n        return y\n    pad_y = np.zeros((total_length,), dtype=y.dtype)\n    pad_y[empty_length // 2:- empty_length // 2] = y\n    return pad_y","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true,"scrolled":true},"cell_type":"code","source":"class TestDataset(Dataset):\n    def __init__(self, df: pd.DataFrame, clip: np.ndarray):\n        self.df = df\n        self.clip = clip.astype(np.float32)\n        self.sr: int = 32000\n        self.period: int = 5\n\n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, idx: int):\n        sample = self.df.loc[idx, :]\n        site = sample.site\n        row_id = sample.row_id\n\n        if site == 'site_3':\n            entire_len_y = len(self.clip)\n\n            start: int = 0\n            end: int = self.sr * self.period\n\n            ys = []\n            while entire_len_y > start:\n                y_batch = self.clip[start:end].astype(np.float32)\n                len_y = y_batch.shape[0]\n\n                if len_y != (self.sr * self.period):\n                    y_batch = pad_raw_waveform(y_batch)\n                    break\n                    \n                # 0% overlap\n                start = end\n                end = end + self.sr * self.period\n\n                ys.append(y_batch)\n\n            ys = np.asarray(ys)\n\n            return ys, row_id, site\n        else:\n            end_seconds = int(sample.seconds)\n            start_seconds = int(end_seconds - self.period)\n\n            start_index = self.sr * start_seconds\n            end_index = self.sr * end_seconds\n\n            y = self.clip[start_index:end_index]\n\n            return y, row_id, site","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Modules"},{"metadata":{"_kg_hide-input":true,"trusted":true,"scrolled":true},"cell_type":"code","source":"class AttentPool(nn.Module):\n    def __init__(self, in_channel: int, out_channel: int, temperature: float = 10.0):\n        super().__init__()\n        self.temperature = temperature\n        self.conv = nn.Conv1d(\n            in_channels=in_channel, \n            out_channels=out_channel, \n            kernel_size=1, \n            stride=1, \n            padding=0, \n            bias=False\n        )\n        self.bn = nn.BatchNorm1d(out_channel)\n\n    def forward(self, x):\n        attention = self.bn(self.conv(x))\n        attention = torch.tanh(attention / self.temperature) * self.temperature\n        attention = torch.softmax(attention, dim=-1)\n        return attention","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true,"scrolled":true},"cell_type":"code","source":"class BetaMish(nn.Module):\n    def __init__(self, beta: float = 1.5):\n        super().__init__()\n        self.beta = beta\n\n    def forward(self, x):\n        return x * torch.tanh(torch.log(torch.pow((1.0 + torch.exp(x)), self.beta)))","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true,"scrolled":true},"cell_type":"code","source":"class RoI(nn.Module):\n    def __init__(self, ks: int = 3):\n        super().__init__() \n        self.ks = ks\n\n    def forward(self, x):\n        x = torch.mean(x, axis=3)\n        x1 = F.max_pool1d(x, kernel_size=self.ks, stride=1, padding=self.ks // 2)\n        x2 = F.avg_pool1d(x, kernel_size=self.ks, stride=1, padding=self.ks // 2)\n        return x1 + x2","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Models"},{"metadata":{"_kg_hide-input":true,"trusted":true,"scrolled":true},"cell_type":"code","source":"class ResNeSt50GRUAttV6(nn.Module):\n    def __init__(\n            self,\n            sample_rate: int = 32000,\n            window_size: int = 1024,\n            hop_size: int = 320,\n            mel_bins: int = 128,\n            fmin: int = 500,\n            fmax: int = 15000,\n            classes_num: int = 264,\n    ):\n        super().__init__()\n\n        window = 'hann'\n        center = True\n        pad_mode = 'reflect'\n        ref = 1.0\n        amin = 1e-10\n        top_db = None\n\n        self.backbone = resnest50_fast_1s1x64d(pretrained=False)\n        \n        self.emb_size: int = 2048\n        \n        self.spectrogram_extractor = Spectrogram(\n            n_fft=window_size,\n            hop_length=hop_size,\n            win_length=window_size,\n            window=window,\n            center=center,\n            pad_mode=pad_mode,\n            freeze_parameters=True\n        )\n        self.logmel_extractor = LogmelFilterBank(\n            sr=sample_rate,\n            n_fft=window_size,\n            n_mels=mel_bins,\n            fmin=fmin,\n            fmax=fmax,\n            ref=ref,\n            amin=amin,\n            top_db=top_db,\n            freeze_parameters=True\n        )\n\n        self.dropout = nn.Dropout(p=.5)\n        \n        self.roi_pool = RoI(ks=3)\n        self.gru = nn.GRU(\n            input_size=self.emb_size, hidden_size=self.emb_size // 2, num_layers=1, \n            bias=True, batch_first=True, bidirectional=True\n        )\n        self.bn = nn.BatchNorm1d(self.emb_size)\n        self.act = BetaMish(beta=1.5)\n\n        self.probability = nn.Conv1d(self.emb_size, 264, kernel_size=1, bias=False)\n        self.attention = AttentPool(self.emb_size, 264)\n        self.eps: float = 1e-6\n\n    def normalize(self, x):\n        x = (x - x.mean()) / (x.std() + self.eps)\n        \n        norm_min, norm_max = x.min(), x.max()\n        if (norm_max - norm_min) > self.eps:\n            x[x < norm_min] = norm_min\n            x[x > norm_max] = norm_max\n            x = (x - norm_min) / (norm_max - norm_min)\n        else:\n            x = torch.zeros_like(x)\n        \n        return x\n\n    def cnn_feature_extractor(self, x):\n        x = self.backbone.conv1(x)\n        x = self.backbone.bn1(x)\n        x = self.backbone.relu(x)\n        x = self.backbone.maxpool(x)\n\n        x1 = self.backbone.layer1(x)\n        x2 = self.backbone.layer2(x1)\n        x3 = self.backbone.layer3(x2)\n        x4 = self.backbone.layer4(x3)\n        \n        return x4\n    \n\n    def preprocess(self, x):\n        x = self.spectrogram_extractor(x)  # (batch_size, 1, time_steps, freq_bins)\n        x = self.logmel_extractor(x)       # (batch_size, 1, time_steps, mel_bins)\n        \n        # 1 ch to 3 ch\n        x = torch.cat([x, x, x], dim=1)\n        \n        x = x.transpose(1, 3)\n        x = self.normalize(x)\n        x = x.transpose(1, 3)\n        \n        return x\n\n    def forward(self, x):\n        x = self.preprocess(x)\n        x = self.cnn_feature_extractor(x)\n\n        x = self.roi_pool(x)\n        x = self.dropout(x)\n        \n        x = x.transpose(1, 2)\n        x, _ = self.gru(x)\n        x = x.transpose(1, 2)\n        \n        x = self.bn(x)\n        x = self.act(x)\n        x = self.dropout(x)\n        \n        probability = torch.sigmoid(self.probability(x))             # frame-wise\n        attention = self.attention(x)\n        clipwise_output = torch.sum(attention * probability, dim=2)  # clip-wise\n        clipwise_output = torch.clamp(clipwise_output, self.eps, 1.0 - self.eps)\n        \n        return clipwise_output","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Load Models"},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"use_models","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true,"scrolled":true,"_kg_hide-input":true},"cell_type":"code","source":"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n\nmodels = []\nfor model_number,model_path in enumerate(model_config[\"trained_weights\"]):\n    print(model_path)\n    if model_number in use_models:\n        if 'resnest50-fast-1s1x64d-gru-att-v6-' in model_path or 'resnest50-fast-1s1x64d-gru-att-v7-' in model_path:\n            model = ResNeSt50GRUAttV6().to(device)\n        else:\n            raise\n\n        model.load_state_dict(torch.load(model_path, map_location=device))\n        model.eval()\n        models.append(model)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"print(f'total {len(models)} models',use_models)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Prediction"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"def prediction_for_clip_v2(\n    test_df: pd.DataFrame, \n    clip: np.ndarray, \n):\n    global models\n\n    dataset = TestDataset(df=test_df, clip=clip)\n    loader = DataLoader(dataset, batch_size=1, shuffle=False)\n    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n\n    results = []\n    for image, row_id, site in loader:\n        site: str = site[0]\n        row_id: str = row_id[0]\n        site_no: int = int(site[-1])\n\n        if site in {'site_1', 'site_2'}:\n            image = image.to(device)\n            with torch.no_grad():\n                for i, model in enumerate(models):\n                    proba = model(image).detach().cpu().numpy().reshape(-1)\n                    results.append(\n                        [site_no, row_id.split('_')[-2], i, int(row_id.split('_')[-1])] + proba.tolist()\n                    )\n        else:  # site_3\n            image = image.squeeze(0)\n\n            batch_size: int = 16\n            whole_size: int = image.size(0)\n\n            n_iter: int  = whole_size // batch_size\n            if whole_size % batch_size:\n                n_iter += 1\n\n            for batch_i in range(n_iter):\n                batch = image[batch_i * batch_size:(batch_i + 1) * batch_size]\n                if batch.ndim == 3:\n                    batch = batch.unsqueeze(0)\n\n                batch = batch.to(device)\n                with torch.no_grad():\n                    for i, model in enumerate(models):\n                        proba = model(batch).detach().cpu().numpy()\n                        for j, p in enumerate(proba):\n                            results.append(\n                                [site_no, row_id.split('_')[-1], i, 5 * (batch_size * batch_i + j + 1)] + p.tolist()\n                            )\n\n    results = pd.DataFrame(results, columns=['site', 'audio_id', 'model_name', 'seconds'] + BIRDS)\n    return results","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"def prediction_v2(\n    test_df: pd.DataFrame,\n    test_audio: Path,\n    target_sr: int,\n    use_denoise: bool = False,\n):\n    unique_audio_id = test_df.audio_id.unique()\n\n    prediction_dfs = []\n    for audio_id in unique_audio_id:\n        clip, _ = librosa.load(\n            test_audio / (audio_id + '.mp3'),\n            sr=target_sr,\n            mono=True,\n            res_type='kaiser_fast'\n        )\n        # Apply butter bandpass filter w/ cutoff freq 500 ~ 15000 Hz\n        # default is off\n        if use_denoise:\n            clip = butter_bandpass_filter(clip)\n\n        test_df_for_audio_id = test_df.query(\n            f\"audio_id == '{audio_id}'\"\n        ).reset_index(drop=True)\n\n        prediction_dict = prediction_for_clip_v2(\n            test_df_for_audio_id,\n            clip=clip,\n        )\n\n        prediction_dfs.append(prediction_dict)\n    \n    prediction_df = pd.concat(prediction_dfs, axis=0, sort=False).reset_index(drop=True)\n    return prediction_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred_v2 = prediction_v2(\n    test_df=test,\n    test_audio=TEST_AUDIO_DIR,\n    target_sr=TARGET_SR,\n)\npred_v2","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Post-Processing"},{"metadata":{"_kg_hide-input":false,"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":false,"trusted":true},"cell_type":"code","source":"f1_obj = [2. / (i + 1) for i in range(1, 100)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(models)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"weights = pd.DataFrame(use_models, columns=['model_name'])\nweights['model_weight'] = model_weights_list\nmodel_weights = weights.model_weight / weights.model_weight.sum()\nmodel_weights","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def combine_models(df: pd.DataFrame, power: float = .95):\n    return (\n        df.set_index(['site', 'audio_id', 'model_name', 'seconds']) ** power\n    ).reset_index().groupby(['site', 'audio_id', 'seconds']).apply(\n        lambda x: x.set_index('model_name')[BIRDS].T.dot(model_weights) ** (1. / power)\n    ).reset_index()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"res1 = combine_models(pred_v2, power)\nres1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def inside_5s(df: pd.DataFrame):\n    res = pd.DataFrame()\n    for audio_id in df.audio_id.unique():\n        df0 = df[df.audio_id == audio_id]\n        site = df0['site'].iloc[0]\n\n        df0 = df0.drop(['site', 'audio_id'], axis=1).set_index('seconds').sort_index()\n        if site == 3: \n            ret = df0.max()\n            ret.name = np.nan\n        else: \n            ret = df0  #.rolling(3,min_periods=0).shift(1).mean()\n        ret['audio_id'] = audio_id\n        res = res.append(ret)\n    return res.reset_index().set_index('audio_id').reset_index()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"res2 = inside_5s(res1)\nres2","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"presubmission0 = test.merge(res2, on=['audio_id', 'seconds'])\npresubmission0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def neighbor_kernel(df):\n    tmp = df.sort_values(['audio_id', 'seconds']).groupby(['audio_id'])[BIRDS]\n    kernel = lambda df0: km1 * (df0.shift(-1, fill_value=0) + df0.shift(1, fill_value=0)) + km2 * (df0.shift(-2, fill_value=0) + df0.shift(2, fill_value=0))\n    return kernel(tmp)\n\n\ndef audio_id_kernel(df):\n    df = df.sort_values(['audio_id','seconds']).copy()\n    df_max = df[['audio_id','seconds']].merge(df.groupby('audio_id')[BIRDS].max(),on='audio_id').sort_values(['audio_id','seconds']).set_index(['audio_id','seconds'])\n    df_med = df[['audio_id','seconds']].merge(df.groupby('audio_id')[BIRDS].median(),on='audio_id').sort_values(['audio_id','seconds']).set_index(['audio_id','seconds'])\n    df_avg = df[['audio_id','seconds']].merge(df.groupby('audio_id')[BIRDS].mean(),on='audio_id').sort_values(['audio_id','seconds']).set_index(['audio_id','seconds'])\n    \n    ret = df.set_index(['audio_id','seconds']).copy()\n    df1 = df.copy()\n    df1[BIRDS] = 1\n    ret[BIRDS] += k_n * neighbor_kernel(df).values / (0.5 * (1 + neighbor_kernel(df1).values))\n    ret[BIRDS] += (k_max * df_max)\n\n    return test[['row_id']].merge(ret.reset_index())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"presubmission1 = audio_id_kernel(presubmission0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def apply_thresholds(row, thresholds=thresholds, max_birds=max_birds, f1_obj=f1_obj):\n    row_id = row['row_id']\n    site = int(row_id.split('_')[1])\n    threshold = thresholds[site]\n    max_birds = max_birds[site]\n    vp = row[BIRDS] > threshold\n    prob = row[BIRDS].sort_values()[-max_birds:][::-1]\n    n_birds = np.argmax(prob.values.cumsum() * f1_obj[:len(prob)]) + 1\n    n_birds = n_birds if prob[:n_birds].sum() * f1_obj[n_birds - 1] > threshold else 0\n    birds = prob.index[:n_birds]\n    return ' '.join(sorted(birds))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = test[['row_id']].copy().merge(presubmission1)\nsubmission['birds'] = submission.apply(apply_thresholds, axis=1)\nsubmission = submission[['row_id', 'birds']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.replace('nocall', '')\nsubmission = submission.replace('', 'nocall')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.to_csv(\"submission.csv\", index=False)\nsubmission","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"if COMPARE:\n    # open('submission1.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly hamfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly hamfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_30,btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_50,nocall\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly buwwar\\nsite_3_96779836288745728306903d54e264dd,aldfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,aldfly\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly\\n')\n    # open('submission2.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly hamfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,comyel aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_30,btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,amerob scatan btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_50,nocall\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly buwwar\\nsite_3_96779836288745728306903d54e264dd,aldfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,aldfly\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly\\n')\n    # open('submission3.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,amered chswar\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,nocall\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,nocall\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly olsfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,casfin\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,nocall\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,nocall\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly hamfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,hamfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,casfin\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,casfin\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_30,btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,amerob scatan\\nsite_2_899616723a32409c996f6f3441646c2a_50,btnwar\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly buwwar\\nsite_3_96779836288745728306903d54e264dd,aldfly hamfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,aldfly\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly hamfly\\n')\n    # open('submission4.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,comyel aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,aldfly btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_30,btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,scatan amerob\\nsite_2_899616723a32409c996f6f3441646c2a_50,nocall\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly buwwar\\nsite_3_96779836288745728306903d54e264dd,aldfly hamfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,aldfly\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly hamfly\\n')\n    # open('submission4.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly hamfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,aldfly amerob\\nsite_2_899616723a32409c996f6f3441646c2a_30,btnwar aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_50,nocall\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel magwar\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly\\nsite_3_96779836288745728306903d54e264dd,aldfly hamfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,nocall\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly\\n')\n    # open('submission5.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly amered\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly hamfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly hamfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,aldfly amerob\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,aldfly amerob btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_30,aldfly btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,amerob scatan\\nsite_2_899616723a32409c996f6f3441646c2a_50,nocall\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly\\nsite_3_96779836288745728306903d54e264dd,aldfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,nocall\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly\\n')\n    open('submission6.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly hamfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,nocall\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_30,aldfly btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_40,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_45,nocall\\nsite_2_899616723a32409c996f6f3441646c2a_50,nocall\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly\\nsite_3_96779836288745728306903d54e264dd,aldfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,nocall\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly')                                      \n\n    # !echo \"Difference /wo post\"\n    # !diff submission0.csv submission.csv\n    # !echo \"Difference vs https://www.kaggle.com/leodav/birds-inference-max-2?scriptVersionId=40764448:0.575\"\n    # !diff submission1.csv submission.csv\n    # !echo \"Difference vs https://www.kaggle.com/leodav/birds-inference-max-2?scriptVersionId=41103579:0.577\"\n    # !diff submission2.csv submission.csv\n    # !echo \"Difference vs https://www.kaggle.com/leodav/birds-inference-max-2?scriptVersionId=41105565:0.578\"\n    # !diff submission3.csv submission.csv\n    !echo \"Difference vs https://www.kaggle.com/leodav/birds-inf-three-v2?scriptVersionId=42338562:0.584\"\n    !diff submission6.csv submission.csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"if COMPARE:\n    open('submission7.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly amered\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,comyel fiespa\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,aldfly comyel\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,aldfly btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,aldfly amerob btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_30,amerob btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly amerob\\nsite_2_899616723a32409c996f6f3441646c2a_40,aldfly amerob\\nsite_2_899616723a32409c996f6f3441646c2a_45,amerob\\nsite_2_899616723a32409c996f6f3441646c2a_50,amerob btnwar\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly\\nsite_3_96779836288745728306903d54e264dd,aldfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,aldfly\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly\\n')\n\n    !echo \"Difference vs 0.595 LB\"\n    !diff submission7.csv submission.csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"if COMPARE:\n    open('submission8.csv','w').write('row_id,birds\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_5,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_10,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_15,aldfly\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_20,aldfly amered\\nsite_1_41e6fe6504a34bf6846938ba78d13df1_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_5,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_10,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_15,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_20,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_25,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_30,aldfly\\nsite_1_cce64fffafed40f2b2f3d3413ec1c4c2_35,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_5,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_10,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_15,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_20,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_25,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_30,aldfly\\nsite_1_99af324c881246949408c0b1ae54271f_35,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_5,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_10,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_15,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_20,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_25,aldfly\\nsite_1_6ab74e177aa149468a39ca10beed6222_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_5,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_10,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_15,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_20,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_25,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_30,aldfly\\nsite_1_b2fd3f01e9284293a1e33f9c811a2ed6_35,aldfly\\nsite_2_de62b37ebba749d2abf29d4a493ea5d4_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_5,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_10,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_15,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_20,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_25,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_30,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_35,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_40,aldfly\\nsite_2_8680a8dd845d40f296246dbed0d37394_45,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_5,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_10,aldfly\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_15,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_20,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_25,comyel fiespa\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_30,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_35,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_40,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_45,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_50,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_55,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_60,nocall\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_65,aldfly comyel\\nsite_2_940d546e5eb745c9a74bce3f35efa1f9_70,aldfly comyel\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_5,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_10,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_15,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_20,aldfly\\nsite_2_07ab324c602e4afab65ddbcc746c31b5_25,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_5,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_10,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_15,aldfly btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_20,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_25,aldfly amerob btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_30,aldfly amerob btnwar\\nsite_2_899616723a32409c996f6f3441646c2a_35,aldfly\\nsite_2_899616723a32409c996f6f3441646c2a_40,aldfly amerob\\nsite_2_899616723a32409c996f6f3441646c2a_45,amerob\\nsite_2_899616723a32409c996f6f3441646c2a_50,amerob btnwar\\nsite_3_9cc5d9646f344f1bbb52640a988fe902,aldfly comloo comyel\\nsite_3_a56e20a518684688a9952add8a9d5213,aldfly\\nsite_3_96779836288745728306903d54e264dd,aldfly\\nsite_3_f77783ba4c6641bc918b034a18c23e53,aldfly\\nsite_3_856b194b097441958697c2bcd1f63982,aldfly\\n')\n\n    !echo \"Difference vs 0.598 LB\"\n    !diff submission8.csv submission.csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"# EOF"}],"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":4,"nbformat_minor":4}