{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":91844,"databundleVersionId":11361821,"isSourceIdPinned":false,"sourceType":"competition"},{"sourceId":11206785,"sourceType":"datasetVersion","datasetId":6997535},{"sourceId":11209720,"sourceType":"datasetVersion","datasetId":6999640},{"sourceId":11209932,"sourceType":"datasetVersion","datasetId":6999780},{"sourceId":307610,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":262087,"modelId":283224},{"sourceId":307621,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":262095,"modelId":283232},{"sourceId":307696,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":262130,"modelId":283266},{"sourceId":310116,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":263161,"modelId":284268},{"sourceId":310118,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":263163,"modelId":284270},{"sourceId":316817,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":267377,"modelId":288433},{"sourceId":316979,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":267504,"modelId":288554},{"sourceId":317538,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":267925,"modelId":288953},{"sourceId":318207,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":268511,"modelId":289533},{"sourceId":318236,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":268536,"modelId":289557},{"sourceId":323371,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":272423,"modelId":293403}],"dockerImageVersionId":30918,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install librosa","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:35:47.935938Z","iopub.execute_input":"2025-04-05T16:35:47.936323Z","iopub.status.idle":"2025-04-05T16:35:53.963120Z","shell.execute_reply.started":"2025-04-05T16:35:47.936282Z","shell.execute_reply":"2025-04-05T16:35:53.961934Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\n\nfrom IPython.display import Audio\nfrom IPython.core.display import display\nimport IPython.display as ipd\n\nimport torch\nimport torchaudio #audio preprocessing via gpu\nimport torch,torchvision\nfrom torch import nn\nfrom torch.nn import functional\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader,IterableDataset\nimport torch.optim as optim\nfrom torch.optim.lr_scheduler import CosineAnnealingLR\n\nfrom tqdm import tqdm\nimport timm\nimport os\nfrom glob import glob\nimport sys\nsys.path.append(\"/kaggle/input/silero_useful/pytorch/default/1/src/\")\n\n\nfrom silero_vad.utils_vad import get_speech_timestamps\nfrom silero_vad.model import load_silero_vad\nimport librosa\n\nimport torchaudio.transforms as T\nimport tensorflow as tf\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:35:53.964297Z","iopub.execute_input":"2025-04-05T16:35:53.964657Z","iopub.status.idle":"2025-04-05T16:36:23.687691Z","shell.execute_reply.started":"2025-04-05T16:35:53.964628Z","shell.execute_reply":"2025-04-05T16:36:23.686621Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class ConfigMein:\n    device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n    authors= [\n    'Alexandra Butrago-Cardona',\n    'Ana María Ospina-Larrea | Daniela Murillo',\n    'Diego A Gómez-Morales',\n    'Eliana Barona- Cortés',\n    'Eliana Barona-Cortés | Daniela García-Cobos',\n    'Paula Caycedo-Rosales | Juan-Pablo López',\n    'Fabio A. Sarria-S'\n    ]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:23.688715Z","iopub.execute_input":"2025-04-05T16:36:23.689333Z","iopub.status.idle":"2025-04-05T16:36:23.698310Z","shell.execute_reply.started":"2025-04-05T16:36:23.689303Z","shell.execute_reply":"2025-04-05T16:36:23.697100Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_csv=pd.read_csv(\"/kaggle/input/birdclef-2025/train.csv\")\ntax_csv=pd.read_csv(\"/kaggle/input/birdclef-2025/taxonomy.csv\")\nmerged=pd.merge(train_csv,tax_csv,how=\"left\",left_on=[\"primary_label\",\"common_name\"],right_on=[\"primary_label\",\"common_name\"])\nprob_labels=pd.read_csv(\"/kaggle/input/birdclef-2025/sample_submission.csv\").drop(\"row_id\",axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:23.701151Z","iopub.execute_input":"2025-04-05T16:36:23.701636Z","iopub.status.idle":"2025-04-05T16:36:23.994745Z","shell.execute_reply.started":"2025-04-05T16:36:23.701594Z","shell.execute_reply":"2025-04-05T16:36:23.993512Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"prob_labels","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:23.996631Z","iopub.execute_input":"2025-04-05T16:36:23.996975Z","iopub.status.idle":"2025-04-05T16:36:24.033212Z","shell.execute_reply.started":"2025-04-05T16:36:23.996951Z","shell.execute_reply":"2025-04-05T16:36:24.032071Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dummi=pd.get_dummies(merged[\"primary_label\"],dtype=float)\ndummi","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.034388Z","iopub.execute_input":"2025-04-05T16:36:24.034833Z","iopub.status.idle":"2025-04-05T16:36:24.084248Z","shell.execute_reply.started":"2025-04-05T16:36:24.034797Z","shell.execute_reply":"2025-04-05T16:36:24.083137Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data=pd.concat([merged,dummi],axis=1)\ndata","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.085344Z","iopub.execute_input":"2025-04-05T16:36:24.085676Z","iopub.status.idle":"2025-04-05T16:36:24.181073Z","shell.execute_reply.started":"2025-04-05T16:36:24.085652Z","shell.execute_reply":"2025-04-05T16:36:24.180007Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"torch.set_num_threads(1)\nmodel=load_silero_vad()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.182129Z","iopub.execute_input":"2025-04-05T16:36:24.182476Z","iopub.status.idle":"2025-04-05T16:36:24.371251Z","shell.execute_reply.started":"2025-04-05T16:36:24.182451Z","shell.execute_reply":"2025-04-05T16:36:24.370210Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class EDA(nn.Module):\n    def __init__(self,df=merged):\n        super().__init__()\n        self.df=df\n        self.authors=ConfigMein.authors\n        self.label_f=data.drop(['primary_label','secondary_labels','type','collection','rating','url','latitude','longitude','scientific_name_x','common_name','author','license','inat_taxon_id','scientific_name_y','class_name'],axis=1)\n    def human_voice_detector(self,wav,sr):\n        \n\n        print(wav.shape)\n        # Calculate the sound power\n        power = wav ** 2\n        \n        # Split the data into chunks and sum the energy in every chunk\n        chunk = int(chunk_len * sr)\n        \n        pad = int(np.ceil(len(power) / chunk) * chunk - len(power))\n        power = np.pad(power, (0, pad))\n        power = power.reshape((-1, chunk)).sum(axis=1)\n\n        speech_timestamps = get_speech_timestamps(torch.Tensor(wav), model,threshold=0.4)\n        segmentation = np.zeros_like(wav)\n        for st in speech_timestamps:\n            segmentation[st['start']: st['end']] = 20\n    \n        fig = plt.figure(figsize=(24, 3))\n        fig.suptitle(f'{rec.filename} by {rec.author}')\n        \n        t = np.arange(len(power)) * chunk_len\n        plt.plot(t, 10 * np.log10(power), 'b')\n        \n        t = np.arange(len(segmentation)) / sr\n        plt.plot(t, segmentation, 'r')        \n        plt.show()\n        \n        display(Audio(fname))\n    def delete_human_sound(self,wav,sample_rate):\n        \n        speech_timestamps = get_speech_timestamps(wav, model, return_seconds=True, threshold=0.4);\n        prev_end=0.0\n        part=[]\n        for i in speech_timestamps:\n            init,end=i[\"start\"],i[\"end\"]\n    \n            if(init-prev_end>0.5):\n                part.append(wav[int(prev_end * sample_rate):int(init * sample_rate)])\n            prev_end=end\n        if prev_end*sample_rate < wav.shape[0]:\n             part.append(wav[int(prev_end*sample_rate):])\n    \n        if len(part) > 0:\n            filtered_wav= np.concatenate(part, axis=0)\n        else:\n            filtered_wav= wav\n        return filtered_wav\n    def delete_human_sound_torch(self,wav,sample_rate=16000):\n        \n        \n        # Eğer stereo ise mono'ya çevir\n        if wav.shape[0] > 1:\n            wav = wav.mean(dim=0, keepdim=True)  # Kanalları ortalayarak mono'ya çevir\n        \n        \n        \n        prev_end = 0.0\n        part = []\n        for i in speech_timestamps:\n            init, end = i[\"start\"], i[\"end\"]\n        \n            # Eğer arada 0.4 saniyeden uzun boşluk varsa o kısmı kaydet\n            if init - prev_end > 0.4:\n                start_idx = int(prev_end * sample_rate)\n                end_idx = int(init * sample_rate)\n                part.append(wav[:, start_idx:end_idx])  # Doğru indeksleme\n        \n            prev_end = end\n        \n        # Eğer sondaki ses parçalanmamışsa, onu da ekle\n        if int(prev_end * sample_rate) < wav.shape[1]:\n            part.append(wav[:, int(prev_end * sample_rate):])\n        \n        # Parçaları birleştir\n        if len(part) > 0:\n            filtered_wav = torch.cat(part, dim=1)  # Doğru eksende birleştir\n            \n        else:\n            filtered_wav = wav\n            \n        return filtered_wav    \n    \n    def sub_eda(self):\n       for _,row in self.df.iterrows():\n            link=\"/kaggle/input/birdclef-2025/train_audio/\"+row[\"filename\"]\n            wav,sr=librosa.load(link,sr=16000)\n            wav, index = librosa.effects.trim(wav,top_db=20)\n            \n            \n            aut=row[\"author\"]\n            there=row[\"collection\"]\n            labels = self.label_f[\"/kaggle/input/birdclef-2025/train_audio/\"+self.label_f.filename == link].drop(\"filename\", axis=1).to_numpy().flatten()\n    \n            if (aut in self.authors) and there==\"CSA\":\n                wav=self.delete_human_sound(wav,sr)\n            else:\n                pass            \n            \n            \n            \n            segments=self.segment_audio(wav,sr,5)\n            for segment in segments:\n                spectrogram = librosa.stft(segment, n_fft=320, hop_length=32, win_length=320)\n                spectrogram = np.abs(spectrogram)\n                spectrogram = np.expand_dims(spectrogram, axis=2)\n                \n                yield spectrogram,labels\n    def sub_eda2(self,link):\n       \n        \n        wav,sr=librosa.load(link,sr=16000)\n        wav, index = librosa.effects.trim(wav,top_db=20)\n            \n        wav = wav / np.max(np.abs(wav))\n        aut=self.df[\"/kaggle/input/birdclef-2025/train_audio/\"+self.df.filename==link][\"author\"].item()\n        there=self.df[\"/kaggle/input/birdclef-2025/train_audio/\"+self.df.filename==link][\"collection\"].item()\n        labels = self.label_f[\"/kaggle/input/birdclef-2025/train_audio/\"+self.label_f.filename == link].drop(\"filename\", axis=1).to_numpy().flatten()\n    \n        if (aut in self.authors) and there==\"CSA\":\n            wav=self.delete_human_sound(wav,sr)\n        else:\n            pass            \n              \n        segment=self.segment_audio2(wav,sr,5) \n        spectrogram = librosa.stft(segment, n_fft=320, hop_length=32, win_length=320)\n        spectrogram = np.transpose(np.abs(spectrogram))\n        spectrogram = torch.tensor(np.expand_dims(spectrogram, axis=0))\n        \n        return spectrogram,labels\n        \n    def for_test(self,links,mode):\n        if(mode==\"Testfor\"):\n            for link in links:\n                name=(link[45:])[:-4]\n                wav,sr=librosa.load(link,sr=16000)\n                wav, index = librosa.effects.trim(wav,top_db=20)\n                #wav=self.delete_human_sound(wav,sr)\n                segments=self.segment_audio(wav,sr,5) \n                for idx , segment in enumerate(segments):\n                    num=(idx+1)*5\n                    spectrogram = librosa.stft(segment, n_fft=320, hop_length=32, win_length=320)\n                    spectrogram = np.transpose(np.abs(spectrogram))\n                    spectrogram = torch.tensor(np.expand_dims(spectrogram, axis=0))\n                    index=f\"{name}_{num}\"\n                    yield spectrogram,index\n        else:\n            for link in links:\n                name=(link[46:])[:-4]\n                wav,sr=librosa.load(link,sr=16000)\n                wav, index = librosa.effects.trim(wav,top_db=20)\n                #wav=self.delete_human_sound(wav,sr)\n                segments=self.segment_audio(wav,sr,5) \n                for idx , segment in enumerate(segments):\n                    num=(idx+1)*5\n                    spectrogram = librosa.stft(segment, n_fft=320, hop_length=32, win_length=320)\n                    spectrogram = np.transpose(np.abs(spectrogram))\n                    spectrogram = torch.tensor(np.expand_dims(spectrogram, axis=0))\n                    index=f\"{name}_{num}\"\n                    yield spectrogram,index            \n            \n    def sub_eda_torch(self,link):\n        new_sr=16000\n        wav,sr=torchaudio.load(link)\n        wav=wav.to(\"cuda\")\n        wav = torchaudio.functional.resample(wav, orig_freq=sr, new_freq=new_sr)\n        speech_timestamps = get_speech_timestamps(wav.squeeze(0), self.model, return_seconds=True, threshold=0.4)\n        aut=self.df[\"/kaggle/input/birdclef-2025/train_audio/\"+self.df.filename==link][\"author\"].item()\n        if aut in self.authors:\n            wav=self.delete_human_sound_torch(wav,new_sr).squeeze()\n            \n        else:\n            wav=wav.squeeze()\n        wav = torchaudio.functional.vad(wav, sample_rate=new_sr,trigger_level=0.1)\n        \n        wav = wav / torch.max(torch.abs(wav))\n        \n        \"\"\"mel_spectrogram = librosa.feature.melspectrogram(y=wav, sr=sr, n_mels=128, fmax=8000)\n        mel_spectrogram_db = librosa.power_to_db(mel_spectrogram, ref=np.max)\"\"\"\n        mfcc_transform = T.MFCC(\n            sample_rate=sr, \n            n_mfcc=40, \n            melkwargs={\"n_fft\": 400, \"hop_length\": 160, \"n_mels\": 40, \"center\": False}\n        ).to(\"cuda\")\n        \n        mfcc = mfcc_transform(wav)\n\n        mfcc_processed = torch.mean(mfcc, dim=-1)\n        \n        return mfcc_processed\n    def segment_audio(self,wav, sr, segment_duration=5):\n        samples_per_segment = segment_duration * sr  # 5 saniye = 5 * sr örnek\n        segments=[]\n        wav=np.pad(wav,((12*samples_per_segment)-len(wav),0))\n        for i in range(0, len(wav), samples_per_segment):\n            segment = wav[i:i + samples_per_segment]\n            \n            # Eğer segment 5 saniyeden kısa ise, sıfırlarla doldur\n            if len(segment) < samples_per_segment:\n                segment = np.pad(segment, (samples_per_segment - len(segment),0))\n            \n            segments.append(segment)\n        return segments\n        \n    def segment_audio2(self,wav, sr, segment_duration=5):\n        samples_per_segment = segment_duration * sr  # 5 saniye = 5 * sr örnek\n\n        segment = wav[:samples_per_segment]\n            \n            # Eğer segment 5 saniyeden kısa ise, sıfırlarla doldur\n        if len(segment) < samples_per_segment:\n            segment = np.pad(segment, ( samples_per_segment - len(segment),0))\n            \n            \n        return segment    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.372266Z","iopub.execute_input":"2025-04-05T16:36:24.372545Z","iopub.status.idle":"2025-04-05T16:36:24.404839Z","shell.execute_reply.started":"2025-04-05T16:36:24.372524Z","shell.execute_reply":"2025-04-05T16:36:24.403635Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"eda=EDA()\ntrain,valid=train_test_split(data,test_size=0.15)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.405854Z","iopub.execute_input":"2025-04-05T16:36:24.406265Z","iopub.status.idle":"2025-04-05T16:36:24.491837Z","shell.execute_reply.started":"2025-04-05T16:36:24.406207Z","shell.execute_reply":"2025-04-05T16:36:24.490710Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from torch.utils.data import Dataset, DataLoader\nclass CreatetDataset(Dataset):\n    def __init__(self, dataframe):\n        self.dataframe = dataframe\n        \n\n    def __len__(self):\n        return len(self.dataframe)\n\n    def __getitem__(self, idx):\n        row = self.dataframe.iloc[idx]\n        audio_path = f\"/kaggle/input/birdclef-2025/train_audio/{row['filename']}\"\n\n        if os.path.exists(audio_path):\n            video_tensor,label = eda.sub_eda2(audio_path)\n        return video_tensor, label\n\ntrain_dataset = CreatetDataset(train)\ntrain_dataloader = DataLoader(train_dataset, batch_size=8, shuffle=True)\nvalid_dataset = CreatetDataset(valid)\nvalid_dataloader = DataLoader(valid_dataset, batch_size=8)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.492841Z","iopub.execute_input":"2025-04-05T16:36:24.493188Z","iopub.status.idle":"2025-04-05T16:36:24.500402Z","shell.execute_reply.started":"2025-04-05T16:36:24.493161Z","shell.execute_reply":"2025-04-05T16:36:24.499228Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class AudioEfficientNet(nn.Module):\n    def __init__(self, num_classes=206):\n        super(AudioEfficientNet, self).__init__()\n        \n        # EfficientNet modelini yükle\n        self.efficientnet = timm.create_model(\"efficientnet_b0\", pretrained=True, in_chans=1)\n\n        # Son katmanı sınıf sayısına göre değiştir\n        self.efficientnet.classifier = nn.Linear(self.efficientnet.classifier.in_features, num_classes)\n\n    def forward(self, x):\n         # (Batch, Channel=1, Frequency=165, Time=2501)\n        x = self.efficientnet(x)\n        return x\n#efficient=AudioEfficientNet()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.501677Z","iopub.execute_input":"2025-04-05T16:36:24.502157Z","iopub.status.idle":"2025-04-05T16:36:24.520912Z","shell.execute_reply.started":"2025-04-05T16:36:24.502116Z","shell.execute_reply":"2025-04-05T16:36:24.519816Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"efficient = torch.load(\"/kaggle/input/full_and_last/pytorch/default/1/full_model_fin.pth\")\nefficient.to(ConfigMein.device)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.524875Z","iopub.execute_input":"2025-04-05T16:36:24.525218Z","iopub.status.idle":"2025-04-05T16:36:24.823590Z","shell.execute_reply.started":"2025-04-05T16:36:24.525192Z","shell.execute_reply":"2025-04-05T16:36:24.822291Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"criterion = nn.CrossEntropyLoss()\noptimizer = optim.AdamW(efficient.parameters(), lr=1e-4) \nscheduler = CosineAnnealingLR(optimizer, T_max=5, eta_min=1e-6)\nscaler = torch.cuda.amp.GradScaler()\nnum_epochs = 5\n\ndef train_model(model, train_loader, valid_loader, epochs):\n    \n    model.to(ConfigMein.device)\n    batch_size = 8\n    m = nn.Softmax(dim=1)\n    for epoch in range(epochs):\n        model.train()\n        running_loss = 0.0\n        correct = 0\n        total = 0\n\n        progress_bar = tqdm(train_loader, total=len(train_loader), \n                            desc=f\"Epoch {epoch+1}/{epochs}\", leave=False)\n\n        for (videos, labels) in progress_bar:\n            videos, labels = videos.to(ConfigMein.device), labels.to(ConfigMein.device) # BCE için float() gerekli olabilir\n\n            optimizer.zero_grad()\n\n            with torch.cuda.amp.autocast():\n                outputs = model(videos) # Çıkış sigmoid ile olasılık\n                loss = criterion(outputs, labels)\n\n            scaler.scale(loss).backward()\n            \n                      \n            scaler.step(optimizer)\n            scaler.update()\n\n            running_loss += loss.item()\n            predicted = m(outputs).argmax(-1)  # Binary thresholding\n            correct += (predicted == labels.argmax(-1)).sum().item()\n            total += labels.size(0)\n\n            progress_bar.set_postfix(loss=f\"{running_loss / (total / batch_size):.4f}\", \n                                     acc=f\"{correct/total:.4f}\")\n\n        print(f\"Epoch [{epoch+1}/{epochs}], Loss: {running_loss/len(train_loader):.4f}, Accuracy: {correct/total:.4f}\")\n\n        # Validation\n        model.eval()\n        running_loss_v = 0.0\n        correct_v = 0\n        total_v = 0\n\n        progress_bar_val = tqdm(valid_loader, total=len(valid_loader), \n                                desc=f\"Validation {epoch+1}/{epochs}\", leave=False)\n\n        with torch.no_grad():\n            for (videos, labels) in progress_bar_val:\n                videos, labels = videos.to(ConfigMein.device), labels.to(ConfigMein.device)\n\n                with torch.cuda.amp.autocast():\n                    outputs = model(videos)\n                    loss = criterion(outputs, labels)\n\n                running_loss_v += loss.item()\n                predicted = m(outputs).argmax(-1)\n                correct_v += (predicted == labels.argmax(-1)).sum().item()\n                total_v += labels.size(0)\n\n                progress_bar_val.set_postfix(loss=f\"{running_loss_v / (total_v / batch_size):.4f}\", \n                                             acc=f\"{correct_v/total_v:.4f}\")\n\n         # ReduceLROnPlateau, validation loss almalı\n\n        if (epoch + 1) % 3 == 0:\n            print(\"Model Checkpointed\")\n            torch.save(model.state_dict(), f\"longshort_{epoch}.pth\")\n\n        print(f\"Epoch [{epoch+1}/{epochs}], Val Loss: {running_loss_v/len(valid_loader):.4f}, Val Accuracy: {correct_v/total_v:.4f}\")\n\n    print(\"Training Complete!\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.825605Z","iopub.execute_input":"2025-04-05T16:36:24.826026Z","iopub.status.idle":"2025-04-05T16:36:24.846306Z","shell.execute_reply.started":"2025-04-05T16:36:24.825991Z","shell.execute_reply":"2025-04-05T16:36:24.844772Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"my model has been already fitted.Thus i wont train again.","metadata":{}},{"cell_type":"code","source":"#train_model(efficient,train_dataloader,valid_dataloader,1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.847670Z","iopub.execute_input":"2025-04-05T16:36:24.848083Z","iopub.status.idle":"2025-04-05T16:36:24.867361Z","shell.execute_reply.started":"2025-04-05T16:36:24.848045Z","shell.execute_reply":"2025-04-05T16:36:24.866222Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import glob\nif(len(glob.glob(\"/kaggle/input/birdclef-2025/test_soundscapes/*.ogg\"))>0):\n    data_path=\"/kaggle/input/birdclef-2025/test_soundscapes\"\n    mode=\"Testfor\"\n    sub_paths=glob.glob(f\"{data_path}/*.ogg\")\nelse:\n    data_path=\"/kaggle/input/birdclef-2025/train_soundscapes\"\n    mode=\"Trainfor\"\n    sub_paths=glob.glob(f\"{data_path}/*.ogg\")[:5]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:24.868389Z","iopub.execute_input":"2025-04-05T16:36:24.868750Z","iopub.status.idle":"2025-04-05T16:36:25.010109Z","shell.execute_reply.started":"2025-04-05T16:36:24.868717Z","shell.execute_reply":"2025-04-05T16:36:25.008873Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(len(sub_paths))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:25.011119Z","iopub.execute_input":"2025-04-05T16:36:25.011394Z","iopub.status.idle":"2025-04-05T16:36:25.017197Z","shell.execute_reply.started":"2025-04-05T16:36:25.011371Z","shell.execute_reply":"2025-04-05T16:36:25.016070Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nclass IterDataset(IterableDataset):\n    def __init__(self,sub_paths,mode):\n        self.paths=sub_paths\n        self.mode=mode\n    def __iter__(self):\n        tensor=eda.for_test(self.paths,self.mode)\n        return tensor\n        \ntest_dataset = IterDataset(sub_paths,mode)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:25.018441Z","iopub.execute_input":"2025-04-05T16:36:25.018730Z","iopub.status.idle":"2025-04-05T16:36:25.037459Z","shell.execute_reply.started":"2025-04-05T16:36:25.018706Z","shell.execute_reply":"2025-04-05T16:36:25.036305Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\ndef test_model(model, dataset,mode, csv_path=\"submission.csv\"):\n    m = nn.Softmax(dim=1)\n    model.to(ConfigMein.device)\n    model.eval()\n    \n        \n    liste_tensor=[]\n    liste_label=[]\n    for tensor, index in DataLoader(dataset, batch_size=8):\n        tensor = tensor.to(ConfigMein.device)  # Eğer GPU kullanıyorsan\n        result = m(model(tensor))\n        result = result.detach().cpu().numpy()# Softmax uygula\n            \n        for idx in range(len(result)):\n            liste_tensor.append(result[idx])\n            liste_label.append(index[idx])\n    return liste_tensor,liste_label  \n   \n\nliste_tensor,liste_label=test_model(efficient,test_dataset,mode,\"submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:36:25.038860Z","iopub.execute_input":"2025-04-05T16:36:25.039435Z","iopub.status.idle":"2025-04-05T16:37:40.935421Z","shell.execute_reply.started":"2025-04-05T16:36:25.039394Z","shell.execute_reply":"2025-04-05T16:37:40.934357Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"len(liste_tensor),len(liste_label)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:37:40.936732Z","iopub.execute_input":"2025-04-05T16:37:40.937561Z","iopub.status.idle":"2025-04-05T16:37:40.944084Z","shell.execute_reply.started":"2025-04-05T16:37:40.937518Z","shell.execute_reply":"2025-04-05T16:37:40.942973Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"len(liste_tensor[0])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:37:40.945125Z","iopub.execute_input":"2025-04-05T16:37:40.945472Z","iopub.status.idle":"2025-04-05T16:37:40.969113Z","shell.execute_reply.started":"2025-04-05T16:37:40.945441Z","shell.execute_reply":"2025-04-05T16:37:40.967636Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"if(liste_tensor is not None):\n    submission = pd.DataFrame()\n    submission[\"row_id\"] = liste_label  # row_id ekle\n    \n    # liste_tensor'u DataFrame'e çevirerek sütunlarla uyumlu hale getir\n    tensor_df = pd.DataFrame(liste_tensor, columns=prob_labels.columns[:len(liste_tensor[0])])\n    \n    # submission ile birleştir\n    submission = pd.concat([submission, tensor_df], axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:37:40.970358Z","iopub.execute_input":"2025-04-05T16:37:40.970716Z","iopub.status.idle":"2025-04-05T16:37:41.004394Z","shell.execute_reply.started":"2025-04-05T16:37:40.970668Z","shell.execute_reply":"2025-04-05T16:37:41.002130Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.to_csv(\"/kaggle/working/submission.csv\",index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:37:41.005540Z","iopub.execute_input":"2025-04-05T16:37:41.005972Z","iopub.status.idle":"2025-04-05T16:37:41.046433Z","shell.execute_reply.started":"2025-04-05T16:37:41.005932Z","shell.execute_reply":"2025-04-05T16:37:41.045486Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.iloc[4][submission.columns[1:]].argmax()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-05T16:43:33.560227Z","iopub.execute_input":"2025-04-05T16:43:33.560570Z","iopub.status.idle":"2025-04-05T16:43:33.570970Z","shell.execute_reply.started":"2025-04-05T16:43:33.560545Z","shell.execute_reply":"2025-04-05T16:43:33.569575Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}