{"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":"import pip","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:07.527359Z","iopub.execute_input":"2022-12-13T22:33:07.527798Z","iopub.status.idle":"2022-12-13T22:33:07.984360Z","shell.execute_reply.started":"2022-12-13T22:33:07.527758Z","shell.execute_reply":"2022-12-13T22:33:07.983371Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def import_or_install(package):\n    try:\n        __import__(package)\n    except ImportError:\n#         !pip install package\n        pip.main(['install', package])       \n\nimport_or_install(\"nnAudio\")\nimport_or_install(\"ttach\")\nimport_or_install('torch-summary')\n# !pip install -q nnAudio\n# !pip install -q --upgrade wandb\n# !pip install -q grad-cam\n# !pip install -q ttach\n","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:07.986443Z","iopub.execute_input":"2022-12-13T22:33:07.987199Z","iopub.status.idle":"2022-12-13T22:33:08.872876Z","shell.execute_reply.started":"2022-12-13T22:33:07.987160Z","shell.execute_reply":"2022-12-13T22:33:08.871924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install efficientnet_pytorch -qq","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:08.875554Z","iopub.execute_input":"2022-12-13T22:33:08.876003Z","iopub.status.idle":"2022-12-13T22:33:21.469562Z","shell.execute_reply.started":"2022-12-13T22:33:08.875948Z","shell.execute_reply":"2022-12-13T22:33:21.468308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random\nimport torch\nfrom torch import nn\nimport torch.nn as nn\nimport torch.optim as optim\n\n\nfrom torch.utils.data import Dataset, DataLoader\nimport torch.nn.functional as F\nfrom torch.optim import Adam\nfrom torch.autograd import Variable\nfrom torch.cuda.amp import GradScaler, autocast\nfrom torch.optim.lr_scheduler import ReduceLROnPlateau\nfrom torchvision import models\nfrom torchsummary import summary\n\n# !pip install efficientnet_pytorch -qq\nfrom efficientnet_pytorch import EfficientNet\n\nfrom sklearn.model_selection import StratifiedKFold, train_test_split\nfrom sklearn import model_selection as sk_model_selection\nfrom sklearn.metrics import roc_curve, roc_auc_score\n\nimport matplotlib as mpl\nimport matplotlib.patches as patches\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport matplotlib.gridspec as gridspec\nfrom matplotlib.offsetbox import AnnotationBbox, OffsetImage\nfrom pylab import text\nfrom nnAudio.features import CQT1992v2\n\nimport os\nimport re\nimport gc\nimport wandb\nimport time\nfrom tqdm import tqdm\nimport pandas as pd\nimport numpy as np\nimport seaborn as sns\n\nimport glob","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:21.472841Z","iopub.execute_input":"2022-12-13T22:33:21.473729Z","iopub.status.idle":"2022-12-13T22:33:21.755644Z","shell.execute_reply.started":"2022-12-13T22:33:21.473629Z","shell.execute_reply":"2022-12-13T22:33:21.754726Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# Set\ndef set_seed(seed=23):\n    '''Sets the seed of the entire notebook so results are the same every time we run.\n    This is for REPRODUCIBILITY.'''\n    np.random.seed(seed)\n    random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    os.environ['PYTHONHASHSEED'] = str(seed)\n\n\nset_seed()\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nprint('Device available now:', device)\n\nprint('done with imports')\n\n\nclass color:\n    S = '\\033[1m' + '\\033[93m'\n    E = '\\033[0m'\n\n","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:21.757168Z","iopub.execute_input":"2022-12-13T22:33:21.759237Z","iopub.status.idle":"2022-12-13T22:33:22.072534Z","shell.execute_reply.started":"2022-12-13T22:33:21.759194Z","shell.execute_reply":"2022-12-13T22:33:22.071467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from kaggle_secrets import UserSecretsClient\nuser_secrets = UserSecretsClient()\nsecret_value_0 = user_secrets.get_secret(\"secret_wandb_gatech\")","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:22.073843Z","iopub.execute_input":"2022-12-13T22:33:22.074180Z","iopub.status.idle":"2022-12-13T22:33:22.489638Z","shell.execute_reply.started":"2022-12-13T22:33:22.074144Z","shell.execute_reply":"2022-12-13T22:33:22.488535Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! wandb login $secret_value_0","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:22.495420Z","iopub.execute_input":"2022-12-13T22:33:22.495811Z","iopub.status.idle":"2022-12-13T22:33:26.355170Z","shell.execute_reply.started":"2022-12-13T22:33:22.495772Z","shell.execute_reply":"2022-12-13T22:33:26.352901Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n#%%%%%%%%%%%%%%%%%% Get the data in and processed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ntrain = pd.read_csv('../input/g2net-gravitational-wave-detection/training_labels.csv')\ntest = pd.read_csv('../input/g2net-gravitational-wave-detection/sample_submission.csv')\n\ndef get_train_file_path(image_id):\n    return \"../input/g2net-gravitational-wave-detection/train/{}/{}/{}/{}.npy\".format(\n        image_id[0], image_id[1], image_id[2], image_id)\n\ndef get_test_file_path(image_id):\n    return \"../input/g2net-gravitational-wave-detection/test/{}/{}/{}/{}.npy\".format(\n        image_id[0], image_id[1], image_id[2], image_id)\n\ntrain['path'] = train['id'].apply(get_train_file_path)\ntest['path'] = test['id'].apply(get_test_file_path)\n\nprint(train.head())\nprint(test.head())\n","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:26.361817Z","iopub.execute_input":"2022-12-13T22:33:26.362260Z","iopub.status.idle":"2022-12-13T22:33:27.833102Z","shell.execute_reply.started":"2022-12-13T22:33:26.362211Z","shell.execute_reply":"2022-12-13T22:33:27.831742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n# ~~~~~FUNCTIONS~~~~~\n# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\ndef plot_loss_graph(train_losses, valid_losses, epoch, fold):\n    '''Lineplot of the training/validation losses.'''\n\n    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 2.5))\n    fig.suptitle(f\"Fold {fold} | Epoch {epoch}\", fontsize=12, y=1.05)\n    axes = [ax1, ax2]\n    data = [train_losses, valid_losses]\n    sns.lineplot(y=train_losses, x=range(len(train_losses)),\n                 lw=2.3, ls=\":\", color=my_colors[3], ax=ax1)\n    sns.lineplot(y=valid_losses, x=range(len(valid_losses)),\n                 lw=2.3, ls=\"-\", color=my_colors[5], ax=ax2)\n    for ax, t, d in zip(axes, [\"Train\", \"Valid\"], data):\n        ax.set_title(f\"{t} Evolution\", size=12, weight='bold')\n        ax.set_xlabel(\"Iteration\", weight='bold', size=9)\n        ax.set_ylabel(\"Loss\", weight='bold', size=9)\n        ax.tick_params(labelsize=9)\n    plt.show()\n\n\ndef get_auc_score(valid_preds, valid_targets, gpu=True):\n    '''Compute ROC AUC score.'''\n    if gpu:\n        predictions = torch.cat(valid_preds).cpu().detach().numpy().tolist()\n    else:\n        predictions = torch.cat(valid_preds).detach().numpy().tolist()\n    actuals = [int(x) for x in valid_targets]\n\n    roc_auc = roc_auc_score(actuals, predictions)\n    return roc_auc\n\n","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:27.835048Z","iopub.execute_input":"2022-12-13T22:33:27.836037Z","iopub.status.idle":"2022-12-13T22:33:28.191380Z","shell.execute_reply.started":"2022-12-13T22:33:27.835998Z","shell.execute_reply":"2022-12-13T22:33:28.190481Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# %%%%%%%%%%%%%% This is the dataloader %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# Note: This data loader incorporates a Qtransform.  Probably what slows it down.\n\nclass G2Dataset(Dataset):\n\n    def __init__(self, path, target=None, test=False, prints=False):\n        '''Initiate the arguments & import the numpy file/s.'''\n        self.path = path\n#         self.features = features\n        self.target = target\n        self.test = test\n        self.prints = prints\n        self.TRANSFORM = CQT1992v2(sr=2048, fmin=20,\n                               fmax=1024, hop_length=32,\n                               verbose=False)\n\n    def __len__(self):\n        return len(self.path)\n\n\n    def __transform__(self, np_file):\n        '''Transforms the np_file into spectrogram.'''\n        # spectrogram = []\n        # TRANSFORM = CQT1992v2(sr=2048, fmin=20,\n        #                       fmax=1024, hop_length=32,\n        #                       verbose=False)\n        #\n        # # Create an image with 3 channels - for the 3 sites\n        # for i in range(3):\n        #     waves = np_file[i] / np.max(np_file[i])\n        #     waves = torch.from_numpy(waves).float()\n        #     channel = TRANSFORM(waves).squeeze().numpy()\n        #     spectrogram.append(channel)\n        #     # print('spectrogram', spectrogram)\n        #     # print(np.shape(spectrogram))\n\n        spectrogram = torch.zeros(3,69,129)\n        for i in range(3):\n            waves = np_file[i] / np.max(np_file[i])\n            waves = torch.from_numpy(waves).float()\n            channel = self.TRANSFORM(waves).squeeze()\n            spectrogram[i] = channel\n            # print('spectrogram', spectrogram)\n            # print(np.shape(spectrogram))\n            # print(spectrogram.shape)\n\n\n        # spectrogram = torch.tensor(spectrogram).float()\n\n        if self.prints:\n            plt.figure(figsize=(5, 5))\n            plot = spectrogram.detach().cpu().numpy()\n            plot = np.transpose(plot, (1, 2, 0))\n            plt.imshow(plot)\n            plt.axis(\"off\")\n            plt.show();\n\n        return spectrogram\n\n\n    def __getitem__(self, i):\n        # Load the numpy file\n        np_file = np.load(self.path[i])\n        # Create the spectrograms\n        spectrograms = self.__transform__(np_file)\n        # Select the features\n#         metadata = np.array(self.features.iloc[i].values, dtype=np.float32)\n        metadata = np.zeros(1)\n\n        # Return the images & target if available\n        if self.test == False:\n            y = torch.tensor(self.target[i], dtype=torch.float)\n            return {\"spectrogram\": spectrograms,\n#                     \"metadata\": metadata,\n                    \"targets\": y}\n        else:\n            return {\"spectrogram\": spectrograms,\n                    \"metadata\": metadata}","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:28.195105Z","iopub.execute_input":"2022-12-13T22:33:28.195465Z","iopub.status.idle":"2022-12-13T22:33:28.606135Z","shell.execute_reply.started":"2022-12-13T22:33:28.195428Z","shell.execute_reply":"2022-12-13T22:33:28.605158Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# %%%%%%%%%%%%%% This is the Model %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\nclass G2EffNet(nn.Module):\n\n    def __init__(self, no_neurons=250):\n        super().__init__()\n\n        # NN for the spectrogram - out layer = 2560\n        self.spectrogram = EfficientNet.from_pretrained('efficientnet-b7')\n        self.classification = nn.Sequential(nn.Linear(2560, 1))\n\n\n    def forward(self, spectrogram, prints=False):\n\n        if prints: print(color.S + 'Spectrogram In:' + color.E, spectrogram.shape, '\\n' +\n#                          color.S + 'Features In:' + color.E, features.shape, '\\n' +\n                         '=' * 40)\n\n        # Spectrogram\n        spectrogram = self.spectrogram.extract_features(spectrogram)\n        if prints: print(color.S + 'Spectrogram Out:' + color.E, spectrogram.shape)\n\n        spectrogram = F.avg_pool2d(spectrogram, spectrogram.size()[2:]).reshape(-1, 2560)\n        if prints: print(color.S + 'Spectrogram Reshaped:' + color.E, spectrogram.shape)\n\n        out = self.classification(spectrogram)\n\n        return torch.sigmoid(out)\n","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:28.607703Z","iopub.execute_input":"2022-12-13T22:33:28.608095Z","iopub.status.idle":"2022-12-13T22:33:29.099521Z","shell.execute_reply.started":"2022-12-13T22:33:28.608057Z","shell.execute_reply":"2022-12-13T22:33:29.098526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# This is a quick run of the model\n# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# ====================================================================================\nmodel_example = G2EffNet(no_neurons=250)\n\nsummary(model_example)\n\n# We'll use previous datasets & dataloader\n\n# Sample\npath = train[\"path\"][:4].values\n# features = train.iloc[:4, 3:]\ntarget = train[\"target\"][:4].values\n\nprint('target', target)\n\n# Initiate the Dataset\ndataset = G2Dataset(path=path, target=target,\n                    test=False, prints=False)\n\nprint('dataset', dataset)\n\n# Initiate the Dataloader\ndataloader = DataLoader(dataset, batch_size=2, shuffle=False)\n\n# example for 1 batch\nfor k, data in enumerate(dataloader):\n    spectrograms, targets = data.values()\n    break\n\n# Outputs\nout = model_example(spectrograms, prints=False)\n\n# Criterion\ncriterion_example = nn.BCEWithLogitsLoss()\n# Unsqueeze(1) from shape=[3] => shape=[3, 1]\nloss = criterion_example(out, targets.unsqueeze(1))\nprint(color.S + 'LOSS:' + color.E, loss.item())\n\n","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:29.101799Z","iopub.execute_input":"2022-12-13T22:33:29.102205Z","iopub.status.idle":"2022-12-13T22:33:32.598110Z","shell.execute_reply.started":"2022-12-13T22:33:29.102161Z","shell.execute_reply":"2022-12-13T22:33:32.597073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n# This trains the model\n# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nCONFIG = {'competition': 'g2net', '_wandb_kernel': 'aot'}\n\ndef train_effnet(name, epochs, splits, batch_size, no_neurons, lr, weight_decay, sample):\n\n    # === W&B Experiment ===\n    s = time.time()\n    params = dict(model=name, epochs=epochs, split=splits,\n                  batch=batch_size, neurons=no_neurons,\n                  lr=lr, weight_decay=weight_decay, sample=sample)\n    CONFIG.update(params)\n    run = wandb.init(project=\"SimpleEffNet\", entity=\"team-ahol\", name=f\"effnet_{name}_{sample}\", config=CONFIG, anonymous=\"allow\")\n\n\n    # === CV Split ===\n    df = train.sample(sample, random_state=23)\n    cv = StratifiedKFold(n_splits=splits)\n    cv_splits = cv.split(X=df, y=df['target'].values)\n\n\n\n    for fold, (train_i, valid_i) in enumerate(cv_splits):\n\n        print(\"~\"*25)\n        print(\"~\"*8, color.S+f\"FOLD {fold}\"+color.E, \"~\"*8)\n        print(\"~\"*25)\n\n        train_df = df.iloc[train_i, :]\n        # To go quicker through validation\n        valid_df = df.iloc[valid_i, :].sample(int(sample*(splits/10)*0.6),\n                                              random_state=23)\n\n        # Datasets & Dataloader\n        train_dataset = G2Dataset(path=train_df[\"path\"].values, target=train_df[\"target\"].values, test=False)\n        valid_dataset = G2Dataset(path=valid_df[\"path\"].values, target=valid_df[\"target\"].values, test=False)\n\n        train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n        valid_loader = DataLoader(valid_dataset, batch_size=batch_size, shuffle=False)\n\n        # Model/ Optimizer/ Criterion/ Scheduler\n        model = G2EffNet(no_neurons=no_neurons).to(device)\n        optimizer = Adam(model.parameters(), lr=lr,\n                         weight_decay=weight_decay, amsgrad=False)\n        criterion = nn.BCEWithLogitsLoss()\n        # scheduler = ReduceLROnPlateau(optimizer=optimizer, mode='max', verbose=True,\n        #                               patience=VAR.patience, factor=VAR.factor)\n        scaler = GradScaler()\n\n        # ~~~~~~~~~~~~\n        # ~~~ LOOP ~~~\n        # ~~~~~~~~~~~~\n        BEST_SCORE = 0.0\n\n        for epoch in range(epochs):\n            print(\"=\"*8, color.S+f\"Epoch {epoch}\"+color.E, \"=\"*8)\n\n            # === TRAIN ===\n            model.train()\n            train_losses = []\n            for k, data in enumerate(train_loader):\n                spectrograms, targets = data.values()\n                spectrograms, targets = spectrograms.to(device), targets.to(device)\n\n                with autocast():\n                    out = model(spectrograms)\n                    loss = criterion(out, targets.unsqueeze(1))\n                    train_losses.append(loss.cpu().detach().numpy().tolist())\n                    wandb.log({\"train_loss\": float(loss)})\n\n                scaler.scale(loss).backward()\n                scaler.step(optimizer)\n                scaler.update()\n\n            mean_train_loss = np.mean(train_losses)\n            print(color.S+\"Mean Train Loss:\"+color.E, mean_train_loss)\n            wandb.log({\"mean_train_loss\": float(mean_train_loss)}, step=epoch)\n\n\n            # === EVAL ===\n            model.eval()\n            valid_losses, valid_preds, valid_targets = [], [], []\n            with torch.no_grad():\n                for k, data in enumerate(valid_loader):\n                    spectrograms, targets = data.values()\n                    valid_targets.extend(targets.detach().numpy().tolist())\n                    spectrograms, targets = spectrograms.to(device), targets.to(device)\n\n                    out = model(spectrograms)\n\n                    valid_preds.extend(out)\n                    loss = criterion(out, targets.unsqueeze(1))\n                    valid_losses.append(loss.cpu().detach().numpy().tolist())\n\n            mean_valid_loss = np.mean(valid_losses)\n            print(color.S+\"Mean Valid Loss:\"+color.E, mean_valid_loss)\n            wandb.log({\"mean_valid_loss\": float(mean_valid_loss)}, step=epoch)\n#             plot_loss_graph(train_losses, valid_losses, epoch, fold)\n\n            # make a directory for best runs\n#             newdir = \"Runs/mod_\" + name + \"_samp\" + str(sample)\n#             direxists = os.path.exists(newdir)\n#             if not direxists:\n#                # Create a new directory because it does not exist\n#                os.makedirs(newdir)\n#                print(\"Made directory\", newdir)\n\n            # === UPDATES ===\n            roc_auc = get_auc_score(valid_preds, valid_targets, gpu=torch.cuda.is_available())\n            print(color.S+\"ROC AUC:\"+color.E, roc_auc)\n            print(color.S + f\"Time so far: {round((time.time() - s) / 60, 2)} minutes\" + color.E)\n            wandb.log({\"roc_auc\": float(roc_auc)}, step=epoch)\n\n            if roc_auc > BEST_SCORE:\n                print('roc_auc', roc_auc, 'better than best score', BEST_SCORE)\n                print(\"! Saving model in fold {} | epoch {} ...\".format(fold, epoch), \"\\n\")\n                torch.save(model.state_dict(), f\"Baseline_fold_{fold}_epoch_{epoch}_auc_{round(roc_auc, 5)}.pt\")\n#                 model.save(os.path.join(wandb.run.dir, \"model.pt\"))\n\n                BEST_SCORE = roc_auc\n\n\n        del model, optimizer, criterion, spectrograms, targets\n        torch.cuda.empty_cache()\n        gc.collect()\n\n#     wandb.finish()\n    print(color.S+f\"FINAL Time to run: {round((time.time() - s)/60, 2)} minutes\"+color.E)","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:33:32.599861Z","iopub.execute_input":"2022-12-13T22:33:32.600328Z","iopub.status.idle":"2022-12-13T22:33:32.938344Z","shell.execute_reply.started":"2022-12-13T22:33:32.600282Z","shell.execute_reply":"2022-12-13T22:33:32.937395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ls","metadata":{"execution":{"iopub.status.busy":"2022-12-13T22:34:47.631602Z","iopub.execute_input":"2022-12-13T22:34:47.632867Z","iopub.status.idle":"2022-12-13T22:34:49.025699Z","shell.execute_reply.started":"2022-12-13T22:34:47.632812Z","shell.execute_reply":"2022-12-13T22:34:49.024534Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nclass VAR:\n    name = \"full\"\n    splits = 3\n    epochs = 6\n    # Note = Can't support more than 20 on my cuda\n    batch_size = 128  #64 \n    #     batch_size = 8\n    no_neurons = 250\n    lr = 0.0001 # 0.0001\n    weight_decay = 0.000001\n    patience = 1\n    factor = 0.01\n    sample = 140000\n\n\ntrain_effnet(name=VAR.name, epochs=VAR.epochs, splits=VAR.splits,\n             batch_size=VAR.batch_size, no_neurons=VAR.no_neurons, lr=VAR.lr,\n             weight_decay=VAR.weight_decay, sample=VAR.sample)","metadata":{"execution":{"iopub.status.busy":"2022-12-14T01:14:16.499596Z","iopub.execute_input":"2022-12-14T01:14:16.500009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2022-11-23T22:12:11.186683Z","iopub.execute_input":"2022-11-23T22:12:11.187967Z","iopub.status.idle":"2022-11-23T22:12:11.216388Z","shell.execute_reply.started":"2022-11-23T22:12:11.18792Z","shell.execute_reply":"2022-11-23T22:12:11.212952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Now run on the Test data","metadata":{}},{"cell_type":"code","source":"# optionally make a tiny version of the test set: \ntest_for_running = test.copy()\n# test_for_running = test_for_running.head(2000)","metadata":{"execution":{"iopub.status.busy":"2022-11-23T22:17:14.445Z","iopub.execute_input":"2022-11-23T22:17:14.446215Z","iopub.status.idle":"2022-11-23T22:17:14.457112Z","shell.execute_reply.started":"2022-11-23T22:17:14.44617Z","shell.execute_reply":"2022-11-23T22:17:14.456133Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Test Dataset & Dataloader to train on and make predictions\ndataset = G2Dataset(path=test_for_running[\"path\"].values, target=None,\n                    features=test_for_running.iloc[:, 3:], test=True)\ndataloader = DataLoader(dataset, batch_size=10, shuffle=False)\n\n# === Loop ===\nall_preds = []\n","metadata":{"execution":{"iopub.status.busy":"2022-11-23T22:17:15.099064Z","iopub.execute_input":"2022-11-23T22:17:15.099418Z","iopub.status.idle":"2022-11-23T22:17:15.128051Z","shell.execute_reply.started":"2022-11-23T22:17:15.099388Z","shell.execute_reply":"2022-11-23T22:17:15.127167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Retrieve all best pretrained models\nnames = [\"Baseline_fold_2_auc_0.7553\"] \n# \"Baseline_fold_0_auc_0.34365\"\n# , \"Baseline_fold_1_auc_0.78462\",\n#          \"Baseline_fold_2_auc_0.7886\"]\nmodels = []\n\nfor i in range(len(names)):\n    model = G2EffNet(no_features=15, no_neurons=250).to(device)\n#     model.load_state_dict(torch.load(f\"../input/g2net-gravitational-wave-dataset/{names[i]}.pt\",\n#                                      map_location=torch.device(device)))\n    model.load_state_dict(torch.load(f\"./{names[i]}.pt\",\n                                     map_location=torch.device(device)))\n\n    model.eval()\n    models.append(model)","metadata":{"execution":{"iopub.status.busy":"2022-11-23T22:17:16.016305Z","iopub.execute_input":"2022-11-23T22:17:16.016665Z","iopub.status.idle":"2022-11-23T22:17:17.968676Z","shell.execute_reply.started":"2022-11-23T22:17:16.016635Z","shell.execute_reply":"2022-11-23T22:17:17.967661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"t = time.time()\n# Remember to Disable gradients\nwith torch.no_grad():\n    for k, data in enumerate(dataloader):\n        \n        spectrograms, features = data.values()\n        spectrograms, features = spectrograms.to(device), features.to(device)\n        \n        # Predict with each of the 3 models\n        out0 = models[0](spectrograms, features).cpu().numpy().squeeze()\n#         out0 = models[0](spectrograms, features).cpu().numpy().squeeze()\n#         out1 = models[1](spectrograms, features).cpu().numpy().squeeze()\n#         out2 = models[2](spectrograms, features).cpu().numpy().squeeze()\n        \n        # Blend the predictions\n#         all_preds.extend((out0 + out1 + out2)/3)\n        all_preds.extend((out0))\nprint(color.S+f\"Time to predict: {round((time.time() - t)/60, 2)} minutes\"+color.E)       ","metadata":{"execution":{"iopub.status.busy":"2022-11-24T01:21:56.965198Z","iopub.execute_input":"2022-11-24T01:21:56.96564Z","iopub.status.idle":"2022-11-24T01:21:57.043365Z","shell.execute_reply.started":"2022-11-24T01:21:56.965553Z","shell.execute_reply":"2022-11-24T01:21:57.041862Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# visualize the predictions \nall_preds[0:10]","metadata":{"execution":{"iopub.status.busy":"2022-11-23T23:57:10.702676Z","iopub.execute_input":"2022-11-23T23:57:10.703734Z","iopub.status.idle":"2022-11-23T23:57:10.71067Z","shell.execute_reply.started":"2022-11-23T23:57:10.703696Z","shell.execute_reply":"2022-11-23T23:57:10.709688Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Export the predictions for submission","metadata":{}},{"cell_type":"code","source":"# Fill in the sample submission pandas with my own predictions\nss = pd.read_csv(\"../input/g2net-gravitational-wave-detection/sample_submission.csv\")\nss[\"target\"] = all_preds\n\nss.head()\n\n# Make it a submission csv:\n# actual_submission = pd.read_csv(\"../input/g2net-gravitational-wave-dataset/60k_submission.csv\")\n# actual_submission.to_csv(\"60k_submission.csv\", index=False)\nss.to_csv(\"mf_submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-11-23T23:57:18.873509Z","iopub.execute_input":"2022-11-23T23:57:18.87387Z","iopub.status.idle":"2022-11-23T23:57:19.398501Z","shell.execute_reply.started":"2022-11-23T23:57:18.873839Z","shell.execute_reply":"2022-11-23T23:57:19.397466Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}