{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"},{"sourceId":211952941,"sourceType":"kernelVersion"}],"dockerImageVersionId":30804,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import torch\nimport torchvision.transforms as transforms\nfrom torch.utils.data import DataLoader, Dataset\nimport os\nimport pandas as pd\nimport numpy as np\nfrom PIL import Image\nimport seaborn as sns\n\nimport matplotlib.pyplot as plt\nimport os\nimport time\nimport numpy as np\nimport glob\nimport json\nimport collections\nimport torch\nimport torch.nn as nn\n\nimport pydicom as dicom\nimport matplotlib.patches as patches\n\nfrom matplotlib import animation, rc\nimport pandas as pd\n\nimport pydicom as dicom # dicom\nimport pydicom\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\nimport random\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom torch.utils.data import Dataset, DataLoader\nimport torchvision.transforms as transforms\nimport torch\nimport torch.optim.lr_scheduler as lr_scheduler\nfrom tqdm import tqdm\nimport matplotlib.pyplot as plt\nimport torch\nimport torch.nn as nn\nimport torchvision.models as models\nfrom torchvision import transforms\nfrom torch.utils.data import DataLoader\nfrom sklearn.model_selection import train_test_split\nimport pandas as pd\nfrom tqdm import tqdm\nimport torch.optim.lr_scheduler as lr_scheduler\nfrom copy import deepcopy\nimport os\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:13:55.815742Z","iopub.execute_input":"2024-12-18T14:13:55.816906Z","iopub.status.idle":"2024-12-18T14:13:55.825835Z","shell.execute_reply.started":"2024-12-18T14:13:55.816854Z","shell.execute_reply":"2024-12-18T14:13:55.824978Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch.nn as nn\n# Model tanımı (CustomResNet50)\nclass CustomResNet50(nn.Module):\n    def __init__(self, num_classes=3, pretrained_weights=None):\n        super(CustomResNet50, self).__init__()\n        self.model = models.resnet50(weights=None)  # `weights` kullanımıyla güncellendi\n        if pretrained_weights:\n            self.model.load_state_dict(torch.load(pretrained_weights, map_location=device))\n        num_ftrs = self.model.fc.in_features\n        self.model.fc = nn.Linear(num_ftrs, num_classes)\n\n    def forward(self, x):\n        return self.model(x)\n\n    def unfreeze_model(self):\n        for param in self.model.parameters():\n            param.requires_grad = True\n\n# Modelleri yükleme\nmodels_dict = {  # İsim çakışmasını önlemek için `models_dict` kullanıldı\n    'Sagittal T1': CustomResNet50(num_classes=3).to(device),\n    'Axial T2': CustomResNet50(num_classes=3).to(device),\n    'Sagittal T2/STIR': CustomResNet50(num_classes=3).to(device),\n}\n\n# Series description'a göre model seçimi\ndef get_model(series_description):\n    return models_dict.get(series_description, None)  # Burada `models_dict` kullanılıyor\n############################################3\n# Create a test dataset and dataloader\ntest_dataset = TestDataset(expanded_test_desc, transform)\ntestloader = DataLoader(test_dataset, batch_size=1, shuffle=False)\n#####################################\n# Prediction işlemi\ndef predict_test_data(testloader, expanded_test_desc):\n    predictions = []\n    normal_mild_probs = []\n    moderate_probs = []\n    severe_probs = []\n\n    for model in models_dict.values():  # `models_dict` kullanıldı\n        model.eval()\n\n    with torch.no_grad():\n        for idx, images in enumerate(tqdm(testloader)):\n            images = images.to(device)\n            series_description = expanded_test_desc.iloc[idx]['series_description']\n            model = get_model(series_description)\n            if model:\n                outputs = model(images)\n                probs = torch.softmax(outputs, dim=1).squeeze(0)\n                normal_mild_probs.append(probs[0].item())\n                moderate_probs.append(probs[1].item())\n                severe_probs.append(probs[2].item())\n                predictions.append(probs)\n            else:\n                normal_mild_probs.append(None)\n                moderate_probs.append(None)\n                severe_probs.append(None)\n                predictions.append(None)\n\n    return normal_mild_probs, moderate_probs, severe_probs, predictions\n\n# Tahminleri çalıştır\nnormal_mild_probs, moderate_probs, severe_probs, test_predictions = predict_test_data(testloader, expanded_test_desc)\n\n# Tahmin sonuçlarını DataFrame'e ekleme\nexpanded_test_desc['normal_mild'] = normal_mild_probs\nexpanded_test_desc['moderate'] = moderate_probs\nexpanded_test_desc['severe'] = severe_probs\n\n# Submission DataFrame hazırlama\nsubmission = expanded_test_desc[[\"row_id\", \"normal_mild\", \"moderate\", \"severe\"]]\ngrouped_submission = submission.groupby('row_id').max().reset_index()\n\n# Normalizasyon işlemi\ngrouped_submission[['normal_mild', 'moderate', 'severe']] = grouped_submission[\n    ['normal_mild', 'moderate', 'severe']\n].div(grouped_submission[['normal_mild', 'moderate', 'severe']].sum(axis=1), axis=0)\n\n# Submission dosyasını kaydetme\ngrouped_submission.to_csv(\"/kaggle/working/submission.csv\", index=False)\nprint(\"Tahmin tamamlandı ve 'submission.csv' dosyası oluşturuldu.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:21:53.979262Z","iopub.execute_input":"2024-12-18T14:21:53.979751Z","iopub.status.idle":"2024-12-18T14:21:59.557698Z","shell.execute_reply.started":"2024-12-18T14:21:53.979709Z","shell.execute_reply":"2024-12-18T14:21:59.556847Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"grouped_submission.head(5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T14:02:51.736787Z","iopub.execute_input":"2024-12-18T14:02:51.737179Z","iopub.status.idle":"2024-12-18T14:02:51.751038Z","shell.execute_reply.started":"2024-12-18T14:02:51.73714Z","shell.execute_reply":"2024-12-18T14:02:51.750093Z"}},"outputs":[],"execution_count":null}]}