{"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":"code","source":"!pip install riroriro\n!pip install git+https://github.com/PyFstat/PyFstat@python37","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-11-08T14:47:55.152285Z","iopub.execute_input":"2022-11-08T14:47:55.15306Z","iopub.status.idle":"2022-11-08T14:49:18.071367Z","shell.execute_reply.started":"2022-11-08T14:47:55.152978Z","shell.execute_reply":"2022-11-08T14:49:18.070208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport h5py\nimport gc\nimport glob\nimport math\nimport random\nimport warnings\nimport pyfstat\nimport librosa\nimport librosa.display\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport riroriro.inspiralfuns as ins\nimport riroriro.mergerfirstfuns as me1\nimport riroriro.matchingfuns as mat\nimport riroriro.mergersecondfuns as me2\n\nfrom pathlib import Path\nfrom scipy import stats\nfrom pprint import pprint\nfrom tqdm.notebook import tqdm\nfrom scipy import signal\nfrom scipy.fft import fftshift\nimport matplotlib.pyplot as plt\nfrom IPython.display import HTML, display\nfrom sklearn.model_selection import train_test_split\nimport torch","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:49:18.074729Z","iopub.execute_input":"2022-11-08T14:49:18.075119Z","iopub.status.idle":"2022-11-08T14:49:23.07812Z","shell.execute_reply.started":"2022-11-08T14:49:18.075075Z","shell.execute_reply":"2022-11-08T14:49:23.076933Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! pip3 install timm","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:49:23.079835Z","iopub.execute_input":"2022-11-08T14:49:23.080261Z","iopub.status.idle":"2022-11-08T14:49:36.387159Z","shell.execute_reply.started":"2022-11-08T14:49:23.080212Z","shell.execute_reply":"2022-11-08T14:49:36.385946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport time\nimport h5py\nimport timm\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport random\nimport gc,os,sys,shutil\n\nfrom tqdm.auto import tqdm\nfrom sklearn.model_selection import KFold,StratifiedKFold\nfrom sklearn.metrics import roc_auc_score\nfrom timm.scheduler import CosineLRScheduler\n\nfrom transformers.file_utils import is_torch_tpu_available\ndevice = 'cuda' if torch.cuda.is_available() else 'cpu'\ncriterion = nn.BCEWithLogitsLoss()\n\ndi = '/kaggle/input/g2net-detecting-continuous-gravitational-waves'","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:56:28.132616Z","iopub.execute_input":"2022-11-08T14:56:28.133617Z","iopub.status.idle":"2022-11-08T14:56:29.294227Z","shell.execute_reply.started":"2022-11-08T14:56:28.133571Z","shell.execute_reply":"2022-11-08T14:56:29.293108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"PRETRAIN = True\nSINGLE_MODEL = True\nimg_size = 224\n\nMODEL_NAME = 'coat_mini'\n\n# shapes to resize the images\nSHAPE_1 = (180,23)\nSHAPE_2 = (360,1)","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:56:29.298Z","iopub.execute_input":"2022-11-08T14:56:29.299971Z","iopub.status.idle":"2022-11-08T14:56:29.30561Z","shell.execute_reply.started":"2022-11-08T14:56:29.299941Z","shell.execute_reply":"2022-11-08T14:56:29.304689Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class H5Dataset(torch.utils.data.Dataset):\n    \"\"\"\n    dataset = Dataset(data_type, df)\n\n    img, y = dataset[i]\n      img (np.float32): 2 x 360 x 128\n      y (np.float32): label 0 or 1\n    \"\"\"\n    def __init__(self, data_type, df):\n        self.data_type = data_type\n        self.df = df\n\n    def __len__(self):\n        return len(self.df)\n\n    def __getitem__(self, i):\n        \"\"\"\n        i (int): get ith data\n        \"\"\"\n        r = self.df.iloc[i]\n        y = np.float32(r.target)\n        file_id = r.id\n\n        img = np.empty((2, SHAPE_2[0], SHAPE_1[0]), dtype=np.float32)\n\n        filename = '%s/%s/%s.hdf5' % (di, self.data_type, file_id)\n        with h5py.File(filename, 'r') as f:\n            g = f[file_id]\n\n            for ch, s in enumerate(['H1', 'L1']):\n                a = g[s]['SFTs'][:, :SHAPE_1[0]*SHAPE_1[1]] * 1e22  # Fourier coefficient complex64\n\n                p = a.real**2 + a.imag**2  # power\n                p = np.mean(p.reshape(360, SHAPE_1[0],SHAPE_1[1]), axis=2)\n                p = np.mean(p.reshape(SHAPE_2[0],SHAPE_2[1],SHAPE_1[0]), axis=1)\n\n                img[ch] = p\n        img = ((img)/img.mean()).astype(np.float32)\n        return img, y","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:56:29.557544Z","iopub.execute_input":"2022-11-08T14:56:29.558226Z","iopub.status.idle":"2022-11-08T14:56:29.570315Z","shell.execute_reply.started":"2022-11-08T14:56:29.558186Z","shell.execute_reply":"2022-11-08T14:56:29.569182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Model(nn.Module):\n    def __init__(self, name, *, pretrained=True):\n        super().__init__()\n\n        # Use timm\n        model = timm.create_model(name, pretrained=pretrained, in_chans=2)\n\n        clsf = model.default_cfg['classifier']\n        n_features = model._modules[clsf].in_features\n        model._modules[clsf] = nn.Identity()\n\n        self.fc = nn.Linear(n_features, 1)\n        self.model = model\n\n    def forward(self, x):\n        if img_size:\n            x = F.interpolate(x,img_size)\n        x = self.model(x)\n        x = self.fc(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:56:57.484377Z","iopub.execute_input":"2022-11-08T14:56:57.484826Z","iopub.status.idle":"2022-11-08T14:56:57.493307Z","shell.execute_reply.started":"2022-11-08T14:56:57.484787Z","shell.execute_reply":"2022-11-08T14:56:57.491751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def evaluate(model, loader_val, *, compute_score=True, pbar=None):\n    \"\"\"\n    Predict and compute loss and score\n    \"\"\"\n    tb = time.time()\n    was_training = model.training\n    model.eval()\n\n    loss_sum = 0.0\n    n_sum = 0\n    y_all = []\n    y_pred_all = []\n\n    if pbar is not None:\n        pbar = tqdm(desc='Predict', nrows=78, total=pbar)\n\n    for img, y in loader_val:\n        n = y.size(0)\n        img = img.to(device)\n        y = y.to(device)\n\n        with torch.no_grad():\n            y_pred = model(img.to(device))\n        loss = criterion(y_pred.view(-1), y)\n\n        n_sum += n\n        loss_sum += n * loss.item()\n\n        y_all.append(y.cpu().detach().numpy())\n        y_pred_all.append(y_pred.sigmoid().squeeze().cpu().detach().numpy())\n\n        if pbar is not None:\n            pbar.update(len(img))\n        \n        del loss, y_pred, img, y\n\n    loss_val = loss_sum / n_sum\n\n    y = np.concatenate(y_all)\n    y_pred = np.concatenate(y_pred_all)\n\n    score = roc_auc_score(y, y_pred) if compute_score else None\n\n    ret = {'loss': loss_val,\n           'score': score,\n           'y': y,\n           'y_pred': y_pred,\n           'time': time.time() - tb}\n    \n    model.train(was_training)  # back to train from eval if necessary\n\n    return ret","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:56:58.65344Z","iopub.execute_input":"2022-11-08T14:56:58.653823Z","iopub.status.idle":"2022-11-08T14:56:58.666333Z","shell.execute_reply.started":"2022-11-08T14:56:58.65379Z","shell.execute_reply":"2022-11-08T14:56:58.665399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load model (if necessary)\nsubmit = pd.read_csv(di + '/sample_submission.csv')\nmodel = Model(MODEL_NAME, pretrained=False)\nmodel.to(device)\n\nif SINGLE_MODEL:\n    model.load_state_dict(torch.load('../input/coat-net/model_pretrain (1).pytorch'))\n    model.eval()\n    dataset_test = H5Dataset('test', submit)\n    loader_test = torch.utils.data.DataLoader(dataset_test, batch_size=64,\n                                              num_workers=0, pin_memory=False)\n    test = evaluate(model, loader_test, compute_score=False, pbar=len(submit))\n    submit['target'] += test['y_pred']\nsubmit['target'] = test['y_pred']\nsubmit.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-11-08T14:57:00.8017Z","iopub.execute_input":"2022-11-08T14:57:00.802406Z","iopub.status.idle":"2022-11-08T15:38:41.416661Z","shell.execute_reply.started":"2022-11-08T14:57:00.802371Z","shell.execute_reply":"2022-11-08T15:38:41.414203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}