{"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":59093,"databundleVersionId":7469972,"sourceType":"competition"},{"sourceId":159396114,"sourceType":"kernelVersion"},{"sourceId":159333316,"sourceType":"kernelVersion"},{"sourceId":159818590,"sourceType":"kernelVersion"}],"dockerImageVersionId":30635,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"### Import all necessary libraries","metadata":{}},{"cell_type":"code","source":"# Importing essential libraries\nimport pandas as pd  # For handling CSV files\nimport numpy as np   # For matrix operations\nimport random\n\n# PyTorch for deep learning\nimport torch\nimport torch.nn as nn  # Neural network module\nimport torch.nn.functional as F  # Neural network functions\n\n# torchvision for image processing and augmentation\nimport torchvision.transforms as transforms\n\n# Setting up a random seed for reproducibility\nrandom.seed(42)\ntorch.manual_seed(42)\n\n# Suppressing minor warnings to keep the output clean\nimport warnings\nwarnings.filterwarnings('ignore', category=Warning)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:43.611000Z","iopub.execute_input":"2024-01-21T14:31:43.611923Z","iopub.status.idle":"2024-01-21T14:31:46.241864Z","shell.execute_reply.started":"2024-01-21T14:31:43.611853Z","shell.execute_reply":"2024-01-21T14:31:46.240518Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Config:\n    # Updated the seed year to the current year for relevance\n    seed = 2024\n    \n    # Updated image transformation method for more flexibility\n    # Now includes both resizing and normalization steps\n    image_transform = transforms.Compose([\n        transforms.Resize((512, 512)),\n    ])\n    \n    # Number of folds in a cross-validation setup remains the same\n    num_folds = 5","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:46.243546Z","iopub.execute_input":"2024-01-21T14:31:46.244144Z","iopub.status.idle":"2024-01-21T14:31:46.251467Z","shell.execute_reply.started":"2024-01-21T14:31:46.244105Z","shell.execute_reply":"2024-01-21T14:31:46.250118Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Initialize an empty list to store the models\nmodels = []\n\n# Load models from each fold\nfor i in range(Config.num_folds):\n    model_path = f'/kaggle/input/hms-baseline-resnet34d-512-512-training-5-folds/HMS_resnet_fold{i}.pth'\n    with open(model_path, 'rb') as f:\n        model = torch.load(f)\n        models.append(model)\n\n# Load the additional model\nadditional_model_path = \"/kaggle/input/hms-baseline-resnet34d-512-512-training/HMS_resnet.pth\"\nwith open(additional_model_path, 'rb') as f:\n    additional_model = torch.load(f)\nmodels.append(additional_model)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:46.253193Z","iopub.execute_input":"2024-01-21T14:31:46.253559Z","iopub.status.idle":"2024-01-21T14:31:48.328477Z","shell.execute_reply.started":"2024-01-21T14:31:46.253527Z","shell.execute_reply":"2024-01-21T14:31:48.327063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def seed_everything(seed):\n    # Set the seed for generating random numbers in PyTorch\n    torch.manual_seed(seed)\n    \n    # Ensure that the PyTorch's CuDNN backend behaves deterministically\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False  # Disabling this for reproducibility\n\n    # Set the seed for generating random numbers in NumPy\n    np.random.seed(seed)\n\n    # Set the seed for the default Python random number generator\n    random.seed(seed)\n\nseed_everything(Config.seed)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:48.332668Z","iopub.execute_input":"2024-01-21T14:31:48.333129Z","iopub.status.idle":"2024-01-21T14:31:48.341432Z","shell.execute_reply.started":"2024-01-21T14:31:48.333088Z","shell.execute_reply":"2024-01-21T14:31:48.340241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_and_preprocess_data(path):\n    eps = 1e-6\n    data = pd.read_parquet(path)\n    data = data.fillna(-1).values[:, 1:].T  # Transpose and remove first column\n    data = data[:, :300]  # Select first 300 columns\n    data = np.clip(data, np.exp(-6), np.exp(10))\n    data = np.log(data)  # Log transformation\n\n    # Normalize the data\n    data_mean = data.mean(axis=(0, 1))\n    data_std = data.std(axis=(0, 1))\n    normalized_data = (data - data_mean) / (data_std + eps)\n\n    # Convert to PyTorch tensor and apply transformations\n    data_tensor = torch.unsqueeze(torch.Tensor(normalized_data), dim=0)\n    return Config.image_transform(data_tensor)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:48.343156Z","iopub.execute_input":"2024-01-21T14:31:48.343554Z","iopub.status.idle":"2024-01-21T14:31:48.357962Z","shell.execute_reply.started":"2024-01-21T14:31:48.343521Z","shell.execute_reply":"2024-01-21T14:31:48.356465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def predict(models, data):\n    test_preds = []\n    for model in models:\n        model.eval()\n        with torch.no_grad():\n            pred = F.softmax(model(data.unsqueeze(0)))[0]\n            pred = pred.detach().cpu().numpy()\n        test_preds.append(pred)\n    return np.array(test_preds).mean(axis=0)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:48.359886Z","iopub.execute_input":"2024-01-21T14:31:48.360403Z","iopub.status.idle":"2024-01-21T14:31:48.369605Z","shell.execute_reply.started":"2024-01-21T14:31:48.360365Z","shell.execute_reply":"2024-01-21T14:31:48.368313Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def prepare_submission(submission_file, test_df, test_preds):\n    submission = pd.read_csv(submission_file)\n    labels = ['seizure', 'lpd', 'gpd', 'lrda', 'grda', 'other']\n    for i, label in enumerate(labels):\n        submission[f'{label}_vote'] = test_preds[:, i]\n    return submission","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:48.371477Z","iopub.execute_input":"2024-01-21T14:31:48.372552Z","iopub.status.idle":"2024-01-21T14:31:48.380445Z","shell.execute_reply.started":"2024-01-21T14:31:48.372516Z","shell.execute_reply":"2024-01-21T14:31:48.379257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Main execution\ntest_df = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/test.csv\")\nsubmission = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/sample_submission.csv\")\nsubmission = submission.merge(test_df, on='eeg_id', how='left')\nsubmission['path'] = submission['spectrogram_id'].apply(\n    lambda x: f\"/kaggle/input/hms-harmful-brain-activity-classification/test_spectrograms/{x}.parquet\"\n)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:48.382469Z","iopub.execute_input":"2024-01-21T14:31:48.382854Z","iopub.status.idle":"2024-01-21T14:31:48.406718Z","shell.execute_reply.started":"2024-01-21T14:31:48.382823Z","shell.execute_reply":"2024-01-21T14:31:48.405360Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"paths = submission['path'].values\ntest_preds = [predict(models, load_and_preprocess_data(path)) for path in paths]","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:48.409538Z","iopub.execute_input":"2024-01-21T14:31:48.410111Z","iopub.status.idle":"2024-01-21T14:31:51.045431Z","shell.execute_reply.started":"2024-01-21T14:31:48.410060Z","shell.execute_reply":"2024-01-21T14:31:51.044396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_submission = prepare_submission(\n    \"/kaggle/input/hms-harmful-brain-activity-classification/sample_submission.csv\", \n    test_df, \n    np.array(test_preds)\n)","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:51.047187Z","iopub.execute_input":"2024-01-21T14:31:51.047941Z","iopub.status.idle":"2024-01-21T14:31:51.058614Z","shell.execute_reply.started":"2024-01-21T14:31:51.047890Z","shell.execute_reply":"2024-01-21T14:31:51.057587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_submission.to_csv(\"submission.csv\", index=None)\nfinal_submission.head()","metadata":{"execution":{"iopub.status.busy":"2024-01-21T14:31:51.060226Z","iopub.execute_input":"2024-01-21T14:31:51.061745Z","iopub.status.idle":"2024-01-21T14:31:51.083588Z","shell.execute_reply.started":"2024-01-21T14:31:51.061699Z","shell.execute_reply":"2024-01-21T14:31:51.082308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"btw thanks Inspire notebook YUNSUXIAOZI","metadata":{}},{"cell_type":"markdown","source":"### Created and Updated by JillaniSoftTech","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}