{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"},{"sourceId":2378330,"sourceType":"datasetVersion","datasetId":492658},{"sourceId":7402356,"sourceType":"datasetVersion","datasetId":4304475},{"sourceId":7805987,"sourceType":"datasetVersion","datasetId":4571300},{"sourceId":8054179,"sourceType":"datasetVersion","datasetId":4721546},{"sourceId":7601534,"sourceType":"datasetVersion","datasetId":4425227},{"sourceId":7403069,"sourceType":"datasetVersion","datasetId":4304949},{"sourceId":7450712,"sourceType":"datasetVersion","datasetId":4336944},{"sourceId":158958765,"sourceType":"kernelVersion"},{"sourceId":160700706,"sourceType":"kernelVersion"},{"sourceId":165876189,"sourceType":"kernelVersion"}],"dockerImageVersionId":30674,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Model source: https://www.kaggle.com/code/andreasbis/hms-inference-lb-0-41","metadata":{}},{"cell_type":"code","source":"import gc\nimport os\nimport random\nimport warnings\nimport numpy as np\nimport pandas as pd\nfrom IPython.display import display\n\nimport timm\nimport torch\nimport torch.nn as nn  \nimport torch.optim as optim\nimport torch.nn.functional as F\nimport torchvision.transforms as transforms\n\nfrom scipy import signal\n\nwarnings.filterwarnings('ignore', category=Warning)\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:22.674041Z","iopub.execute_input":"2024-04-07T13:04:22.674897Z","iopub.status.idle":"2024-04-07T13:04:32.159761Z","shell.execute_reply.started":"2024-04-07T13:04:22.674854Z","shell.execute_reply":"2024-04-07T13:04:32.158720Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os, gc\nos.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0,1\"\nimport tensorflow as tf\nimport pandas as pd, numpy as np\nimport matplotlib.pyplot as plt\nprint('TensorFlow version =',tf.__version__)\n\n# USE MULTIPLE GPUS\ngpus = tf.config.list_physical_devices('GPU')\nif len(gpus)<=1: \n    strategy = tf.distribute.OneDeviceStrategy(device=\"/gpu:0\")\n    print(f'Using {len(gpus)} GPU')\nelse: \n    strategy = tf.distribute.MirroredStrategy()\n    print(f'Using {len(gpus)} GPUs')","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:32.161497Z","iopub.execute_input":"2024-04-07T13:04:32.161962Z","iopub.status.idle":"2024-04-07T13:04:42.366995Z","shell.execute_reply.started":"2024-04-07T13:04:32.161935Z","shell.execute_reply":"2024-04-07T13:04:42.365949Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Config:\n    seed = 3131\n    image_transform = transforms.Resize((512, 512))\n    num_folds = 5\n#     dataset_wide_mean = 7.29084372799223e-05 #From c Train notebook\n#     dataset_wide_std = 4.510082606174668 #From c Train notebook\n    dataset_wide_mean = 3.3598860028733606e-05 #From u Train notebook\n    dataset_wide_std = 4.44672104598805 #From u Train notebook\n    \ndef set_seed(seed):\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = True\n    \n    torch.manual_seed(seed)\n    np.random.seed(seed)\n    random.seed(seed)\n    \nset_seed(Config.seed)","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:42.368136Z","iopub.execute_input":"2024-04-07T13:04:42.368728Z","iopub.status.idle":"2024-04-07T13:04:42.378009Z","shell.execute_reply.started":"2024-04-07T13:04:42.368700Z","shell.execute_reply":"2024-04-07T13:04:42.377218Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/test.csv\") \ntest_df['path_spec'] = test_df['spectrogram_id'].apply(lambda x: f\"/kaggle/input/hms-harmful-brain-activity-classification/test_spectrograms/{x}.parquet\")\ntest_df['path_eeg'] = test_df['eeg_id'].apply(lambda x: f\"/kaggle/input/hms-harmful-brain-activity-classification/test_eegs/{x}.parquet\")\n\n# submission = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/sample_submission.csv\")\n\n# submission = submission.merge(test_df, on='eeg_id', how='left')\n# submission['path_spec'] = submission['spectrogram_id'].apply(lambda x: f\"/kaggle/input/hms-harmful-brain-activity-classification/test_spectrograms/{x}.parquet\")\n# submission['path_eeg'] = submission['eeg_id'].apply(lambda x: f\"/kaggle/input/hms-harmful-brain-activity-classification/test_eegs/{x}.parquet\")\n\n# display(submission)\n\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:42.380347Z","iopub.execute_input":"2024-04-07T13:04:42.380691Z","iopub.status.idle":"2024-04-07T13:04:42.677441Z","shell.execute_reply.started":"2024-04-07T13:04:42.380666Z","shell.execute_reply":"2024-04-07T13:04:42.676441Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:42.678529Z","iopub.execute_input":"2024-04-07T13:04:42.678819Z","iopub.status.idle":"2024-04-07T13:04:42.692296Z","shell.execute_reply.started":"2024-04-07T13:04:42.678794Z","shell.execute_reply":"2024-04-07T13:04:42.691286Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --no-index --find-links=/kaggle/input/tf-efficientnet-whl-files /kaggle/input/tf-efficientnet-whl-files/efficientnet-1.1.1-py3-none-any.whl","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:42.693960Z","iopub.execute_input":"2024-04-07T13:04:42.694294Z","iopub.status.idle":"2024-04-07T13:04:55.931431Z","shell.execute_reply.started":"2024-04-07T13:04:42.694268Z","shell.execute_reply":"2024-04-07T13:04:55.930463Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import efficientnet.tfkeras as efn\n\ndef build_model():\n    \n    inp = tf.keras.Input(shape=(512,512,2))\n\n    base_model = efn.EfficientNetB0(include_top=False, weights=None, input_shape=None)\n    base_model.load_weights('/kaggle/input/tf-efficientnet-imagenet-weights/efficientnet-b0_weights_tf_dim_ordering_tf_kernels_autoaugment_notop.h5')\n    \n    # RESHAPE INPUT (512,512,2), => 1024x512x3 MONOTONE IMAGE\n#     print(inp.shape)\n    inp1 = inp[:,:,:,:1]\n    inp2 = inp[:,:,:,1:]\n#     print(inp1.shape)\n#     print(inp2.shape)\n\n\n    x = tf.keras.layers.Concatenate(axis=1)([inp1, inp2])\n    x = tf.keras.layers.Concatenate(axis=-1)([x,x,x])\n#     print(x.shape)\n    \n    # OUTPUT\n    x = base_model(x)\n    x = tf.keras.layers.GlobalAveragePooling2D()(x)\n    x = tf.keras.layers.Dense(6,activation='softmax', dtype='float32')(x)\n        \n    # COMPILE MODEL\n    model = tf.keras.Model(inputs=inp, outputs=x)\n    opt = tf.keras.optimizers.Adam(learning_rate = 1e-3)\n    loss = tf.keras.losses.KLDivergence()\n\n    model.compile(loss=loss, optimizer = opt) \n        \n    return model","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:55.933284Z","iopub.execute_input":"2024-04-07T13:04:55.933665Z","iopub.status.idle":"2024-04-07T13:04:56.042402Z","shell.execute_reply.started":"2024-04-07T13:04:55.933631Z","shell.execute_reply":"2024-04-07T13:04:56.041589Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def test_model():\n\n#     model = build_model()\n#     model.load_weights(f'/kaggle/input/111111/1111/c1/EffNet_v1_f0.h5')\n\n    \n#     preprocessed_data = preprocess(submission.iloc[0]['path_eeg'])\n#     X_test1 = normalize_datawide(preprocessed_data)\n#     print(X_test1.shape)\n#     X_test2 = all_eegs2[submission.iloc[index]['eeg_id']][:, :, np.newaxis]\n#     print(X_test2.shape)\n    \n#     predictions = model.predict([X_test1, X_test2])\n    \n#     assert predictions.shape == (1, 6), \"Not Match\"\n    \n#     print(\"Pass\")\n\n# test_model()","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:56.043504Z","iopub.execute_input":"2024-04-07T13:04:56.044435Z","iopub.status.idle":"2024-04-07T13:04:56.050037Z","shell.execute_reply.started":"2024-04-07T13:04:56.044407Z","shell.execute_reply":"2024-04-07T13:04:56.049139Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# models_ownspec = []\n# # Load in EfficientnetB0 with new spectrograms\n# for i in range(Config.num_folds):\n#     model = build_model()\n#     model.load_weights(f'/kaggle/input/111111/1111/c1/EffNet_v1_f{i}.h5')\n#     models_ownspec.append(model)\n    \n# gc.collect()","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:56.051306Z","iopub.execute_input":"2024-04-07T13:04:56.051750Z","iopub.status.idle":"2024-04-07T13:04:56.058703Z","shell.execute_reply.started":"2024-04-07T13:04:56.051722Z","shell.execute_reply":"2024-04-07T13:04:56.057858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n!nvidia-smi\n\n# Installation of RAPIDS to Use cuSignal\n!cp ../input/rapids/rapids.0.17.0 /opt/conda/envs/rapids.tar.gz\n!cd /opt/conda/envs/ && tar -xzvf rapids.tar.gz > /dev/null\n!rm /opt/conda/envs/rapids.tar.gz\n\nimport sys\nsys.path += [\"/opt/conda/envs/rapids/lib/python3.7/site-packages\"]\nsys.path += [\"/opt/conda/envs/rapids/lib/python3.7\"]\nsys.path += [\"/opt/conda/envs/rapids/lib\"]\n!cp /opt/conda/envs/rapids/lib/libxgboost.so /opt/conda/lib/\n\nimport cupy as cp\nimport cusignal","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:04:56.062423Z","iopub.execute_input":"2024-04-07T13:04:56.062729Z","iopub.status.idle":"2024-04-07T13:06:18.641555Z","shell.execute_reply.started":"2024-04-07T13:04:56.062704Z","shell.execute_reply":"2024-04-07T13:06:18.640443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ndef create_spectrogram(data):\n    \"\"\"Creating a spectrogram\"\"\"\n    nperseg = 150  # Length of each segment\n    noverlap = 128  # Overlap between segments\n    NFFT = max(256, 2 ** int(np.ceil(np.log2(nperseg))))\n\n    # LL Spec = ( spec(Fp1 - F7) + spec(F7 - T3) + spec(T3 - T5) + spec(T5 - O1) )/4\n    freqs, t,spectrum_LL1 = signal.spectrogram(data['Fp1']-data['F7'],nfft=NFFT,noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_LL2 = signal.spectrogram(data['F7']-data['T3'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_LL3 = signal.spectrogram(data['T3']-data['T5'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_LL4 = signal.spectrogram(data['T5']-data['O1'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n\n    LL = (spectrum_LL1+ spectrum_LL2 +spectrum_LL3 + spectrum_LL4)/4\n\n    # LP Spec = ( spec(Fp1 - F3) + spec(F3 - C3) + spec(C3 - P3) + spec(P3 - O1) )/4\n    freqs, t,spectrum_LP1 = signal.spectrogram(data['Fp1']-data['F3'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_LP2 = signal.spectrogram(data['F3']-data['C3'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_LP3 = signal.spectrogram(data['C3']-data['P3'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_LP4 = signal.spectrogram(data['P3']-data['O1'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n\n    LP = (spectrum_LP1+ spectrum_LP2 +spectrum_LP3 + spectrum_LP4)/4\n\n    # RP Spec = ( spec(Fp2 - F4) + spec(F4 - C4) + spec(C4 - P4) + spec(P4 - O2) )/4\n    freqs, t,spectrum_RP1 = signal.spectrogram(data['Fp2']-data['F4'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_RP2 = signal.spectrogram(data['F4']-data['C4'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_RP3 = signal.spectrogram(data['C4']-data['P4'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_RP4 = signal.spectrogram(data['P4']-data['O2'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n\n    RP = (spectrum_RP1+ spectrum_RP2 +spectrum_RP3 + spectrum_RP4)/4\n\n\n    # RL Spec = ( spec(Fp2 - F8) + spec(F8 - T4) + spec(T4 - T6) + spec(T6 - O2) )/4\n    freqs, t,spectrum_RL1 = signal.spectrogram(data['Fp2']-data['F8'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_RL2 = signal.spectrogram(data['F8']-data['T4'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_RL3 = signal.spectrogram(data['T4']-data['T6'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    freqs, t,spectrum_RL4 = signal.spectrogram(data['T6']-data['O2'],nfft=NFFT, noverlap = noverlap,nperseg=nperseg)\n    RL = (spectrum_RL1+ spectrum_RL2 +spectrum_RL3 + spectrum_RL4)/4\n    spectogram = np.concatenate((LL, LP,RP,RL), axis=0)\n    return spectogram\n\ndef preprocess(path_to_parquet):\n    \"\"\"EEG to spectrogramdata\"\"\"\n    data = pd.read_parquet(path_to_parquet)\n    data = create_spectrogram(data)\n    mask = np.isnan(data)\n    data[mask] = -1\n    data = np.clip(data, np.exp(-6), np.exp(10))\n    data = np.log(data)\n    \n    return data \n\n\ndef normalize_datawide(data_point):\n    \"\"\"The spectrogram data will be normalized data wide.\"\"\"\n    eps = 1e-6\n\n    data_point = (data_point - Config.dataset_wide_mean) / (Config.dataset_wide_std + eps)\n\n    data_tensor = torch.unsqueeze(torch.Tensor(data_point), dim=0)\n    data_point = Config.image_transform(data_tensor)\n    data_point = data_point.view(512, 512, -1).numpy()\n    \n    return data_point\n\n\ndef create_spectrogram_with_cusignal(eeg_data, eeg_id, start, duration= 50,\n                                    low_cut_freq = 0.7, high_cut_freq = 20, order_band = 5,\n                                    spec_size_freq = 267, spec_size_time = 30,\n                                    nperseg_ = 1500, noverlap_ = 1483, nfft_ = 2750,\n                                    sigma_gaussian = 0.7, \n                                    mean_montage_names = 4):\n    \n    electrode_names = ['LL', 'RL', 'LP', 'RP']\n\n    electrode_pairs = [\n        ['Fp1', 'F7', 'T3', 'T5', 'O1'],\n        ['Fp2', 'F8', 'T4', 'T6', 'O2'],\n        ['Fp1', 'F3', 'C3', 'P3', 'O1'],\n        ['Fp2', 'F4', 'C4', 'P4', 'O2']\n    ]\n    \n    # Filter specifications\n    nyquist_freq = 0.5 * 200\n    low_cut_freq_normalized = low_cut_freq / nyquist_freq\n    high_cut_freq_normalized = high_cut_freq / nyquist_freq\n\n    # Bandpass and notch filter\n    bandpass_coefficients = butter(order_band, [low_cut_freq_normalized, high_cut_freq_normalized], btype='band')\n    notch_coefficients = iirnotch(w0=60, Q=30, fs=200)\n    \n    spec_size = duration * 200\n    start = start * 200\n    real_start = start + (10_000//2) - (spec_size//2)\n    eeg_data = eeg_data.iloc[real_start:real_start+spec_size]\n    \n    \n    # Spectrogram parameters\n    fs = 200\n    nperseg = nperseg_\n    noverlap = noverlap_\n    nfft = nfft_\n    \n    if spec_size_freq <=0 or spec_size_time <=0:\n        frequencias_size = int((nfft // 2)/5.15198)+1\n        segmentos = int((spec_size - noverlap) / (nperseg - noverlap)) \n    else:\n        frequencias_size = spec_size_freq\n        segmentos = spec_size_time\n        \n    spectrogram = cp.zeros((frequencias_size, segmentos, 4), dtype='float32')\n    \n    processed_eeg = {}\n\n    for i, name in enumerate(electrode_names):\n        cols = electrode_pairs[i]\n        processed_eeg[name] = np.zeros(spec_size)\n        for j in range(4):\n            # Compute differential signals\n            signal = cp.array(eeg_data[cols[j]].values - eeg_data[cols[j+1]].values)\n\n            # Handle NaNs\n            mean_signal = cp.nanmean(signal)\n            signal = cp.nan_to_num(signal, nan=mean_signal) if cp.isnan(signal).mean() < 1 else cp.zeros_like(signal)\n            \n\n            # Filter bandpass and notch\n            signal_filtered = filtfilt(*notch_coefficients, signal.get())\n            signal_filtered = filtfilt(*bandpass_coefficients, signal_filtered)\n            signal = cp.asarray(signal_filtered)\n            \n            frequencies, times, Sxx = cusignal.spectrogram(signal, fs, nperseg=nperseg, noverlap=noverlap, nfft=nfft)\n\n            # Filter frequency range\n            valid_freqs = (frequencies >= 0.59) & (frequencies <= 20)\n            frequencies_filtered = frequencies[valid_freqs]\n            Sxx_filtered = Sxx[valid_freqs, :]\n\n            # Logarithmic transformation and normalization using Cupy\n            spectrogram_slice = cp.clip(Sxx_filtered, cp.exp(-4), cp.exp(6))\n            spectrogram_slice = cp.log10(spectrogram_slice)\n\n            normalization_epsilon = 1e-6\n            mean = spectrogram_slice.mean(axis=(0, 1), keepdims=True)\n            std = spectrogram_slice.std(axis=(0, 1), keepdims=True)\n            spectrogram_slice = (spectrogram_slice - mean) / (std + normalization_epsilon)\n            \n            spectrogram[:, :, i] += spectrogram_slice\n            processed_eeg[f'{cols[j]}_{cols[j+1]}'] = signal.get()\n            processed_eeg[name] += signal.get()\n        \n        # AVERAGE THE 4 MONTAGE DIFFERENCES\n        if mean_montage_names > 0:\n            spectrogram[:,:,i] /= mean_montage_names\n\n    # Convert to NumPy and apply Gaussian filter\n    spectrogram_np = cp.asnumpy(spectrogram)\n    if sigma_gaussian > 0.0:\n        spectrogram_np = gaussian_filter(spectrogram_np, sigma=sigma_gaussian)\n\n    # Filter EKG signal\n    ekg_signal_filtered = filtfilt(*notch_coefficients, eeg_data[\"EKG\"].values)\n    ekg_signal_filtered = filtfilt(*bandpass_coefficients, ekg_signal_filtered)\n    processed_eeg['EKG'] = np.array(ekg_signal_filtered)\n\n    return spectrogram_np, processed_eeg\n\n\ndef create_spectogram_competition(spec_id, seconds_min):\n    spec = pd.read_parquet(f'/kaggle/input/hms-harmful-brain-activity-classification/test_spectrograms/{spec_id}.parquet')\n    inicio = (seconds_min) // 2\n    img = spec.fillna(0).values[:, 1:].T.astype(\"float32\")\n    img = img[:, inicio:inicio+300]\n    \n    # Log transform and normalize\n    img = np.clip(img, np.exp(-4), np.exp(6))\n    img = np.log(img)\n    eps = 1e-6\n    img_mean = img.mean()\n    img_std = img.std()\n    img = (img - img_mean) / (img_std + eps)\n    \n    return img ","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:06:18.643274Z","iopub.execute_input":"2024-04-07T13:06:18.643572Z","iopub.status.idle":"2024-04-07T13:06:18.680796Z","shell.execute_reply.started":"2024-04-07T13:06:18.643544Z","shell.execute_reply":"2024-04-07T13:06:18.679882Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm import tqdm\nimport pandas as pd\nimport cv2\nimport os\nimport matplotlib.pyplot as plt\nfrom scipy.ndimage import gaussian_filter\nfrom scipy.signal import butter, filtfilt, iirnotch\nfrom scipy.signal import spectrogram as spectrogram_np\n\n\nall_eegs2 = {}\n\n    \n    \n# Creation of spectograms on the test base\nfor i in tqdm(range(len(test_df)), desc=\"Processing EEGs\"):\n    row = test_df.iloc[i]\n    eeg_id = row['eeg_id']\n    spec_id = row['spectrogram_id']\n    seconds_min = 0\n    start_second = 0\n    eeg_data = pd.read_parquet(f'/kaggle/input/hms-harmful-brain-activity-classification/test_eegs/{eeg_id}.parquet')\n    eeg_new_key = eeg_id\n    image_50s, _ = create_spectrogram_with_cusignal(eeg_data=eeg_data, eeg_id=eeg_id, start=start_second, duration= 50,\n                                    low_cut_freq = 0.7, high_cut_freq = 20, order_band = 5,\n                                    spec_size_freq = 267, spec_size_time = 501,\n                                    nperseg_ = 1500, noverlap_ = 1483, nfft_ = 2750,\n                                    sigma_gaussian = 0.0, \n                                    mean_montage_names = 4)\n    image_10s, _ = create_spectrogram_with_cusignal(eeg_data=eeg_data, eeg_id=eeg_id, start=start_second, duration= 10,\n                                    low_cut_freq = 0.7, high_cut_freq = 20, order_band = 5,\n                                    spec_size_freq = 100, spec_size_time = 291,\n                                    nperseg_ = 260, noverlap_ = 254, nfft_ = 1030,\n                                    sigma_gaussian = 0.0, \n                                    mean_montage_names = 4)\n    image_10m = create_spectogram_competition(spec_id, seconds_min)\n    \n    imagem_final_unico_canal = np.zeros((1068, 501))\n    for j in range(4):\n        inicio = j * 267 \n        fim = inicio + 267\n        imagem_final_unico_canal[inicio:fim, :] = image_50s[:, :, j]\n        \n    \n    imagem_final_unico_canal2 = np.zeros((400, 291))\n    for n in range(4):\n        inicio = n * 100 \n        fim = inicio + 100\n        imagem_final_unico_canal2[inicio:fim, :] = image_10s[:, :, n]\n    \n    imagem_final_unico_canal_resized = cv2.resize(imagem_final_unico_canal, (400, 800), interpolation=cv2.INTER_AREA)\n    imagem_final_unico_canal2_resized = cv2.resize(imagem_final_unico_canal2, (300, 400), interpolation=cv2.INTER_AREA)\n    eeg_new_resized = cv2.resize(image_10m, (300, 400), interpolation=cv2.INTER_AREA)\n    imagem_final = np.zeros((800, 700), dtype=np.float32)\n    imagem_final[0:800, 0:400] = imagem_final_unico_canal_resized\n    imagem_final[0:400,400:700] = imagem_final_unico_canal2_resized\n    imagem_final[400:800, 400:700] = eeg_new_resized\n    imagem_final = imagem_final[::-1]\n    \n    imagem_final = cv2.resize(imagem_final, (512, 512), interpolation=cv2.INTER_AREA)\n    \n    all_eegs2[eeg_new_key] = imagem_final\n    \n    if i ==0:\n        plt.figure(figsize=(10, 10))\n        plt.imshow(imagem_final, cmap='jet')\n        plt.axis('off')\n        plt.show()\n\n        print(imagem_final.shape)","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:06:18.682188Z","iopub.execute_input":"2024-04-07T13:06:18.682554Z","iopub.status.idle":"2024-04-07T13:08:14.040643Z","shell.execute_reply.started":"2024-04-07T13:06:18.682515Z","shell.execute_reply":"2024-04-07T13:08:14.039648Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import albumentations as albu\nTARS = {'Seizure':0, 'LPD':1, 'GPD':2, 'LRDA':3, 'GRDA':4, 'Other':5}\nTARS2 = {x:y for y,x in TARS.items()}\n\nclass DataGenerator(tf.keras.utils.Sequence):\n    'Generates data for Keras'\n    def __init__(self, data, batch_size=32, shuffle=False): \n\n        self.data = data\n        self.batch_size = batch_size\n        self.shuffle = shuffle\n        self.on_epoch_end()\n        \n    def __len__(self):\n        'Denotes the number of batches per epoch'\n        ct = int( np.ceil( len(self.data) / self.batch_size ) )\n        return ct\n\n    def __getitem__(self, index):\n        'Generate one batch of data'\n        indexes = self.indexes[index*self.batch_size:(index+1)*self.batch_size]\n        X, y = self.__data_generation(indexes)\n        return X, y\n\n    def on_epoch_end(self):\n        'Updates indexes after each epoch'\n        self.indexes = np.arange( len(self.data) )\n        if self.shuffle: np.random.shuffle(self.indexes)\n                        \n    def __data_generation(self, indexes):\n        'Generates data containing batch_size samples' \n        \n        X = np.zeros((len(indexes),512,512,2),dtype='float32')\n        y = np.zeros((len(indexes),6),dtype='float32')        \n        \n        for j,i in enumerate(indexes):\n            preprocessed_data = preprocess(self.data.iloc[i]['path_eeg'])\n            \n            X[j,:,:,1:] = all_eegs2[self.data.iloc[i]['eeg_id']][:, :, np.newaxis]\n            X[j,:,:,:1] = normalize_datawide(preprocessed_data)\n            \n        return X,y","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:08:14.041954Z","iopub.execute_input":"2024-04-07T13:08:14.042260Z","iopub.status.idle":"2024-04-07T13:08:14.360527Z","shell.execute_reply.started":"2024-04-07T13:08:14.042234Z","shell.execute_reply":"2024-04-07T13:08:14.359751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = []\nmodel = build_model()\ntest_gen = DataGenerator(test_df, shuffle=False, batch_size=64)\n\nfor i in range(5):\n    print(f'Fold {i+1}')\n    model.load_weights(f'/kaggle/input/111111/1111/c1/EffNet_v1_f{i}.h5')\n    pred = model.predict(test_gen, verbose=1)\n    preds.append(pred)\npred = np.mean(preds,axis=0)\nprint()\nprint('Test preds shape',pred.shape)","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:08:14.361650Z","iopub.execute_input":"2024-04-07T13:08:14.361963Z","iopub.status.idle":"2024-04-07T13:08:29.288152Z","shell.execute_reply.started":"2024-04-07T13:08:14.361926Z","shell.execute_reply":"2024-04-07T13:08:29.287235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission=pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/sample_submission.csv\")\nlabels=['seizure','lpd','gpd','lrda','grda','other']\nfor i in range(len(labels)):\n    submission[f'{labels[i]}_vote']=pred[:, i]\nsubmission.to_csv(\"submission0.csv\",index=None)\ndisplay(submission.head())","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:08:29.289244Z","iopub.execute_input":"2024-04-07T13:08:29.289529Z","iopub.status.idle":"2024-04-07T13:08:29.311446Z","shell.execute_reply.started":"2024-04-07T13:08:29.289504Z","shell.execute_reply":"2024-04-07T13:08:29.310428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python /kaggle/input/111111/pred1.py","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:08:56.100056Z","iopub.execute_input":"2024-04-07T13:08:56.100728Z","iopub.status.idle":"2024-04-07T13:09:06.392822Z","shell.execute_reply.started":"2024-04-07T13:08:56.100691Z","shell.execute_reply":"2024-04-07T13:09:06.391721Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python /kaggle/input/111111/pred2.py","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:09:17.301321Z","iopub.execute_input":"2024-04-07T13:09:17.302285Z","iopub.status.idle":"2024-04-07T13:09:48.082038Z","shell.execute_reply.started":"2024-04-07T13:09:17.302247Z","shell.execute_reply":"2024-04-07T13:09:48.080973Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python /kaggle/input/111111/pred3.py","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:09:54.613686Z","iopub.execute_input":"2024-04-07T13:09:54.614480Z","iopub.status.idle":"2024-04-07T13:10:18.888601Z","shell.execute_reply.started":"2024-04-07T13:09:54.614445Z","shell.execute_reply":"2024-04-07T13:10:18.887581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub0 = pd.read_csv('/kaggle/working/submission0.csv') #038\nsub1 = pd.read_csv('/kaggle/working/submission1.csv') #046\nsub2 = pd.read_csv('/kaggle/working/submission2.csv') #041\nsub3 = pd.read_csv('/kaggle/working/submission3.csv') #043","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:28:28.854917Z","iopub.execute_input":"2024-04-07T13:28:28.855586Z","iopub.status.idle":"2024-04-07T13:28:28.867448Z","shell.execute_reply.started":"2024-04-07T13:28:28.855548Z","shell.execute_reply":"2024-04-07T13:28:28.866448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission=pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/sample_submission.csv\")\nlabels=['seizure','lpd','gpd','lrda','grda','other']\nfor i in range(len(labels)):\n    submission[f'{labels[i]}_vote']=sub0[f'{labels[i]}_vote']*0.4 + sub1[f'{labels[i]}_vote']*0.1 + sub2[f'{labels[i]}_vote']*0.3 + sub3[f'{labels[i]}_vote']*0.2\nsubmission.to_csv(\"submission.csv\",index=None)\ndisplay(submission.head())","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:28:30.049504Z","iopub.execute_input":"2024-04-07T13:28:30.050157Z","iopub.status.idle":"2024-04-07T13:28:30.076496Z","shell.execute_reply.started":"2024-04-07T13:28:30.050126Z","shell.execute_reply":"2024-04-07T13:28:30.075539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # Sanity Check\n# submission.iloc[:,-6:].sum(axis=1) == 1","metadata":{"execution":{"iopub.status.busy":"2024-04-07T13:28:32.570812Z","iopub.execute_input":"2024-04-07T13:28:32.571631Z","iopub.status.idle":"2024-04-07T13:28:32.581049Z","shell.execute_reply.started":"2024-04-07T13:28:32.571600Z","shell.execute_reply":"2024-04-07T13:28:32.579936Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}