{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Импорт библиотек","metadata":{"papermill":{"duration":0.011898,"end_time":"2023-06-09T11:52:11.817720","exception":false,"start_time":"2023-06-09T11:52:11.805822","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import os.path as path\nimport pandas as pd\nimport numpy as np\nfrom tqdm import tqdm\nimport librosa\nimport torch\nimport os\nimport torch.nn as nn\nimport matplotlib.pyplot as plt\nimport random\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torch.utils.data import Dataset\nfrom torch.utils.data import DataLoader\nimport torchaudio\nimport time\nfrom sklearn.metrics import accuracy_score\nfrom torch.utils.data import random_split\nfrom transformers import AutoProcessor, ASTModel, ASTFeatureExtractor, AutoFeatureExtractor\nfrom datasets import load_dataset","metadata":{"_cell_guid":"2244c04c-2f50-4da7-a85d-83965bcb68b8","_uuid":"0cbb2e41-e7d1-4a80-8437-0d0ff2ace412","collapsed":false,"jupyter":{"outputs_hidden":false},"papermill":{"duration":16.158635,"end_time":"2023-06-09T11:52:27.988145","exception":false,"start_time":"2023-06-09T11:52:11.829510","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:34.672584Z","iopub.execute_input":"2023-06-12T10:54:34.673002Z","iopub.status.idle":"2023-06-12T10:54:49.502734Z","shell.execute_reply.started":"2023-06-12T10:54:34.672977Z","shell.execute_reply":"2023-06-12T10:54:49.501798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Пути к файлам и папкам","metadata":{"papermill":{"duration":0.011445,"end_time":"2023-06-09T11:52:28.010758","exception":false,"start_time":"2023-06-09T11:52:27.999313","status":"completed"},"tags":[]}},{"cell_type":"code","source":"home_path = \"/kaggle/input/itmo-acoustic-event-detection-2023\"","metadata":{"papermill":{"duration":0.020755,"end_time":"2023-06-09T11:52:28.043092","exception":false,"start_time":"2023-06-09T11:52:28.022337","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:49.504463Z","iopub.execute_input":"2023-06-12T10:54:49.505293Z","iopub.status.idle":"2023-06-12T10:54:49.511814Z","shell.execute_reply.started":"2023-06-12T10:54:49.505261Z","shell.execute_reply":"2023-06-12T10:54:49.510858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"audio_train_path = path.join(home_path, \"audio_train/train\")\naudio_test_path = path.join(home_path, \"audio_test/test\")\ntrain_csv_path = path.join(home_path, \"train.csv\")\nsample_submission_path = path.join(home_path, \"sample_submission.csv\")","metadata":{"papermill":{"duration":0.02171,"end_time":"2023-06-09T11:52:28.076438","exception":false,"start_time":"2023-06-09T11:52:28.054728","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:49.513423Z","iopub.execute_input":"2023-06-12T10:54:49.513801Z","iopub.status.idle":"2023-06-12T10:54:49.520727Z","shell.execute_reply.started":"2023-06-12T10:54:49.513723Z","shell.execute_reply":"2023-06-12T10:54:49.519301Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"files = os.listdir(audio_train_path)\nfilename = random.choice(files)\nfilename","metadata":{"papermill":{"duration":0.466963,"end_time":"2023-06-09T11:52:28.555053","exception":false,"start_time":"2023-06-09T11:52:28.088090","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:49.523878Z","iopub.execute_input":"2023-06-12T10:54:49.524330Z","iopub.status.idle":"2023-06-12T10:54:50.215999Z","shell.execute_reply.started":"2023-06-12T10:54:49.524299Z","shell.execute_reply":"2023-06-12T10:54:50.215037Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Подготовка данных","metadata":{"papermill":{"duration":0.010908,"end_time":"2023-06-09T11:52:28.576953","exception":false,"start_time":"2023-06-09T11:52:28.566045","status":"completed"},"tags":[]}},{"cell_type":"code","source":"label_df = pd.read_csv(train_csv_path)\nsample_df = pd.read_csv(sample_submission_path)\nlabel_df","metadata":{"papermill":{"duration":0.063589,"end_time":"2023-06-09T11:52:28.651711","exception":false,"start_time":"2023-06-09T11:52:28.588122","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.218646Z","iopub.execute_input":"2023-06-12T10:54:50.220156Z","iopub.status.idle":"2023-06-12T10:54:50.266304Z","shell.execute_reply.started":"2023-06-12T10:54:50.220121Z","shell.execute_reply":"2023-06-12T10:54:50.265400Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"unique_labels = np.unique(label_df['label'])\nlabel_value_dict = {label: index for index, label in enumerate(unique_labels)}\nlabel_value_dict","metadata":{"papermill":{"duration":0.031328,"end_time":"2023-06-09T11:52:28.695697","exception":false,"start_time":"2023-06-09T11:52:28.664369","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.267829Z","iopub.execute_input":"2023-06-12T10:54:50.268174Z","iopub.status.idle":"2023-06-12T10:54:50.281397Z","shell.execute_reply.started":"2023-06-12T10:54:50.268143Z","shell.execute_reply":"2023-06-12T10:54:50.280365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Подготовка и тестирование оборудования","metadata":{"papermill":{"duration":0.011577,"end_time":"2023-06-09T11:52:28.719300","exception":false,"start_time":"2023-06-09T11:52:28.707723","status":"completed"},"tags":[]}},{"cell_type":"code","source":"device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\ndevice","metadata":{"papermill":{"duration":0.096606,"end_time":"2023-06-09T11:52:28.827931","exception":false,"start_time":"2023-06-09T11:52:28.731325","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.282784Z","iopub.execute_input":"2023-06-12T10:54:50.283740Z","iopub.status.idle":"2023-06-12T10:54:50.316221Z","shell.execute_reply.started":"2023-06-12T10:54:50.283672Z","shell.execute_reply":"2023-06-12T10:54:50.315475Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cpu_count = os.cpu_count()\nnum_workers = cpu_count if device == \"cpu\" else 0\nnum_workers, cpu_count","metadata":{"papermill":{"duration":0.024593,"end_time":"2023-06-09T11:52:28.864789","exception":false,"start_time":"2023-06-09T11:52:28.840196","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.319435Z","iopub.execute_input":"2023-06-12T10:54:50.320033Z","iopub.status.idle":"2023-06-12T10:54:50.328059Z","shell.execute_reply.started":"2023-06-12T10:54:50.320007Z","shell.execute_reply":"2023-06-12T10:54:50.326902Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def set_random_state(random_state):\n    \"\"\"Initialize random generators.\n\n    Parameters\n    ==========\n    random_state : int = 0\n        Determines random number generation for centroid initialization.\n        Use an int to make the randomness deterministic.\n    \"\"\"\n    torch.manual_seed(random_state)\n    random.seed(random_state)\n    np.random.seed(random_state)\n\n    if torch.cuda.is_available():\n        torch.cuda.manual_seed_all(random_state)\n        torch.cuda.manual_seed(random_state)\n\n        torch.backends.cudnn.deterministic = True\n        torch.backends.cudnn.benchmark = False","metadata":{"papermill":{"duration":0.022085,"end_time":"2023-06-09T11:52:28.899297","exception":false,"start_time":"2023-06-09T11:52:28.877212","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.330017Z","iopub.execute_input":"2023-06-12T10:54:50.330423Z","iopub.status.idle":"2023-06-12T10:54:50.337216Z","shell.execute_reply.started":"2023-06-12T10:54:50.330381Z","shell.execute_reply":"2023-06-12T10:54:50.336352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"RANDOM_STATE = 42","metadata":{"papermill":{"duration":0.019613,"end_time":"2023-06-09T11:52:28.930423","exception":false,"start_time":"2023-06-09T11:52:28.910810","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.342070Z","iopub.execute_input":"2023-06-12T10:54:50.342966Z","iopub.status.idle":"2023-06-12T10:54:50.346794Z","shell.execute_reply.started":"2023-06-12T10:54:50.342934Z","shell.execute_reply":"2023-06-12T10:54:50.346105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torch.use_deterministic_algorithms(True)","metadata":{"papermill":{"duration":0.019886,"end_time":"2023-06-09T11:52:28.961740","exception":false,"start_time":"2023-06-09T11:52:28.941854","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.348174Z","iopub.execute_input":"2023-06-12T10:54:50.348736Z","iopub.status.idle":"2023-06-12T10:54:50.355157Z","shell.execute_reply.started":"2023-06-12T10:54:50.348705Z","shell.execute_reply":"2023-06-12T10:54:50.354376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%env CUBLAS_WORKSPACE_CONFIG=:4096:8\n%env PYTHONHASHSEED=42","metadata":{"papermill":{"duration":0.022231,"end_time":"2023-06-09T11:52:28.995505","exception":false,"start_time":"2023-06-09T11:52:28.973274","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.356822Z","iopub.execute_input":"2023-06-12T10:54:50.357420Z","iopub.status.idle":"2023-06-12T10:54:50.367412Z","shell.execute_reply.started":"2023-06-12T10:54:50.357390Z","shell.execute_reply":"2023-06-12T10:54:50.366475Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Датасет","metadata":{"papermill":{"duration":0.012324,"end_time":"2023-06-09T11:52:29.020295","exception":false,"start_time":"2023-06-09T11:52:29.007971","status":"completed"},"tags":[]}},{"cell_type":"code","source":"feature_extractor = ASTFeatureExtractor.from_pretrained(\"MIT/ast-finetuned-audioset-10-10-0.4593\")","metadata":{"papermill":{"duration":0.221522,"end_time":"2023-06-09T11:52:29.254476","exception":false,"start_time":"2023-06-09T11:52:29.032954","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.368883Z","iopub.execute_input":"2023-06-12T10:54:50.369526Z","iopub.status.idle":"2023-06-12T10:54:50.636627Z","shell.execute_reply.started":"2023-06-12T10:54:50.369496Z","shell.execute_reply":"2023-06-12T10:54:50.635770Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def extract_feature(audio_path, fname, sr):\n    x = librosa.load(path.join(audio_path, fname), sr=sr)[0]\n    x, _ = librosa.effects.trim(x)\n    x = feature_extractor(x, sampling_rate=sr, return_tensors=\"pt\")[\"input_values\"]\n    return x","metadata":{"papermill":{"duration":0.02276,"end_time":"2023-06-09T11:52:29.289467","exception":false,"start_time":"2023-06-09T11:52:29.266707","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.638148Z","iopub.execute_input":"2023-06-12T10:54:50.638774Z","iopub.status.idle":"2023-06-12T10:54:50.644713Z","shell.execute_reply.started":"2023-06-12T10:54:50.638743Z","shell.execute_reply":"2023-06-12T10:54:50.643739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"start_time = time.time()\n\nX = [extract_feature(audio_train_path, fname, 16000) for fname in label_df[\"fname\"]]\n\nX_test = [extract_feature(audio_test_path, fname, 16000) for fname in sample_df[\"fname\"]]\n\nprint(time.time() - start_time, \"seconds\")","metadata":{"papermill":{"duration":358.116776,"end_time":"2023-06-09T11:58:27.418431","exception":false,"start_time":"2023-06-09T11:52:29.301655","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-12T10:54:50.646369Z","iopub.execute_input":"2023-06-12T10:54:50.647031Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class EventDetectionDataset(Dataset):\n    def __init__(self, X, y=None, device=\"cpu\"):\n        self.X = X\n        self.y = y\n    def __len__(self):\n        return len(self.X)\n\n    def __getitem__(self, idx):\n        x = self.X[idx]\n        if self.y is not None:\n            return \\\n                x,\\\n                self.y[idx]\n        return x","metadata":{"papermill":{"duration":0.022756,"end_time":"2023-06-09T11:58:27.453161","exception":false,"start_time":"2023-06-09T11:58:27.430405","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y = [label_value_dict[label] for label in label_df[\"label\"]]","metadata":{"papermill":{"duration":0.022269,"end_time":"2023-06-09T11:58:27.487213","exception":false,"start_time":"2023-06-09T11:58:27.464944","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# dataset = EventDetectionDataset(X, y)\ntrainset = EventDetectionDataset(X, y)","metadata":{"papermill":{"duration":0.021105,"end_time":"2023-06-09T11:58:27.519932","exception":false,"start_time":"2023-06-09T11:58:27.498827","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# trainset, valset = random_split(dataset, [0.9, 0.1], generator=torch.Generator().manual_seed(42))","metadata":{"papermill":{"duration":0.021465,"end_time":"2023-06-09T11:58:27.553113","exception":false,"start_time":"2023-06-09T11:58:27.531648","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"testset = EventDetectionDataset(X_test)","metadata":{"papermill":{"duration":0.020425,"end_time":"2023-06-09T11:58:27.585166","exception":false,"start_time":"2023-06-09T11:58:27.564741","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_loader = DataLoader(trainset, batch_size=8, shuffle=True, num_workers=num_workers)\n# val_loader = DataLoader(valset, batch_size=8, shuffle=False, num_workers=num_workers)\ntest_loader = DataLoader(testset, batch_size=8, shuffle=False, num_workers=num_workers)","metadata":{"papermill":{"duration":0.021318,"end_time":"2023-06-09T11:58:27.617656","exception":false,"start_time":"2023-06-09T11:58:27.596338","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Архитектура нейронной сети","metadata":{"papermill":{"duration":0.011569,"end_time":"2023-06-09T11:58:27.641170","exception":false,"start_time":"2023-06-09T11:58:27.629601","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pretrained_model = ASTModel.from_pretrained(\"MIT/ast-finetuned-audioset-10-10-0.4593\")","metadata":{"papermill":{"duration":3.839819,"end_time":"2023-06-09T11:58:31.492933","exception":false,"start_time":"2023-06-09T11:58:27.653114","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class MyNetwork(nn.Module):\n    def __init__(self, pretrained_model, num_classes):\n        super(MyNetwork, self).__init__()\n        self.pretrained_model = pretrained_model\n        \n        self.bn = nn.BatchNorm1d(num_features=768)\n        self.dropout = nn.Dropout(p=0.3)\n                \n        self.fc = nn.Linear(768, num_classes)\n        \n    def forward(self, x):\n        x = x.squeeze(1)\n        x = self.pretrained_model(input_values=x).last_hidden_state\n        x = x.mean(dim=1)\n        x = self.bn(x)\n        x = self.dropout(x)\n        x = self.fc(x)\n        x = F.log_softmax(x, dim=1)\n        return x","metadata":{"papermill":{"duration":0.02539,"end_time":"2023-06-09T11:58:31.532006","exception":false,"start_time":"2023-06-09T11:58:31.506616","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Обучение и проверка точности на наборе данных","metadata":{"execution":{"iopub.execute_input":"2023-06-01T19:56:50.189243Z","iopub.status.busy":"2023-06-01T19:56:50.188815Z","iopub.status.idle":"2023-06-01T19:58:20.235458Z","shell.execute_reply":"2023-06-01T19:58:20.234304Z","shell.execute_reply.started":"2023-06-01T19:56:50.189138Z"},"papermill":{"duration":0.012568,"end_time":"2023-06-09T11:58:31.557673","exception":false,"start_time":"2023-06-09T11:58:31.545105","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def evaluate(network, val_loader, device=device):\n    loss_list = []\n    outputs = []\n    targets = []\n    network.eval()\n    with torch.no_grad():\n        for i_batch, sample_batched in tqdm(enumerate(val_loader)):\n            x, y = sample_batched\n            x, y = x.to(device), y.to(device)\n            \n            output = network(x)\n            outputs.append(output.argmax(axis=1))\n\n            target = y\n            targets.append(target)\n\n            loss = criterion(output, target.long())\n            loss_list.append(loss.item())\n\n        y_true = torch.hstack(targets).numpy(force=True)\n        y_pred = torch.hstack(outputs).numpy(force=True)\n        acc = accuracy_score(y_true, y_pred)\n\n        val_loss.append(np.mean(loss_list))\n        val_acc.append(acc)\n        \n        print(f'[Val] accuracy:  {acc:.5f}; mean loss:  {val_loss[-1]:.5f}', end=\"\\n\\n\")","metadata":{"papermill":{"duration":0.02683,"end_time":"2023-06-09T11:58:31.597241","exception":false,"start_time":"2023-06-09T11:58:31.570411","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def train(network, train_loader, optimizer, criterion, device=device):\n    loss_list = []\n    outputs = []\n    targets = []\n    network.train()\n    for i_batch, sample_batched in tqdm(enumerate(train_loader)):\n        x, y = sample_batched\n        x, y = x.to(device), y.to(device)\n        optimizer.zero_grad()\n\n        output = network(x)\n        outputs.append(output.argmax(axis=1))\n\n        target = y\n        targets.append(target)\n\n        loss = criterion(output, target.long())\n        loss_list.append(loss.item())\n        loss.backward()\n        optimizer.step()\n    \n    y_true = torch.hstack(targets).numpy(force=True)\n    y_pred = torch.hstack(outputs).numpy(force=True)\n    acc = accuracy_score(y_true, y_pred)\n\n    train_loss.append(np.mean(loss_list))\n    train_acc.append(acc)\n    \n    print(f'[Train] accuracy:  {acc:.5f}; mean loss:  {train_loss[-1]:.5f}', end=\"\\n\\n\")","metadata":{"papermill":{"duration":0.026952,"end_time":"2023-06-09T11:58:31.637315","exception":false,"start_time":"2023-06-09T11:58:31.610363","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_epoch = 12\n\nset_random_state(RANDOM_STATE)\n\ncriterion = nn.CrossEntropyLoss()\nnetwork = MyNetwork(pretrained_model, 41).to(device)\n\noptimizer = optim.AdamW(network.parameters(), lr=0.000005)\n\ntrain_loss = []\nval_loss = []\n\ntrain_acc = []\nval_acc = []\n\nfor e in range(n_epoch):\n    print(f'epoch #{e+1}')\n    train(network, train_loader, optimizer, criterion, device=device)\n#     evaluate(network, val_loader, device=device)","metadata":{"papermill":{"duration":8081.36247,"end_time":"2023-06-09T14:13:13.013171","exception":false,"start_time":"2023-06-09T11:58:31.650701","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Визуализация процесса обучения сети","metadata":{"papermill":{"duration":0.602659,"end_time":"2023-06-09T14:13:14.192016","exception":false,"start_time":"2023-06-09T14:13:13.589357","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# epochs = range(1, n_epoch+1)\n\n# fig, (ax_top, ax_bottom) = plt.subplots(nrows=2, ncols=1, figsize=(10, 10), sharex=True)\n\n# xticks = range(1, n_epoch+1, n_epoch // 10) if n_epoch > 10 else epochs\n\n# # draw loss\n# ax_top.plot(epochs, train_loss, 'r', label='train')\n# ax_top.plot(epochs, val_loss, 'b', label='validation')\n\n# ax_top.set(\n#     title='Loss',\n#     xlabel='Epoch number',\n#     ylabel='Loss value',\n#     ylim=[0, max(max(train_loss), max(val_loss)) + 1],\n# )\n# ax_top.legend(\n#     title=\"Выборка\",\n# )\n# ax_top.grid()\n\n# # draw accuracy\n# ax_bottom.plot(epochs, train_acc, 'r', label='train')\n# ax_bottom.plot(epochs, val_acc, 'b', label='validation')\n\n# ax_bottom.set(\n#     title='Accuracy',\n#     xlabel='Epoch number',\n#     ylabel='Accuracy value',\n#     xticks=xticks,\n#     ylim=[0, 1],\n# )\n# ax_bottom.legend(\n#     title=\"Выборка\",\n# )\n# ax_bottom.grid()\n\n# fig.suptitle(\"Кривые обучения\")\n\n# plt.show()","metadata":{"papermill":{"duration":1.240124,"end_time":"2023-06-09T14:13:16.098599","exception":false,"start_time":"2023-06-09T14:13:14.858475","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Предсказание результатов","metadata":{"papermill":{"duration":0.593052,"end_time":"2023-06-09T14:13:17.278016","exception":false,"start_time":"2023-06-09T14:13:16.684964","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_outputs = []\nwith torch.no_grad():\n    for i_batch, sample_batched in enumerate(test_loader):\n        x = sample_batched\n        x = x.to(device)\n        output = network(x)\n        test_outputs.append(output.argmax(axis=1))\n    y_pred = torch.hstack(test_outputs).numpy(force=True)","metadata":{"papermill":{"duration":201.491099,"end_time":"2023-06-09T14:16:39.353618","exception":false,"start_time":"2023-06-09T14:13:17.862519","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_data = pd.DataFrame({'fname': sample_df[\"fname\"], 'index_label': y_pred})\nsubmission_data","metadata":{"papermill":{"duration":0.614742,"end_time":"2023-06-09T14:16:40.549830","exception":false,"start_time":"2023-06-09T14:16:39.935088","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_data['label'] = submission_data['index_label'].apply(lambda index: next(label for label, id in label_value_dict.items() if id == index))\nsubmission_data","metadata":{"papermill":{"duration":0.607786,"end_time":"2023-06-09T14:16:41.766789","exception":false,"start_time":"2023-06-09T14:16:41.159003","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_data = submission_data[['fname', 'label']]","metadata":{"papermill":{"duration":0.616893,"end_time":"2023-06-09T14:16:43.046049","exception":false,"start_time":"2023-06-09T14:16:42.429156","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_data","metadata":{"papermill":{"duration":0.62265,"end_time":"2023-06-09T14:16:44.254075","exception":false,"start_time":"2023-06-09T14:16:43.631425","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_data.to_csv('submission.csv', index=False)","metadata":{"papermill":{"duration":0.627154,"end_time":"2023-06-09T14:16:45.618067","exception":false,"start_time":"2023-06-09T14:16:44.990913","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}