{"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":40683,"sourceType":"modelInstanceVersion","modelInstanceId":34252}],"dockerImageVersionId":30674,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nfrom keras import layers\nimport pandas as pd\nimport librosa\nimport numpy as np\n\ntest = pd.read_csv('/kaggle/input/hms-harmful-brain-activity-classification/test.csv')\nprint('Test shape:',test.shape)\ntest.head()\n\nEEG_IDS = test.eeg_id.unique()\nEEG_IDS_dataframe = pd.DataFrame(EEG_IDS)\nPATH = '/kaggle/input/hms-harmful-brain-activity-classification/test_eegs/'","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-03-26T01:57:36.790789Z","iopub.execute_input":"2024-03-26T01:57:36.791158Z","iopub.status.idle":"2024-03-26T01:57:58.088121Z","shell.execute_reply.started":"2024-03-26T01:57:36.791117Z","shell.execute_reply":"2024-03-26T01:57:58.087115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_log_scale = np.zeros((EEG_IDS_dataframe.shape[0], 19)).tolist()\n\nprint('Processing Test EEG parquets...'); print()\nfor i, eeg_id in enumerate(EEG_IDS):\n    # ROW INDEX\n    GET_ROW = i\n    row = EEG_IDS_dataframe.iloc[i]\n    \n    # EEG \n    eeg = pd.read_parquet(f'{PATH}{row[0]}.parquet')\n    eeg = eeg.iloc[4000:6000]\n    \n    # Double banana montage\n    eeg['Fp1-F7'] = eeg['Fp1'] - eeg['F7']\n    eeg['F7-T3'] = eeg['F7'] - eeg['T3']\n    eeg['T3-T5'] = eeg['T3'] - eeg['T5']\n    eeg['T5-O1'] = eeg['T5'] - eeg['O1']\n    \n    eeg['Fp2-F8'] = eeg['Fp2'] - eeg['F8']\n    eeg['F8-T4'] = eeg['F8'] - eeg['T4']\n    eeg['T4-T6'] = eeg['T4'] - eeg['T6']\n    eeg['T6-O2'] = eeg['T6'] - eeg['O2']\n\n    eeg['Fp1-F3'] = eeg['Fp1'] - eeg['F3']\n    eeg['F3-C3'] = eeg['F3'] - eeg['C3']\n    eeg['C3-P3'] = eeg['C3'] - eeg['P3']\n    eeg['P3-O1'] = eeg['P3'] - eeg['O1']\n\n    eeg['Fp2-F4'] = eeg['Fp2'] - eeg['F4']\n    eeg['F4-C4'] = eeg['F4'] - eeg['C4']\n    eeg['C4-P4'] = eeg['C4'] - eeg['P4']\n    eeg['P4-O2'] = eeg['P4'] - eeg['O2']\n\n    eeg['Fz-Cz'] = eeg['Fz'] - eeg['Cz']\n    eeg['Cz-Pz'] = eeg['Cz'] - eeg['Pz']\n    \n    # EKG\n    eeg['ECG'] = eeg['EKG']\n    eeg = eeg.drop(['EKG'], axis=1)\n    eeg['EKG'] = eeg['ECG']\n    eeg = eeg.drop(['ECG'], axis=1)\n    eeg = eeg.drop(['Fp1','F3','C3','P3','F7','T3','T5','O1','Fz','Cz','Pz','Fp2','F4','C4','P4','F8','T4','T6','O2'], axis=1)\n    \n    for j in range (len(eeg.columns)):\n        # Extracting Short-Time Fourier Transform (FRAME_SIZE = 100 & HOP_SIZE = int(100/4))\n        S_scale = librosa.stft(np.array(eeg[eeg.columns[j]]), n_fft = 100, hop_length = 25)\n        \n        # Calculating the spectrogram\n        Y_scale = np.abs(S_scale) ** 2\n        \n        # Log-amplitude spectrogram\n        Y_log_scale[i][j] = librosa.power_to_db(Y_scale)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:58:05.814925Z","iopub.execute_input":"2024-03-26T01:58:05.815281Z","iopub.status.idle":"2024-03-26T01:58:17.547329Z","shell.execute_reply.started":"2024-03-26T01:58:05.815252Z","shell.execute_reply":"2024-03-26T01:58:17.546521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_log_scale = np.array(Y_log_scale)\nprint(Y_log_scale.shape)\nspectrograms_test = np.expand_dims(Y_log_scale, axis=-1)\nprint(spectrograms_test.shape)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:58:17.549104Z","iopub.execute_input":"2024-03-26T01:58:17.549807Z","iopub.status.idle":"2024-03-26T01:58:17.556456Z","shell.execute_reply.started":"2024-03-26T01:58:17.54977Z","shell.execute_reply":"2024-03-26T01:58:17.555349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"spectrograms_test_1 = spectrograms_test[:, 0]\nspectrograms_test_2 = spectrograms_test[:, 1]\nspectrograms_test_3 = spectrograms_test[:, 2]\nspectrograms_test_4 = spectrograms_test[:, 3]\nspectrograms_test_5 = spectrograms_test[:, 4]\nspectrograms_test_6 = spectrograms_test[:, 5]\nspectrograms_test_7 = spectrograms_test[:, 6]\nspectrograms_test_8 = spectrograms_test[:, 7]\nspectrograms_test_9 = spectrograms_test[:, 8]\nspectrograms_test_10 = spectrograms_test[:, 9]\nspectrograms_test_11 = spectrograms_test[:, 10]\nspectrograms_test_12 = spectrograms_test[:, 11]\nspectrograms_test_13 = spectrograms_test[:, 12]\nspectrograms_test_14 = spectrograms_test[:, 13]\nspectrograms_test_15 = spectrograms_test[:, 14]\nspectrograms_test_16 = spectrograms_test[:, 15]\nspectrograms_test_17 = spectrograms_test[:, 16]\nspectrograms_test_18 = spectrograms_test[:, 17]","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:58:23.086006Z","iopub.execute_input":"2024-03-26T01:58:23.086724Z","iopub.status.idle":"2024-03-26T01:58:23.094549Z","shell.execute_reply.started":"2024-03-26T01:58:23.086693Z","shell.execute_reply":"2024-03-26T01:58:23.093405Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"input_Fp1_F7_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_Fp1_F7_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_1 = layers.concatenate([branch1, branch2])\n\ninput_F7_T3_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_F7_T3_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_2 = layers.concatenate([branch1, branch2])\n\ninput_T3_T5_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_T3_T5_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_3 = layers.concatenate([branch1, branch2])\n\ninput_T5_O1_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_T5_O1_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_4 = layers.concatenate([branch1, branch2])\n\ninput_Fp2_F8_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_Fp2_F8_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_5 = layers.concatenate([branch1, branch2])\n\ninput_F8_T4_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_F8_T4_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_6 = layers.concatenate([branch1, branch2])\n\ninput_T4_T6_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_T4_T6_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_7 = layers.concatenate([branch1, branch2])\n\ninput_T6_O2_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_T6_O2_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_8 = layers.concatenate([branch1, branch2])\n\ninput_Fp1_F3_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_Fp1_F3_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_9 = layers.concatenate([branch1, branch2])\n\ninput_F3_C3_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_F3_C3_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_10 = layers.concatenate([branch1, branch2])\n\ninput_C3_P3_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_C3_P3_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_11 = layers.concatenate([branch1, branch2])\n\ninput_P3_O1_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_P3_O1_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_12 = layers.concatenate([branch1, branch2])\n\ninput_Fp2_F4_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_Fp2_F4_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_13 = layers.concatenate([branch1, branch2])\n\ninput_F4_C4_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_F4_C4_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_14 = layers.concatenate([branch1, branch2])\n\ninput_C4_P4_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_C4_P4_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_15 = layers.concatenate([branch1, branch2])\n\ninput_P4_O2_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_P4_O2_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_16 = layers.concatenate([branch1, branch2])\n\ninput_Fz_Cz_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_Fz_Cz_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_17 = layers.concatenate([branch1, branch2])\n\ninput_Cz_Pz_layer = keras.Input(shape=(51, 81, 1))\n\n# Convolutional Layer\nconv0 = layers.Conv2D(2, (3, 3))(input_Cz_Pz_layer)\nconv0 = keras.layers.BatchNormalization()(conv0)\nconv0 = keras.layers.Activation(\"relu\")(conv0)\n\n# Convolutional Layer\nconv1 = layers.Conv2D(4, (3, 3))(conv0)\nconv1 = keras.layers.BatchNormalization()(conv1)\nconv1 = keras.layers.Activation(\"relu\")(conv1)\n\n# Convolutional Layer\nconv2 = layers.Conv2D(8, (3, 3))(conv1)\nconv2 = keras.layers.BatchNormalization()(conv2)\nconv2 = keras.layers.Activation(\"relu\")(conv2)\n\n# Convolutional Layer\nconv3 = layers.Conv2D(16, (3, 3))(conv2)\nconv3 = keras.layers.BatchNormalization()(conv3)\nconv3 = keras.layers.Activation(\"relu\")(conv3)\n# Max Pooling Layer\npool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv3)\n\n# Convolutional Layer\nconv4 = layers.Conv2D(32, (3, 3), strides=2, activation='relu')(pool1)\nconv4 = keras.layers.Activation(\"relu\")(conv4)\n\n# Define two branches\n# Convolutional Layer\nbranch1 = layers.Conv2D(64, (3, 3), strides=2, activation='relu')(conv4)\nbranch1 = keras.layers.Activation(\"relu\")(branch1)\nbranch2 = conv4\n\n# Global Average Pooling\nbranch1 = keras.layers.GlobalAvgPool2D()(branch1)\nbranch2 = keras.layers.GlobalAvgPool2D()(branch2)\n\n# Concatenate\nmulti_scale_output_18 = layers.concatenate([branch1, branch2])\n\nall_features = layers.concatenate([multi_scale_output_1,\n                                  multi_scale_output_2,\n                                  multi_scale_output_3,\n                                  multi_scale_output_4,\n                                  multi_scale_output_5,\n                                  multi_scale_output_6,\n                                  multi_scale_output_7,\n                                  multi_scale_output_8,\n                                  multi_scale_output_9,\n                                  multi_scale_output_10,\n                                  multi_scale_output_11,\n                                  multi_scale_output_12,\n                                  multi_scale_output_13,\n                                  multi_scale_output_14,\n                                  multi_scale_output_15,\n                                  multi_scale_output_16,\n                                  multi_scale_output_17,\n                                  multi_scale_output_18])\n\nall_features = keras.layers.Dropout(35/100)(all_features)\n\ndense1 = keras.layers.Dense(512, activation=\"relu\")(all_features)\nbn_dense1 = keras.layers.Dropout(35/100)(dense1)\nbn_dense1 = keras.layers.BatchNormalization()(bn_dense1)    \n\noutput_layer = keras.layers.Dense(6, activation=\"softmax\")(bn_dense1)\n\ninputs_layer = [input_Fp1_F7_layer,\n                input_F7_T3_layer,\n                input_T3_T5_layer,\n                input_T5_O1_layer,\n                input_Fp2_F8_layer,\n                input_F8_T4_layer,\n                input_T4_T6_layer,\n                input_T6_O2_layer,\n                input_Fp1_F3_layer,\n                input_F3_C3_layer,\n                input_C3_P3_layer,\n                input_P3_O1_layer,\n                input_Fp2_F4_layer,\n                input_F4_C4_layer,\n                input_C4_P4_layer,\n                input_P4_O2_layer,\n                input_Fz_Cz_layer,\n                input_Cz_Pz_layer]\n\n# Define the model\nmodel = tf.keras.Model(inputs=inputs_layer, outputs=output_layer)\n\n# Compile the model\nmodel.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[tf.keras.metrics.kl_divergence])\n\n# Load the weights of the model\nmodel.load_weights('/kaggle/input/512_neurons_21_epochs_35_dropout_drop_ecg_95/keras/512_neurons_21_epochs_35_dropout_drop_ecg_95_percent/1/STFT_Multiscale_CNN_512_neurons_21_epochs_35_dropout_drop_ECG_95_percent.weights.h5')","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:58:28.005924Z","iopub.execute_input":"2024-03-26T01:58:28.006279Z","iopub.status.idle":"2024-03-26T01:58:30.909893Z","shell.execute_reply.started":"2024-03-26T01:58:28.006251Z","shell.execute_reply":"2024-03-26T01:58:30.908763Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Inferring test... ',end='')\npred = model.predict([spectrograms_test_1,\n                     spectrograms_test_2,\n                     spectrograms_test_3,\n                     spectrograms_test_4,\n                     spectrograms_test_5,\n                     spectrograms_test_6,\n                     spectrograms_test_7,\n                     spectrograms_test_8,\n                     spectrograms_test_9,\n                     spectrograms_test_10,\n                     spectrograms_test_11,\n                     spectrograms_test_12,\n                     spectrograms_test_13,\n                     spectrograms_test_14,\n                     spectrograms_test_15,\n                     spectrograms_test_16,                     \n                     spectrograms_test_17,\n                     spectrograms_test_18])\nprint()\nprint('Test preds shape',pred.shape)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:58:46.905612Z","iopub.execute_input":"2024-03-26T01:58:46.906371Z","iopub.status.idle":"2024-03-26T01:58:53.70408Z","shell.execute_reply.started":"2024-03-26T01:58:46.906338Z","shell.execute_reply":"2024-03-26T01:58:53.703066Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.DataFrame(pred)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:59:51.479149Z","iopub.execute_input":"2024-03-26T01:59:51.480065Z","iopub.status.idle":"2024-03-26T01:59:51.484427Z","shell.execute_reply.started":"2024-03-26T01:59:51.480028Z","shell.execute_reply":"2024-03-26T01:59:51.483441Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# CREATE SUBMISSION.CSV\nfrom IPython.display import display\n\nsub = pd.DataFrame(pred)\nsub.rename(columns={0:'seizure_vote',\n                    1:'lpd_vote',\n                    2:'gpd_vote',\n                    3:'lrda_vote',\n                    4:'grda_vote',\n                    5:'other_vote'}, inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:59:52.223035Z","iopub.execute_input":"2024-03-26T01:59:52.223405Z","iopub.status.idle":"2024-03-26T01:59:52.229977Z","shell.execute_reply.started":"2024-03-26T01:59:52.223378Z","shell.execute_reply":"2024-03-26T01:59:52.22891Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.concat([EEG_IDS_dataframe, sub], axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T01:59:56.772184Z","iopub.execute_input":"2024-03-26T01:59:56.7726Z","iopub.status.idle":"2024-03-26T01:59:56.778951Z","shell.execute_reply.started":"2024-03-26T01:59:56.772566Z","shell.execute_reply":"2024-03-26T01:59:56.777875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.rename(columns={0:'eeg_id'},inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T02:00:01.147688Z","iopub.execute_input":"2024-03-26T02:00:01.148433Z","iopub.status.idle":"2024-03-26T02:00:01.153267Z","shell.execute_reply.started":"2024-03-26T02:00:01.148403Z","shell.execute_reply":"2024-03-26T02:00:01.152378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2024-03-26T02:00:01.901717Z","iopub.execute_input":"2024-03-26T02:00:01.902129Z","iopub.status.idle":"2024-03-26T02:00:01.908947Z","shell.execute_reply.started":"2024-03-26T02:00:01.902098Z","shell.execute_reply":"2024-03-26T02:00:01.907627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Submission shape',sub.shape)\ndisplay(sub.head())\n# SANITY CHECK TO CONFIRM PREDICTIONS SUM TO ONE\nprint('Sub row 0 sums to:',sub.iloc[0,-6:].sum())","metadata":{"execution":{"iopub.status.busy":"2024-03-26T02:00:02.607435Z","iopub.execute_input":"2024-03-26T02:00:02.607878Z","iopub.status.idle":"2024-03-26T02:00:02.624472Z","shell.execute_reply.started":"2024-03-26T02:00:02.607819Z","shell.execute_reply":"2024-03-26T02:00:02.623348Z"},"trusted":true},"execution_count":null,"outputs":[]}]}